9

Memory 记忆系统

让 Agent 在不同对话间记住你

LLM 的「失忆」问题

大语言模型有一个根本局限:每次新对话,它都从零开始。它不记得昨天你跟它说了什么,不知道你的偏好,不了解你的项目背景。 这意味着你可能需要反复解释: • 你的项目用什么技术栈 • 你喜欢什么编码风格 • 上次对话修了什么 Bug • 你的角色和工作重点 记忆系统就是为了解决这个问题。

OpenHarness 的记忆机制

OpenHarness 使用基于文件的记忆系统,核心组件包括: 📄 MEMORY.md 记忆的索引文件,列出所有记忆条目的标题和链接。每次对话开始时会被加载到上下文中。 📁 记忆目录 每条记忆存储为一个独立的 Markdown 文件,按主题组织。 记忆系统的设计非常巧妙:MEMORY.md 作为索引始终在上下文中,Agent 可以快速知道有哪些记忆可用,需要时再读取具体文件。

四种记忆类型

OpenHarness 定义了四种记忆类型: 👤 用户记忆(User) 关于用户的信息:角色、偏好、专业水平等。 例如:「用户是高级 Go 开发者,但刚接触 React」 💬 反馈记忆(Feedback) 用户对 Agent 行为的纠正和肯定。 例如:「不要在每次回复末尾做总结」 📋 项目记忆(Project) 项目相关的信息:目标、截止日期、特殊约定。 例如:「3 月 5 日后有代码冻结期」 🔗 参考记忆(Reference) 外部资源的位置信息。 例如:「Bug 追踪在 Linear 的 INGEST 项目中」

一条记忆长什么样

memory/feedback_testing.md
1---
2name: 测试偏好
3description: 用户对测试方式的偏好
4type: feedback
5---
6
7集成测试必须使用真实数据库,不要 Mock。
8
9**Why:** 上季度 Mock 测试全部通过,但真实数据库
10迁移失败,导致了生产事故。
11
12**How to apply:** 所有涉及数据库的测试都使用
13测试数据库实例,不使用任何 Mock。

记忆的生命周期

1. 创建:Agent 在对话中发现值得记住的信息时,自动写入记忆文件 2. 索引:将记忆条目添加到 MEMORY.md 索引 3. 加载:每次新对话开始时,MEMORY.md 被加载到上下文 4. 使用:Agent 根据记忆调整自己的行为 5. 更新:如果信息过时,Agent 会更新或删除记忆 重要的是,Agent 在使用记忆前会验证信息是否仍然准确。记忆可能过时,所以 Agent 会将记忆与当前代码状态对照。
📌 关键要点
文件 = 持久化,索引 = 高效访问
OpenHarness 的记忆系统设计巧妙:用简单的 Markdown 文件存储记忆(易读、易编辑),用 MEMORY.md 作为索引(快速定位)。不需要数据库,不需要复杂的向量存储,文件系统就是最好的持久化方案。
🧠 检验理解
MEMORY.md 在记忆系统中的角色是什么?