Agent Zero 记忆插件的碎片自动提取机制:深入解析 memories_sum 系统提示词
2026/9/14 8:27:59 网站建设 项目流程

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字段划分为mainfragmentssolutions三个区域(见 Memory.Area 枚举)。

本提示词服务于其中一条自动化路径:每轮独白(monologue)结束时,由扩展在后台调用一个"utility model"(低规格实用模型),让它阅读整段对话历史并产出值得长期记住的碎片事实。调用链如下(源自 _50_memorize_fragments.py):

  1. 插件配置memory_memorize_enabledtrue时,monologue_end扩展启动一个后台DeferredTask
  2. 扩展通过self.agent.read_prompt("memory.memories_sum.sys.md")加载本文档作为系统提示词;
  3. self.agent.concat_messages(self.agent.history)拼接的完整对话历史作为用户消息。为避免实用模型上下文溢出,源码将历史截断到最近 80000 字符(MAX_MSGS_CHARS = 80000);
  4. call_utility_model(system=..., background=True)发起调用,LLM 按提示词约定输出 JSON 数组;
  5. 结果经DirtyJson.parse_string容错解析、列表归一化、正则质量过滤,再写入向量库的fragments区域。

因此这份提示词不直接面向主对话 Agent,而是给"记忆蒸馏员"看的作业规范——它的输出质量直接决定了向量库里碎片记忆的信噪比。

任务定义:从历史中找出"持久信息"

提示词开篇以三点定义了助手的工作:

  1. 助手接收 USER 与 AGENT 之间的对话 HISTORY;
  2. 从 HISTORY 中搜索值得记住的持久信息(durable information);
  3. 为未来工作值得回忆的稳定信息写记注(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 conversationAI 的指令/想法
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 testAgent 行为历史,非持久事实
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匹配localhost127.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=8max_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_enabledtrue是否启用 monologue 结束时的自动碎片记忆化
memory_memorize_consolidationtrue启用智能合并管线;关闭则走阈值替换
memory_memorize_replace_threshold0.9阈值替换模式下删除旧碎片的余弦相似度门槛(>0才生效)
project_memory_isolationtrue项目内会话记忆隔离到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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询