博客

为什么在 AI 对话里做的决定会丢失,又该存在哪里

在 ChatGPT 或 Claude 里做的决定会随着对话滚走而消失;把它们记在看板上、挂到任务下,下一次 AI 会话就会先读到它们。

Weft 是为独立创业者和小团队打造的 AI 任务管理工具。

全部文章

作者: Andrei Finogeev ·

在 ChatGPT 或 Claude 对话里做的决定之所以会丢,是因为对话没有状态。对话里没有任何东西能把某一行标记为“这就是我们定下的”,也没有东西把这一行和它影响的工作绑在一起,而新的对话总是从空白开始。解决办法是让 AI 把决定写到工作所在的地方,作为一条带理由的简短记录,并让下一次会话在动手之前先读这些记录。

Weft 是我们做的。关于其他产品的事实来自它们的官方页面,核对于 2026年10月27日。“讨论串没有状态”这个说法来自 Hypertask 关于 Slack 讨论串的文章。本文把它用到了 AI 对话上。

为什么和 ChatGPT 或 Claude 一起做的决定会消失?

你和助手花了四十分钟,权衡两家数据库服务商、两种定价模式,或者两种 API 结构。你选定了一个。理由很充分,助手也同意,于是你转向下一件事。

一周后,结论还在那段对话里,压在两百条消息的某处。新的对话对它一无所知。队友从来没看到过。而如果你第二天打开了另一个 AI 客户端,比如终端里的编程智能体,它会从零开始,还可能兴致勃勃地提议你已经否决掉的那个选项。

这不是自律的问题。一段对话就是一串消息。它没有“已决定”这个字段,没有负责人,没有和任务的关联,也没法表达“这一条取代了我们周二说的”。一个已经定下的问题和一个被放弃的问题,一旦滚出屏幕,看起来就一模一样。

对话记忆功能不是已经解决这个问题了吗?

对这件事来说没有。现在很多助手能在不同对话之间记住关于你的一些事,这对偏好和背景信息很有用。但这种记忆属于某一个产品、某一个账号。它是写给那个助手自己用的,而不是一份人能逐行审阅的记录,其他 AI 客户端也读不到。它也不会说明某个选择是关于哪个任务的,或者取代了之前哪个选择。

决策日志的要求不一样。它要能被参与项目的人和智能体找到,能被接下来接手工作的任何 AI 客户端读取,和那项工作绑在一起,并且如实保留历史:当一个决定改变时,旧的决定应该仍然可见,并附上它被取代的理由。

什么样的决定值得记录?

当别人完全可能做出不同的选择,而这个选择会影响后续工作时,就把它记下来。好的例子:

  • 在几个工具、供应商或库之间选定一个。
  • 有意放弃某件事(“本季度不做推荐计划”)。
  • 定下一条工作必须遵守的规则(“在欧盟,所有价格都含增值税显示”)。
  • 修改之前的某个选择,并附上理由。
  • 吃过亏才学到的教训(“不要在工作时间跑迁移”)。

不要记录:

  • 你随口提过但没有采纳的想法。
  • 工作本身的步骤(那属于任务和它的结果)。
  • 当事人还没同意的任何事,除非明确标注为提议。
  • 任何人一分钟内就能再查到的事实。

一个好用的检验:如果一个新的 AI 会话正要推翻这个选择,你会不会希望它先停下来,读一读为什么?如果会,就记下来。

一条好的决策记录长什么样?

写短一点,但要保留理由。下面的格式是 MADR(Markdown Architectural Decision Records)的简化版,也是 Weft 的 record_decision 工具采用的格式:

Title:        文件上传:用对象存储,不用数据库
Outcome:      上传的文件存进对象存储;数据库只保存
              文件 key 和元数据。
Status:       accepted
Context:      用户会附加最大 50 MB 的文件。把它们存进
              数据库会让备份又慢又大。
Options:      1. 对象存储      + 便宜,备份保持小巧
                               - 多一个要配置的服务
              2. 数据库字段    + 所有东西都在一处
                               - 备份随每次上传变大
Consequences: 下载需要签名 URL。
              删除任务时也必须删除它的文件。
