Skip to content

第 37 章 Research Brief:Memory 与 Skill Design Patterns

要解决的工程问题

长期项目中的 Agent 很容易把三种不同东西混入同一处:本轮消息历史、可跨任务复用的项目知识,以及某个 Skill 的操作说明。这样做会让已经过期的推测在下一次检索中被当作事实,也会让只应读取证据的 Skill 获得写入“记忆”的隐式能力。本章研究如何把项目记忆、事件记录、决策记录、证据卡和技能契约拆成可组合、可审查的接口;重点不是增加更多存储,而是让每次读取、写入、升级、弃用都能说明责任和证据。

读者问题与范围

读者问题本章研究的回答本章不回答
消息历史、项目记忆和事件记录能否放在同一文件或同一存储里?先按任务范围、稳定性、证据要求和写入授权划分职责;物理位置相同不等于它们应共享同一读取或写入规则。为任意 Agent 框架规定唯一的数据库、目录、向量索引或保留期限。
怎样让检索结果不污染可复用知识?把检索候选与可进入项目记忆的已审查结论分离,并保留来源位置、适用范围、新鲜度和拒绝理由。仅凭相似度、模型摘要或引用 URL 自动证明内容真实、最新或适用于当前项目。
Skill 怎样复用又不耦合到某个项目的私有状态?用技能契约声明触发条件、输入、允许读取的记忆类别、是否可以提出写入候选、输出证据与版本;将项目数据留在契约外。某个 SKILL.md、元数据字段或产品发现规则会自动授予权限、隔离数据或完成审批。
旧记忆与旧 Skill 如何退出?为本书模式设置所有者、版本、替代关系、迁移证据和弃用状态;读取方应能看到“不可用”而不是静默继承旧结论。自动迁移、自动删除或跨团队兼容性的产品保证。

范围: 讨论可审查的 Memory/Skill 接口模式、读写分离、版本与弃用。章节会把第 7 章的记忆边界、第 8 章的 Skill 契约、第 33 章的项目记忆系统和第 34 章的团队 Skill Library 组织为同一套选型语言。

非范围: 不实现向量检索、嵌入、数据库、文件同步、权限系统、运行时加载器或具体 Agent 产品;不比较模型、供应商、价格、吞吐量、召回率或上下文长度;不把目录约定写成安全边界。

已核验的一手资料

本地键来源明确表达的内容允许用途不可外推
CH37-REF-01OpenAI Agents SDK 的 Sessions 在同一 session 的多次 run 间维护对话历史;运行前读取历史、运行后保存本轮项,且不能与服务端延续机制叠加。将“本轮或会话历史”作为产品特有、范围明确的一类记忆背景。任意项目记忆、跨任务知识库或组织决策记录都应采用此机制,或该机制自动解决历史污染。
CH37-REF-02LangChain 将长期记忆描述为可跨会话和 session 保存、召回的数据,并以 namespace 与 key 组织 JSON 文档;其页面也将 thread 内短期记忆与跨 thread 的长期数据区分。讨论范围标识和键空间是区分可检索记忆的一个框架例子。命名空间本身保证租户隔离、授权、数据正确性、删除、隐私或任何其他框架行为。
CH37-REF-03Agent Skills 规范要求最小 Skill 目录包含 SKILL.md,其中有 YAML frontmatter 与 Markdown 指令;规范把 metadata、正文和资源描述为渐进加载的层次。讨论 Skill 的元数据、指令和按需资源可以分层,而不是把全部项目知识塞进主体指令。所有 Agent 产品的发现、加载、工具授权、执行顺序或安全模型都相同。
CH37-REF-04Claude Code 文档把 Skill 与常驻项目指令区分:Skill 主体在使用时才加载;其路径、覆盖和调用控制属于该产品的实现。讨论“按需调用的过程指令”与常驻项目上下文应分开审查。其他 Agent、任意版本或本仓库一定使用相同的路径、优先级、命令或动态加载行为。

访问日期均为 2026-07-16。CH37-REF-01 至 CH37-REF-04 已分别映射为 REF-020、REF-022、REF-024、REF-025;完整 URL、限定陈述与刷新要求见本章参考资料。产品文档、默认实现和版本化字段均可能变化;First Draft、Technical Review 与 Fact Check 必须在写作当天重新读取。

本书研究框架

下列模式卡是本书的工程模型,不是上述 SDK、框架、规范或产品的固定 schema。它们的目标是回答“谁可以在什么证据下读取或提出写入”,而不是把记忆层当作万能数据库。

