想象一下,你雇了一个实习生(AI大模型),他学东西超快,能力超强,几乎什么都会。但你发现他有个致命的毛病:记性不好,而且容易分心。
- 你让他去完成一个包含10个步骤的复杂任务,比如“去客户公司取回合同,复印三份,一份给法务部,一份给财务部,最后把原件送到总裁办公室归档”。
- 当他做到第3步“复印三份”时,可能就已经忘了最初的目标是“取回合同”,也忘了最后要送给谁。他可能会拿着复印件,然后问你:“老板,接下来干嘛?” 这就是 “目标漂移” (Goal Drift) 。
- 更糟糕的是,如果你给他的指令太长,他只对开头和结尾的印象最深,中间部分很容易忽略掉。这就是AI研究中提到的 “中间遗忘” (Lost in the Middle) 问题。
Manus这篇文章要解决的,就是AI Agent(人工智能代理)在处理需要很多步骤(比如几十上百次工具调用)的复杂任务时,如何克服这种“聪-明的健忘症”。
核心思想是什么?——“不要改造大脑,而是给它一个好用的笔记本”
文章提出的核心思想非常巧妙,不是去尝试“治好”AI的健忘症(这需要改造AI模型本身,非常困难),而是用一种聪明的工作方法来绕过这个问题。
这个方法就是:强制AI把所有要做的事情,以及每一步的进展,都清清楚楚地写在一个“笔记本”上,并且每做完一小步,就要重新看一遍、整理一遍这个笔记本。
这个“笔记本”,就是我们在之前讨论中提到的 todo.md 文件。
这个过程,文章称之为 “上下文工程” (Context Engineering) 。意思就是,我们不去改变AI,而是精心设计和管理我们“喂”给AI的信息(即“上下文”),来引导它的行为和注意力。
整个方法的精髓所在,具体分为以下几个步骤:
第一步:先思考,写下计划 (Plan First)
- 当接到一个复杂任务时,AI Agent的第一件事不是马上动手干活。
- 而是先“动脑筋”,把完成整个任务需要的所有步骤,一条一条地写进一个
todo.md文件里。这就像你给那个实习生一支笔和一个便签本,让他把自己要干的活先写下来。
第二步:只看清单,干一件事 (Focus on One Item)
- AI看着清单上的第一项任务,然后集中精力去完成这一项。比如,清单第一项是“调用A工具获取数据”。
第三步:更新清单,划掉已完成的 (Update the List)
- 一旦完成了第一项任务,AI 不会 马上接着做第二项。
- 它会做一件至关重要的事:重新生成一整个
todo.md文件。在这个新版本的文件里,它会把刚刚完成的第一项任务用删除线划掉(或者打个勾[x]),并可能记录下这一步的结果(比如“数据已成功获取”)。
第四步:循环往复,直到全部完成 (Loop until Done)
- AI会拿着这个 更新后 的清单,再次从头看起,找到下一个未完成的任务,然后重复第2步和第3步。
这个方法为什么神奇?
因为AI的注意力总是在它接收到的信息的 “末尾” 。通过在每一步之后都 “重写整个清单” ,Manus实际上是把 “总目标”和“下一步计划” 这些最重要的信息,在每一次决策前,都重新放到了上下文的末尾。
这就像你每当那个健忘的实习生做完一件事,就把他拉过来,指着笔记本对他说: “很好,这件事做完了。别忘了,我们的最终目标是把合同归档,你现在需要去做下一件事——复印。去吧!”
通过这种方式,AI的注意力被人为地、反复地拉回到主任务上,从而避免了走神和忘记目标。
那如何才能生成完整的todo.md
第一步:准备“原料” (The Ingredients)
要让厨师(AI)做出一桌好菜,你必须先给他准备好所有新鲜、优质的食材。这里的“食材”,就是我们之前精心设计的 “洋葱模型”上下文。
在生成 todo.md 之前,我们的平台必须自动地、完整地将以下四层信息打包好:
-
核心任务指令 (要干什么?):
- 目标: “在
UserService中实现RegisterWithEmail方法” - 输入/输出:
(email, password)->(user_id, error) - 验收标准: 成功时返回用户ID,邮箱重复时返回特定错误等。
- 目标: “在
-
代码环境上下文 (在哪里干?):
- 相关数据模型:
User结构体的定义。 - 相关函数签名:
database.SaveUser(...),utils.HashPassword(...)等需要调用的函数。 - 目标文件路径:
services/user_service.go。
- 相关数据模型:
-
功能意图上下文 (为什么干?):
- 用户故事: “作为一个新用户,我希望能够使用邮箱和密码注册账户...”
- 相关逻辑图(PUML): 用户注册的完整时序图,让AI明白这一步在整个流程中的位置。
-
项目规范上下文 (按什么规矩干?):
- 架构原则: “本项目为微服务架构...”
- 编码规范: “错误处理必须使用
errors.Wrap...”
这些信息会被打包成一个结构化的JSON对象,作为AI制定计划的唯一事实来源。
第二步:精心设计“指令” (The Master Prompt)
有了食材,现在需要给厨师(AI)一份精确的“菜谱”。这份菜谱就是一个精心设计的 “Master Prompt” (主指令) 。这个指令的目标不是让AI写代码,而是让它 扮演一个规划者。
这个Prompt应该包含以下几个部分:
-
角色扮演 (Role-Playing):
- “你是一位拥有15年经验的资深软件架构师和技术负责人。” (设定高标准)
-
任务描述 (Task Description):
- “你的任务是为下游的一个AI开发者代理(AI Developer Agent),根据我提供的完整上下文信息,创建一份详细、清晰、可执行的行动计划。请以Markdown格式输出这份计划,文件名为
todo.md。”
- “你的任务是为下游的一个AI开发者代理(AI Developer Agent),根据我提供的完整上下文信息,创建一份详细、清晰、可执行的行动计划。请以Markdown格式输出这份计划,文件名为
-
对计划的要求 (Requirements for the Plan):
- “逻辑必须严密: 步骤的顺序必须符合软件开发的正常逻辑(例如,先定义接口,再实现,最后写测试)。”
- “步骤必须原子化: 每个步骤都应该是一个单一、具体、可执行的小动作(例如‘读取文件’、‘写入方法签名’,而不是‘开发功能’)。”
- “必须包含验证环节: 计划中必须明确包含编写单元测试、运行测试以及根据测试结果进行修正的步骤。”
- “必须包含规范检查: 在计划的最后,必须有一个步骤是回顾和检查所有代码变更是否符合项目规范。”
- “必须包含上下文快照: 在计划的开头,要简要总结最终目标和关键约束,以便AI Agent在后续的每一步都能看到。”
-
提供上下文数据 (Providing the Context):
- “请严格根据以下JSON对象中提供的上下文信息来制定计划:\n
{...我们打包好的完整JSON...}”
- “请严格根据以下JSON对象中提供的上下文信息来制定计划:\n
第三步:生成与输出 (Generation & Output)
当AI接收到这个精心设计的指令和完整的上下文数据后,它就会输出一份高质量的、结构化的 todo.md。