会话结束了,知识去哪了:跨会话的记忆工程
任务分解意味着一个复杂项目会跨越多个会话。每次会话结束,上下文窗口清空,Agent 的所有工作记忆归零。下一次会话从一个空白状态开始。
如果没有记忆机制,每次会话开始时你都需要重新向 Agent 解释项目的背景、当前的进展、已经做过的设计决策、踩过的坑。这个重复的信息传递既耗时又不可靠,因为你可能遗漏某些关键细节,而这些遗漏会导致 Agent 重新犯同样的错误。
Skill 卡片是解决这个问题的核心载体。每个 Agent 角色配备一份 Skill 卡片,记录它需要知道的持久化信息。一份最小的 Skill 卡片包含以下结构:
skill: Coder
inputs: [spec.section, test.failures]
outputs: [pr.diff, test.results]
definition_of_done: ["测试全绿", "PR描述映射到Spec条目"]
trust_boundaries: ["不更改数据库schema", "不修改外部API契约"]
failure_retry: {retries: 2, strategy: "缩小变更面+请求更多上下文"}
escalation: "连续失败转交Reviewer并回Spec澄清"
Skill 卡片跨会话持久存在。它承担了传统团队中隐性知识载体的功能。当一个新会话开始时,Agent 加载对应的 Skill 卡片,立刻获得角色定义、工作边界、已知的处理策略和历史教训。它不需要从零开始理解自己该做什么、能做什么、不能做什么。
除了角色级别的 Skill 卡片,还需要项目级别的知识持久化。每次会话结束时的知识捕获是关键环节:这次会话中做了什么决策?发现了什么新的约束?踩了什么坑?这些信息需要被结构化地记录下来,成为下次会话的输入。
一种有效的做法是在每次会话结束时进行简短的回顾:发生了什么?与 spec 和测试的预期有什么差异?哪个假设错了?哪个 Skill 或 spec 需要更新?这些问题的答案被捕获后写回 Skill 卡片或规约体系。
Skill 卡片本身也需要演进。随着项目推进,Agent 的角色边界可能调整,新的约束被发现,更好的处理策略被验证。Skill 卡片不是写一次就固定的配置文件,而是持续更新的知识载体。当一次 PR 引入了行为变化,对应的 Skill 卡片也应该同步更新。这是演进原则在知识层面的具体实践。
记忆工程的目标是让 Agent 的第一百次会话比第一次更高效。在人类团队中,这种积累是自然发生的。在 Agent 驱动的团队中,它需要被显式地工程化。