Revisit when: 需要搜索文件内容的时候。
Task:         文件上传
  • Title(标题)给决定起个名字,方便扫一眼就找到。
  • Outcome(结论)是一句新人就能照着做的话。
  • Context(背景)是当时的实际情况。这是最先从记忆里消失的部分。
  • Options(选项)只列出实际权衡过的,不列事后编出来的替代方案。
  • Consequences(后果)包括你接受了的缺点,免得以后有人把它们当成 bug“发现”出来。
  • Revisit when(何时重新审视)说明什么情况会让这个选择变成错的。

Weft 怎么保存决策记录?

Weft 是一块任务看板,你的 AI 客户端通过 MCP 在 https://letsweft.com/api/mcp 访问它。它的 32 个工具里,有三个负责决策:

  • record_decision 接收标题和结论,外加背景、最多五个带优缺点的选项、后果,以及重新审视的条件。它可以关联到一个任务(taskId)或一个项目。记录不可修改:要改,AI 就记一条新决策,用 supersedesId 指向旧的那条,旧记录仍然保留,并标为已被取代。
  • get_context 返回工作区里仍然有效的决定和经验,最新的在前,按 token 预算打包(默认 800 个 token)。可以缩小到某个项目或任务。每一行都带日期,已被取代的决定永远不会出现,放不下的行会被计数,而不是被藏起来。
  • get_task_history 的 decisions 模式会列出关于某个任务记录过的每一个决定,包括审阅裁决及其理由。

record_decision 还有第二个用途:转达当事人在对话里对等待审阅的工作给出的裁决(接受、返工、放弃或推迟)。工具描述告诉 AI,这时它是传话的人,不是做决定的人,所以永远不应该用它来接受自己的工作。

因为记录永远不会被原地修改,历史始终是真实的。如果你在三月换了服务商,一月的决定仍然在那里,标为已被取代,而三月的记录写明了原因。

怎么让我的 AI 记录决定?

把 Weft 连到你的 AI 客户端,然后在对话开头粘贴一段类似下面的指令;如果客户端支持自定义指令或项目文件,也可以放在那里:

当我们在这段对话里做出真正的选择时(在几个选项中选定一个、
放弃某件事,或者修改之前的选择),在继续之前,用 record_decision
把它记到 Weft 里:
- title:用几个词给这个决定命名
- outcome:用一句话写出选择
- context:迫使我们做出选择的实际情况
- options:只写我们实际权衡过的选项,附上优缺点
- consequences:随之而来的好处和坏处
- confirmation:什么时候应该重新审视
- taskId 或 project:这个决定关于哪个任务或项目
如果它改变了之前的决定,就传 supersedesId,而不是去修改原记录。
不要记录闲聊、猜测,或者我还没同意的事。
如果我还没拍板,用 status "proposed"。
开始任何不那么简单的工作之前,先调用 get_context,并告诉我
哪些过去的决定适用。

连接只需一分钟。在 ChatGPT 里,Weft 是插件目录中已发布的应用,所有方案都能用,包括免费版(设置)。在 Claude Code 里只需一条命令(设置)。Claude.ai 和 Claude Desktop 把它作为自定义连接器添加。登录是在浏览器里走 OAuth,没有密钥要复制,而且 Weft 发放刷新令牌,客户端会自己续期登录。其他客户端的设置页面,包括 Cursor 和 Codex,都在文档里。

第二天我从 ChatGPT 换到 Claude Code,会怎样?

这正是那段指令要应对的场景。

  1. 周一,你在 ChatGPT 里规划一个功能。你决定把上传的文件存进对象存储而不是数据库,ChatGPT 调用 record_decision,写下背景、两个选项和后果,并关联到“文件上传”任务。
  2. 周二,你在仓库里打开 Claude Code。如果还没连接,运行:claude mcp add --transport http weft https://letsweft.com/api/mcp。
  3. 你让它接手上传任务。写代码之前,它针对这个任务调用 get_context,或者用 decisions 模式调用 get_task_history,拿回了周一的记录。
  4. 它直接基于对象存储来实现,而不是重新讨论这个问题。如果它发现了这个选择确实有误的真实理由,它可以提议一条取代周一记录的新决策,由你来定。

