Agent Zero 记忆插件的碎片自动提取机制:深入解析 memories_sum 系统提示词
【免费下载链接】agent-zeroAgent Zero AI framework项目地址: https://gitcode.com/GitHub_Trending/ag/agent-zero
memory.memories_sum.sys.md是 Agent Zero_memory插件中"对话碎片自动记忆化"流水线的核心系统提示词。本文完整拆解该提示词定义的任务、输出格式、提取规则与合并清洗策略,并结合 自动记忆化扩展、质量过滤器 与 FAISS 向量存储实现 的源码,说明一条对话是如何经过 LLM 提炼、正则质检和智能合并后,最终沉淀为可跨会话复用的持久事实。
提示词在记忆流水线中的位置
Agent Zero 的记忆系统由 _memory 插件 提供,底层是一个按 memory 子目录隔离的 FAISS 向量库,记忆按area字段划分为main、fragments、solutions三个区域(见 Memory.Area 枚举)。
本提示词服务于其中一条自动化路径:每轮独白(monologue)结束时,由扩展在后台调用一个"utility model"(低规格实用模型),让它阅读整段对话历史并产出值得长期记住的碎片事实。调用链如下(源自 _50_memorize_fragments.py):
- 插件配置
memory_memorize_enabled为true时,monologue_end扩展启动一个后台DeferredTask; - 扩展通过
self.agent.read_prompt("memory.memories_sum.sys.md")加载本文档作为系统提示词; - 将
self.agent.concat_messages(self.agent.history)拼接的完整对话历史作为用户消息。为避免实用模型上下文溢出,源码将历史截断到最近 80000 字符(MAX_MSGS_CHARS = 80000); call_utility_model(system=..., background=True)发起调用,LLM 按提示词约定输出 JSON 数组;- 结果经
DirtyJson.parse_string容错解析、列表归一化、正则质量过滤,再写入向量库的fragments区域。
因此这份提示词不直接面向主对话 Agent,而是给"记忆蒸馏员"看的作业规范——它的输出质量直接决定了向量库里碎片记忆的信噪比。
任务定义:从历史中找出"持久信息"
提示词开篇以三点定义了助手的工作:
- 助手接收 USER 与 AGENT 之间的对话 HISTORY;
- 从 HISTORY 中搜索值得记住的持久信息(durable information);
- 为未来工作值得回忆的稳定信息写记注(notes)。
三个动词层层递进:接收、筛选、凝练。注意第三点要求的是"notes about stable information"——输出对象不是原文复述,而是经过稳定化改写的事实陈述。
输出格式:JSON 文本数组与空数组语义
提示词对格式做了两条硬约束:
- 响应格式是一个JSON 文本数组,元素为待记忆的事实字符串;
- 若历史中没有任何有用信息,响应必须是一个空 JSON 数组(而非空字符串或省略响应)。
输出示例:
[ "User's name is John Doe", "User's dog's name is Max", ]空数组语义在整个管线中很关键:源码中len(memories) == 0时日志记录 "No useful information to memorize." 并直接返回,不产生任何写库操作。这避免了"无信息轮次"污染向量库,也让"什么都不记"成为一种被显式建模的合法输出。
提取规则:只记持久、完整、可复用的事实
"Rules" 一节是全提示词的核心,逐条拆解如下:
- 只记忆完整且在未来对话中大概率仍然有用的信息——完整(complete)与持久(durable)双重门槛;
- 绝不记忆模糊或不完整的信息(如只有 "User's name" 而没有值);
- 绝不只记关键词或标题(如 "Dog Information"、"RAM Status" 这类裸主题);
- 聚焦对象清单:持久用户偏好、稳定项目事实、反复出现的协作约束、重要身份信息、已配置的服务、长期存在的(long-lived)需求;
- 不记忆机器相关的本地坐标:机器本地端点、个人绝对路径、容器工作目录、临时运行时坐标都不作为碎片记忆;只有当"稳定的项目关系本身"重要时才转写成通用事实(例如把 "localhost:8848 上有活运行时" 转写成 "项目配置了一个 live runtime 供 smoke 检查");
- 不记忆对未来无用的无关细节;
- 不记忆会变化的事实,如时间、日期("Today is Monday" 这类即典型反例);
- 不添加历史中未明确提及的细节——禁止脑补;
- 不记忆 AI 的指令或想法(如 "Respond with a warm greeting..." 属于系统指令残留);
- 不记忆 Agent 本会话的行为:做过什么、跑过什么命令、创建过哪些文件、测试输出、临时路径、实现琐碎细节、仅用于清理的事实;
- 一次性请求不记,除非它同时声明了持久偏好、稳定项目事实或反复出现的约束;
- 唯一亮点是任务进度或已完成的实现时,返回空数组——可复用的解决过程应进入 successful-solution memory(对应
solutions区域),而非碎片(fragments)。
最后一条实际上在提示词层面完成了 fragments 与 solutions 两类记忆的分流:过程性经验归 solutions,事实性状态归 fragments。
合并与清洗:低数量、高完整度的去重策略
"Merging and cleaning" 一节规定了写入前的自清洗协议,目标是"让新记忆数量低、单条记忆更完整详细":
- 同一主题的信息不得拆成多条,应保留为一段文本;
- 同主题多个事实合并为一条更详细的记忆。文档给出的标准示例:不是三条 "User's dog is Max"、"Max is 6 years old"、"Max is white and brown",而是合并为一条 "User's dog is Max, 6 years old, white and brown.";
- 历史中修正了先前事实时,只输出当前完整事实,不输出新旧两版;
- 可变偏好/事实优先写成单条 profile 式陈述,如 "User currently prefers..."、"Project currently uses...";
- 不记临时测试标记、临时行为检查或仅用于清理的事实。
这与提示词"格式"节的空数组要求共同构成了幂等性设计:多次对同一主题的记忆不会产生版本堆积,库里只保留"当前真值"。
正反例对照:提示词的判例库
文档随后给出了两组带解释的判例,是理解其判定标准的最佳材料。
正确示例(值得记忆的数据及原因):
| 示例 | 归类 |
|---|---|
| User's name is John Doe | 身份重要 |
| User prefers Linux shell commands and relative virtualenv paths over Windows-only examples | 稳定用户偏好 |
| Project currently uses a configured live runtime for smoke checks | 不带本地坐标的稳定项目事实 |
| Runtime-impacting plugin changes must be synced into the configured live environment before testing | 反复出现的项目约束 |
错误示例(绝不应输出的记忆及错误原因):
| 反例 | 错误原因 |
|---|---|
| Dog Information | 只有主题,没有可用事实 |
| The user requested current RAM and CPU status. | 没有确切事实可记 |
| User greeted with 'hi' | 纯寒暄,未来无用 |
| Respond with a warm greeting and invite further conversation | AI 的指令/想法 |
| User's name | 缺细节,不可用 |
| Today is Monday | 仅日期,无价值 |
| Market inquiry / RAM Status | 只有主题没有细节 |
| User used to prefer X before changing to Y | 历史偏好无用,只记当前偏好 |
| Temporary marker ABC123 was used in a memory test | 测试残留 |
| Agent created a temporary CLI demo file and ran a shell test | Agent 行为历史,非持久事实 |
| The live UI was reachable at a machine-local endpoint during this session | 本地运行时细节 |
| User asked to build a tiny CLI todo app | 一次性请求 |
| The markdown-to-HTML script generated sample.html with 181 bytes | 任务输出,未来无用 |
| AsyncRaceError in primary_modules.py was fixed by adding a thread lock on line 123 | 属于可复用解决方案(solutions),不属于碎片 |
| Hello(Further WRONG examples) | 无意义单字 |
值得注意最后一行 "Further WRONG examples: Hello"——以最极端的碎片收尾,强调"再短、再无信息量的输入也要拒绝"。
源码佐证:提示词之后的第二道防线
提示词是第一道过滤,但源码并未止步于此。LLM 输出的碎片在进入向量库前还要经过 memory_quality.py 的正则质检filter_auto_memory_fragments,其判定逻辑与提示词规则一一对应,形成双重保险:
- 最小长度门槛:少于 24 字符直接拒绝(对应 "Hello" 类反例);
- 低价值白名单拦截:
_LOW_VALUE_RE匹配 "hello"、"greeting"、"task completed" 等裸短语; - 临时性特征拦截:
_TRANSIENT_RE匹配/tmp、"temporary"、"test marker"、"cleanup token"、"one-off" 等词,对应提示词"不记临时标记"规则; - 本地坐标拦截:
_LOCAL_COORDINATE_RE匹配localhost、127.0.0.1、/home/.../、C:\Users\等,对应"不记机器相关坐标"规则; - Agent 行为与命令历史拦截:
_AGENT_ACTION_RE(agent/assistant 后 80 字符内出现 created/fixed/ran 等动词)与_COMMAND_HISTORY_RE(ran/executed + 命令、exit code、stdout 等)命中且不含持久关系词时拒绝; - 准入双要件:必须同时命中持久主题词(
user|project|repo|...)和持久关系词(prefers|uses|configured|must|...)才放行。
只有通过质检的碎片才会被"\n\n".join记录进日志并进入写库分支。
落库路径:智能合并与阈值替换两种模式
质检后的碎片按 default_config.yaml 中的配置走两条写库路径:
智能合并模式(memory_memorize_consolidation: true,默认开启):扩展为每条碎片创建MemoryConsolidator(实现见 memory_consolidation.py),参数取similarity_threshold=0.7(即 memory_load 工具 的DEFAULT_THRESHOLD)、max_similar_memories=8、max_llm_context_memories=4。合并器先在向量库中检索相似记忆:若无相似项则直接插入;若有,则由 LLM 按合并提示词在merge / replace / update / keep_separate / skip五种动作中裁决,把提示词里"同主题合并为一条更详细记忆"的语义策略真正落到向量库操作层面(删除旧文档、插入合并后文档)。整条处理带 60 秒超时保护。
阈值替换模式(consolidation 关闭时):先调用db.delete_documents_by_query,删除fragments区域中相似度超过memory_memorize_replace_threshold(默认0.9)的旧碎片,再insert_text插入新碎片。这是提示词"修正时只保留当前事实"规则在向量层面的简化实现——用高相似阈值近似"同一事实的旧版本"。
两种模式最终都写入 FAISS 索引(余弦距离,见 Memory.initialize),文档元数据带随机id、ISO 时间戳和area: fragments。相关配置项汇总:
| 配置项 | 默认值 | 作用 |
|---|---|---|
memory_memorize_enabled | true | 是否启用 monologue 结束时的自动碎片记忆化 |
memory_memorize_consolidation | true | 启用智能合并管线;关闭则走阈值替换 |
memory_memorize_replace_threshold | 0.9 | 阈值替换模式下删除旧碎片的余弦相似度门槛(>0才生效) |
project_memory_isolation | true | 项目内会话记忆隔离到projects/<name>子目录 |
小结
memory.memories_sum.sys.md虽然只有一份提示词文件的体量,却完整定义了一套**"什么值得记"的判定标准**:以持久性、完整性、可复用性为三要素,用空数组建模"无信息",用合并协议保证库里只有当前真值,再用正反判例把边界情形钉死。源码侧则以 80k 字符截断、DirtyJson容错解析、正则质检、智能合并四层工程手段把提示词的承诺兑现为可靠的写库行为。对希望理解 Agent Zero 长期记忆质量为何可控的读者,这份提示词与它背后的执行链是值得逐行对照的样本:提示词定义了记忆的认知边界,代码则负责守住这条边界。
【免费下载链接】agent-zeroAgent Zero AI framework项目地址: https://gitcode.com/GitHub_Trending/ag/agent-zero
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考