diff --git a/ga.py b/ga.py index 7af2fe4..6990f9e 100644 --- a/ga.py +++ b/ga.py @@ -443,15 +443,19 @@ class GenericAgentHandler(BaseHandler): def do_conclude_and_reflect(self, args, response): '''Agent觉得当前任务完成后有重要信息需要记忆时调用此工具。 ''' - prompt = '''### [总结提炼经验] 既然你觉得当前任务有重要信息需要记忆,请提取最近一次任务中【事实验证成功且长期有效】的环境事实与用户偏好,更新至全局记忆。 -1. 严禁记录任何任务特定中间执行过程或临时变量经验,那是过程记忆不是全局记忆。 -2. 若无高价值新事实,那就不更新任何内容。 -3. 尽量先查看现有全局记忆形式,仅作少量修改不要影响其余部分。insight也要同步更新全局记忆的短印象来提醒存在性。 -4. 优先使用file_read和file_patch来保证少量修改。 -5. 必须先阅读L0的记忆更新SOP来确保了解修改规则。 -6. 必须先阅读L0的记忆更新SOP来确保了解修改规则,这是重复强调。''' + get_global_memory() + prompt = '''### [总结提炼经验] 既然你觉得当前任务有重要信息需要记忆,请提取最近一次任务中【事实验证成功且长期有效】的环境事实、用户偏好、重要步骤,更新记忆。 +本工具是标记开启结算过程,若已在更新记忆过程或没有值得记忆的点,忽略本次调用。 +**提取行动验证成功的信息**: +- **环境事实**(路径/凭证/配置)→ `file_patch` 更新 L2,同步 L1 +- **复杂任务经验**(关键坑点/前置条件/重要步骤)→ L3 精简 SOP(只记你被坑得多次重试的核心要点) +**禁止**:临时变量、具体推理过程、未验证信息、通用常识、你可以轻松复现的细节。 +**操作**:严格遵循提供的L0的记忆更新SOP。先 `file_read` 看现有 → 判断类型 → 最小化更新 → 无新内容跳过,保证对记忆库最小局部修改。\n +''' + get_global_memory() yield "[Info] Start distilling good memory for long-term storage.\n" - return StepOutcome({"status": "success"}, next_prompt=prompt) + path = './memory/memory_management_sop.md' + if os.path.exists(path): result = file_read(path, show_linenos=False) + else: result = "Memory Management SOP not found. Do not update memory." + return StepOutcome(result, next_prompt=prompt) def _get_anchor_prompt(self): h_str = "\n".join(self.history_info[-20:]) diff --git a/memory/memory_management_sop.md b/memory/memory_management_sop.md index 5fb635e..a3e392b 100644 --- a/memory/memory_management_sop.md +++ b/memory/memory_management_sop.md @@ -1,22 +1,16 @@ ## 0. 核心公理 (Core Axioms - 最高优先级) - 1. **行动验证原则 (Action-Verified Only)** * **定义**:任何写入 L1/L2/L3 的信息,必须源自**成功的工具调用结果**(如 `shell` 执行成功、`file_read` 确认内容存在、代码运行通过)。 * **禁止**:严禁将模型的“固有知识”、“推理猜测”、“未执行的计划”或“未验证的假设”作为事实写入。 * **口号**:**No Execution, No Memory. (无行动,不记忆)** - 2. **神圣不可删改性 (Sanctity of Verified Data)** * **定义**:凡是经过行动验证的有效配置、避坑指南、关键路径,在重构(Refactoring/GC)时**严禁丢弃**。 * **操作**:可以压缩文字、可以迁移层级(从 L2 移到 L3),但绝不能丢失信息的准确性和可追溯性。 - 3. **禁止存储易变状态 (No Volatile State)** * **定义**:严禁存储随时间/会话高频变化的数据。 * **示例**:当前时间戳、临时 Session ID、正在运行的 PID、某个具体绝对路径、连接的设备信息 - --- - ## 记忆层级架构 - ``` L1: global_mem_insight.txt (极简索引层 - 严格控制 ≤50 行) ↓ 导航指向 (Pointer) @@ -24,63 +18,42 @@ L2: global_mem.txt (事实库层 - 现短但会膨胀) ↓ 详细引用 (Reference) L3: ../memory/ (记录库层 - 包含 .md/.py 等各类文件) ``` - --- - ## 各层职责与原则 - ### L1:全局内存索引 (global_mem_insight.txt) - **职责**:为 L2 和 L3 提供极简导航索引。 - **特征**: -- 体积限制:≤ 50 行(硬约束) + 体积限制:≤ 50 行(硬约束) - 内容:CONSTITUTION、STORES、ACCESS、TOPICS、LESSONS_LEARNED - 更新:L2 有新增/删除事实时同步;当发现通用且极其重要的规律时,追加 LESSONS。 - **禁止**:严禁在此层直接写入 IP、密码、完整路径、API Key。L1 只能是索引指针,不能是数据容器。不写 "How to" 或详细解释。严禁包含特定任务的技术细节(特定任务细节应该在L3)。 - --- - ### L2:全局事实库 (global_mem.txt) - **职责**:存储全局环境性事实(路径、凭证、配置、常量等)。 - **特征**: - 趋势:随环境扩展而膨胀(可接受) - 内容:按 `## [SECTION]` 组织的事实条目 - 同步:变化时更新 L1 的相应 TOPIC 导航行 - **禁止**:禁止存储易变状态、禁止存储猜测、严禁存储大模型可推理的通用常识 - --- - ### L3:任务级精简记录库 (../memory/) - 职责:补充 L1/L2 无法容纳、但对**特定任务**未来复用至关重要的少量详细信息。内容必须在满足复用需求的前提下**尽可能短**。 - 原则: - 只记录:跨会话仍重要、且难以通过少量 file_read / web_scan / 简单脚本快速重建的要点。 - 优先写:该任务特有的隐藏前置条件、典型易踩坑点,一旦遗忘会导致高成本重试的信息。 - 不记录:普通操作步骤、可在几步探测中重新获得的路径或状态信息。 - 形式: - SOP(*_sop.md):为单一任务或小类任务保留极简的「关键前置 + 典型坑」清单,避免长篇教程。 - 工具脚本(*.py):仅封装高复用、逻辑相对复杂且不希望每次都重新推理的处理流程。 --- - ## L1 ↔ L2 同步规则 - | L2 操作 | L1 同步 | |---------|--------| | 新增事实 | 在 TOPICS.GLOBAL_MEM 添加导航行 | | 删除事实 | 在 TOPICS.GLOBAL_MEM 删除导航行 | | 修改值 | 保持导航行不变 | - --- - ## 信息分类快速决策树 - ``` "这条信息该放哪层?"