两个客户端读的是同一块看板、同一批决定,因为记录存在 Weft 里,而不是存在任何一段对话里。每个 OAuth 连接都是独立的操作者,看板上显示每个客户端注册时的名字,所以你能看到哪个连接创建了哪个任务。要在一块看板上运行多个智能体而不互相冲突,见多个 AI 智能体,一块看板。

ChatGPT 里的决定最终该放在哪里?

四个常见的地方,按决策日志的要求来比较:

决定最终放在哪里以后能找到其他 AI 能读和工作绑定能带理由被取代
对话历史只有你记得是哪段对话、而且搜索能搜到时不能,其他客户端打不开它否不能,后面的消息会和它矛盾,却不会做任何标记
文档或笔记页面能,前提是有人把它写下来了只有那个 AI 连接了该文档时才能松散地,通过链接通常靠直接修改,这往往会抹掉原来的理由
任务评论能,在那个任务上如果 AI 能读追踪工具里的评论是没有明确的机制,新评论不会把旧评论标为已被取代
Weft 看板上的决策记录能,通过 get_context 和 get_task_history能,任何通过 MCP 连接到该工作区的客户端都能是,按任务或项目能,supersedesId 会保留旧记录,并标为已被取代

这里的意思不是对话或文档不好。对话是你思考的地方。决定需要在做出的那一刻,由已经在对话里的那一方——AI——从对话中抄出来,放进一个有状态的地方。

这能取代我们的文档或 wiki 吗?

不能。Weft 没有文档或 wiki 功能,也不打算做成那样。长篇说明、入职指南和设计文档应该放在你的文档工具里。决策记录是有意做小的:一个选择、它的理由,以及取代它的东西。如果你的团队已经在 wiki 里维护决策记录,而你用的每个 AI 客户端都能读到它,那可能就够了。当决定是在 AI 对话里做出、而下一个读者往往是另一个 AI 时,Weft 才有用。如果你正在考虑用 Notion 做这件事,见 适合 AI 任务的 Notion 替代方案。

还有两个要坦白的限制。Weft 不会读你的对话:只有当 AI 调用 record_decision 时,决定才会被记录,所以上面那段指令很重要。另外,AI 可能会误判什么算决定,所以时不时读一下 get_context,把它弄错的取代掉。

要花多少钱?

记录和读取决定在免费方案上就能用,免费方案包含 50 个活跃任务和每月 200 次 AI 工具调用。每次 record_decision 或 get_context 调用算一次。Pro 每席位每月 $7 或每年 $60,任务和调用不限(价格)。Weft 没有 AI 点数:思考发生在你自己的 AI 客户端里,Weft 只保存看板和记录。

我在对话结束时让 ChatGPT 总结一下决定,不就行了?
可以,而且有帮助。但总结仍然存在那段对话里,或者你粘贴到的地方。它没有和任务绑定,其他 AI 客户端读不到,而当决定改变时,也没有记录说明它取代了什么。在每个决定做出时就记录下来,这三个问题都能避免。
不用叮嘱,AI 会自己记录决定吗?
record_decision 的工具描述告诉 AI,只要用户在对话里做出真正的选择,就使用它,所以有些客户端会这么做。但别指望它。粘贴的那段指令把这件事说得明明白白,而且你随时可以说“把这个决定记下来”。
如果决定记错了,能修改吗?
不能原地修改。记录是不可修改的。记一条更正后的决策,用 supersedesId 指向记错的那条。旧记录会保留并标为已被取代,get_context 也不会再显示它。
决定必须关联任务吗?
不必。一个决定可以关联到任务、项目,或者都不关联。关联到任务后,get_task_history 会把它显示在那项工作旁边,get_context 也可以缩小范围到它。
这和 Weft 的工作记忆是一回事吗?
不是。工作记忆(简短的经验笔记)是单独的 Pro 功能。决策记录来自 record_decision,代码里并没有把它限制为 Pro。
如果我用的 AI 客户端不止一个呢?
这正是这么做的主要理由。连到同一个 Weft 工作区的 ChatGPT、Claude Code、Cursor 或 Codex,都通过 get_context 读取同一批决定,所以第二个客户端不会把第一个已经定下的问题重新翻出来。