模式卡解决的问题最小接口关键限制
任务范围记忆(Task-Scoped Memory)防止一轮任务的临时判断被误作项目结论。task_id、输入摘要、临时观察、失效时点。结束任务后不能自动升级为长期知识。
决策账本(Decision Ledger)保留“为何采用此规则”及其适用条件。决策、证据、所有者、日期、替代或复核条件。历史决策不是当前事实,过期时应标为待复核。
证据卡(Evidence Card)检索让候选材料可回到来源、范围和新鲜度。来源位置、可支持主张、限制、访问日期、选择理由。检索命中只产生候选,不产生可写入结论。
事件记录(Event Record)记录某次观察、失败或人工决定,避免把运行状态改写成经验。关联任务、时间、观察、证据位置、未知项。事件不是根因、长期偏好或可复用规则。
只读 Skill(Read-Only Skill)让检索、审查或摘要流程不能隐式改写项目知识。允许来源、输入、输出证据、禁止写入声明。“只读”不证明读取内容正确、完整或可信。
提议写入 Skill(Propose-Write Skill)允许自动化整理候选记忆,同时保留人工或独立门。候选内容、来源、变更理由、目标类别、审查状态。产生候选不等于已经写入、批准或迁移成功。
版本与弃用(Version-and-Retirement)防止旧契约和旧记录静默参与新任务。版本、兼容范围、替代项、迁移证据、弃用日期或条件。版本号不自动表示兼容、迁移已执行或旧数据可安全删除。

本章延用既有术语:长期记忆(Long-term Memory)、证据卡(Evidence Card)、检索策略(Retrieval Policy)和技能契约(Skill Contract)。如 First Draft 需要将“事件记录”或“决策账本”提升为全书术语,必须先由主线程检查 .ai/glossary.md 与前置章节,不能在 Research 阶段擅自改写共享词表。

教学案例、图示与示例计划

教学案例是一个虚构的“事实核验 Skill”。它可读取项目引用库和候选证据卡,为某句待核验陈述给出三种结果:证据不足、可供人工审查的候选结论、或因来源过期而停止。它只能产生“提议写入”的记录,不能自行修改项目记忆、全局引用、正文或发布状态。案例中的书名、URL、文件、账户、审核人和运行结果均为教学假设,不对应真实项目操作。

后续图示应画出四个不可省略的断点:任务范围记忆只能向当前任务提供信息;证据卡在读取后仍是候选;技能契约决定该 Skill 是只读还是提议写入;人工或独立审查门才可把候选结论送入决策账本或长期记忆。图不能把“检索命中”“Skill 被调用”或“写入请求返回”画成事实已经核验、记忆已经更新或外部系统已经执行。

后续最小示例应只评估注入的 Memory/Skill Pattern Card:检查 Skill 是否声明可读类别、禁止或限制写入、候选是否带来源和范围、弃用项是否被拒绝。Example Implementation 阶段才决定是否实现纯内存评估器与测试;本阶段没有运行 Skill、记忆系统、模型、网络、文件操作、检索、写入、审批或外部系统。

风险、非范围与后续核验

  • 污染风险: 将模型摘要、测试输出、检索片段或人工猜测直接写入长期记忆,会使后续任务无法区分事实、候选和历史。First Draft 应要求写入候选保留来源、范围和审查状态。
  • 耦合风险: 把项目路径、私密资料、一次性命令或隐式写入步骤嵌入可复用 Skill,会让迁移与审查失去边界。Skill 契约应只声明需求,项目适配层再提供具体资源。
  • 陈旧风险: 决策、资料和 Skill 版本都会过期。弃用不是删除同义词;需要说明替代项、还未迁移的读取方以及何时停止使用旧项。
  • 权限风险: 元数据、文件位置、命名空间和“只读”文字均不是执行环境的权限保证。实际访问控制、密钥、租户隔离、数据删除和审计留给第 35、41、42 章与具体运行环境资料。
  • TODO(verify): First Draft 写作当天重读 CH37-REF-01 至 CH37-REF-04,确认动态 SDK/框架/产品文档的 URL、版本、路径和加载语义;未复核时,不写入具体 API、默认值或产品比较。
  • TODO(verify): Example Implementation 前确认本仓是否已有可复用的纯内存模式评估器;没有时只创建无 I/O 的教学实现,并将所有真实存储、检索、权限和审批标为未执行。

下一阶段

Chapter Outline 应把模式卡拆成逐节论证:先区分会话、任务、项目和事件四类记录,再定义检索与写入门;随后用 Skill Contract 分别描述只读与提议写入;最后给出版本、迁移和弃用检查表。每节必须标出允许使用的来源、教学案例、本书工程模型、最小可观察证据和不能据此主张的结论。

从同一套 Markdown 书稿生成。