Refactor: enhance memory distillation logic and streamline SOP

This commit is contained in:
Liang Jiaqing
2026-02-08 18:13:56 +08:00
parent 1b9438e7b4
commit 9bc79db442
2 changed files with 13 additions and 36 deletions

20
ga.py
View File

@@ -443,15 +443,19 @@ class GenericAgentHandler(BaseHandler):
def do_conclude_and_reflect(self, args, response): def do_conclude_and_reflect(self, args, response):
'''Agent觉得当前任务完成后有重要信息需要记忆时调用此工具。 '''Agent觉得当前任务完成后有重要信息需要记忆时调用此工具。
''' '''
prompt = '''### [总结提炼经验] 既然你觉得当前任务有重要信息需要记忆,请提取最近一次任务中【事实验证成功且长期有效】的环境事实用户偏好,更新至全局记忆。 prompt = '''### [总结提炼经验] 既然你觉得当前任务有重要信息需要记忆,请提取最近一次任务中【事实验证成功且长期有效】的环境事实用户偏好、重要步骤,更新记忆。
1. 严禁记录任何任务特定中间执行过程或临时变量经验,那是过程记忆不是全局记忆 本工具是标记开启结算过程,若已在更新记忆过程或没有值得记忆的点,忽略本次调用
2. 若无高价值新事实,那就不更新任何内容。 **提取行动验证成功的信息**
3. 尽量先查看现有全局记忆形式仅作少量修改不要影响其余部分。insight也要同步更新全局记忆的短印象来提醒存在性。 - **环境事实**(路径/凭证/配置)→ `file_patch` 更新 L2同步 L1
4. 优先使用file_read和file_patch来保证少量修改。 - **复杂任务经验**(关键坑点/前置条件/重要步骤)→ L3 精简 SOP只记你被坑得多次重试的核心要点
5. 必须先阅读L0的记忆更新SOP来确保了解修改规则 **禁止**:临时变量、具体推理过程、未验证信息、通用常识、你可以轻松复现的细节
6. 必须先阅读L0的记忆更新SOP来确保了解修改规则这是重复强调。''' + get_global_memory() **操作**严格遵循提供的L0的记忆更新SOP。先 `file_read` 看现有 → 判断类型 → 最小化更新 → 无新内容跳过,保证对记忆库最小局部修改。\n
''' + get_global_memory()
yield "[Info] Start distilling good memory for long-term storage.\n" 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): def _get_anchor_prompt(self):
h_str = "\n".join(self.history_info[-20:]) h_str = "\n".join(self.history_info[-20:])

View File

@@ -1,22 +1,16 @@
## 0. 核心公理 (Core Axioms - 最高优先级) ## 0. 核心公理 (Core Axioms - 最高优先级)
1. **行动验证原则 (Action-Verified Only)** 1. **行动验证原则 (Action-Verified Only)**
* **定义**:任何写入 L1/L2/L3 的信息,必须源自**成功的工具调用结果**(如 `shell` 执行成功、`file_read` 确认内容存在、代码运行通过)。 * **定义**:任何写入 L1/L2/L3 的信息,必须源自**成功的工具调用结果**(如 `shell` 执行成功、`file_read` 确认内容存在、代码运行通过)。
* **禁止**:严禁将模型的“固有知识”、“推理猜测”、“未执行的计划”或“未验证的假设”作为事实写入。 * **禁止**:严禁将模型的“固有知识”、“推理猜测”、“未执行的计划”或“未验证的假设”作为事实写入。
* **口号****No Execution, No Memory. (无行动,不记忆)** * **口号****No Execution, No Memory. (无行动,不记忆)**
2. **神圣不可删改性 (Sanctity of Verified Data)** 2. **神圣不可删改性 (Sanctity of Verified Data)**
* **定义**凡是经过行动验证的有效配置、避坑指南、关键路径在重构Refactoring/GC时**严禁丢弃**。 * **定义**凡是经过行动验证的有效配置、避坑指南、关键路径在重构Refactoring/GC时**严禁丢弃**。
* **操作**:可以压缩文字、可以迁移层级(从 L2 移到 L3但绝不能丢失信息的准确性和可追溯性。 * **操作**:可以压缩文字、可以迁移层级(从 L2 移到 L3但绝不能丢失信息的准确性和可追溯性。
3. **禁止存储易变状态 (No Volatile State)** 3. **禁止存储易变状态 (No Volatile State)**
* **定义**:严禁存储随时间/会话高频变化的数据。 * **定义**:严禁存储随时间/会话高频变化的数据。
* **示例**:当前时间戳、临时 Session ID、正在运行的 PID、某个具体绝对路径、连接的设备信息 * **示例**:当前时间戳、临时 Session ID、正在运行的 PID、某个具体绝对路径、连接的设备信息
--- ---
## 记忆层级架构 ## 记忆层级架构
``` ```
L1: global_mem_insight.txt (极简索引层 - 严格控制 ≤50 行) L1: global_mem_insight.txt (极简索引层 - 严格控制 ≤50 行)
↓ 导航指向 (Pointer) ↓ 导航指向 (Pointer)
@@ -24,63 +18,42 @@ L2: global_mem.txt (事实库层 - 现短但会膨胀)
↓ 详细引用 (Reference) ↓ 详细引用 (Reference)
L3: ../memory/ (记录库层 - 包含 .md/.py 等各类文件) L3: ../memory/ (记录库层 - 包含 .md/.py 等各类文件)
``` ```
--- ---
## 各层职责与原则 ## 各层职责与原则
### L1全局内存索引 (global_mem_insight.txt) ### L1全局内存索引 (global_mem_insight.txt)
**职责**:为 L2 和 L3 提供极简导航索引。 **职责**:为 L2 和 L3 提供极简导航索引。
**特征** **特征**
- 体积限制:≤ 50 行(硬约束) 体积限制:≤ 50 行(硬约束)
- 内容CONSTITUTION、STORES、ACCESS、TOPICS、LESSONS_LEARNED - 内容CONSTITUTION、STORES、ACCESS、TOPICS、LESSONS_LEARNED
- 更新L2 有新增/删除事实时同步;当发现通用且极其重要的规律时,追加 LESSONS。 - 更新L2 有新增/删除事实时同步;当发现通用且极其重要的规律时,追加 LESSONS。
**禁止**:严禁在此层直接写入 IP、密码、完整路径、API Key。L1 只能是索引指针,不能是数据容器。不写 "How to" 或详细解释。严禁包含特定任务的技术细节特定任务细节应该在L3 **禁止**:严禁在此层直接写入 IP、密码、完整路径、API Key。L1 只能是索引指针,不能是数据容器。不写 "How to" 或详细解释。严禁包含特定任务的技术细节特定任务细节应该在L3
--- ---
### L2全局事实库 (global_mem.txt) ### L2全局事实库 (global_mem.txt)
**职责**:存储全局环境性事实(路径、凭证、配置、常量等)。 **职责**:存储全局环境性事实(路径、凭证、配置、常量等)。
**特征** **特征**
- 趋势:随环境扩展而膨胀(可接受) - 趋势:随环境扩展而膨胀(可接受)
- 内容:按 `## [SECTION]` 组织的事实条目 - 内容:按 `## [SECTION]` 组织的事实条目
- 同步:变化时更新 L1 的相应 TOPIC 导航行 - 同步:变化时更新 L1 的相应 TOPIC 导航行
**禁止**:禁止存储易变状态、禁止存储猜测、严禁存储大模型可推理的通用常识 **禁止**:禁止存储易变状态、禁止存储猜测、严禁存储大模型可推理的通用常识
--- ---
### L3任务级精简记录库 (../memory/) ### L3任务级精简记录库 (../memory/)
职责:补充 L1/L2 无法容纳、但对**特定任务**未来复用至关重要的少量详细信息。内容必须在满足复用需求的前提下**尽可能短**。 职责:补充 L1/L2 无法容纳、但对**特定任务**未来复用至关重要的少量详细信息。内容必须在满足复用需求的前提下**尽可能短**。
原则: 原则:
- 只记录:跨会话仍重要、且难以通过少量 file_read / web_scan / 简单脚本快速重建的要点。 - 只记录:跨会话仍重要、且难以通过少量 file_read / web_scan / 简单脚本快速重建的要点。
- 优先写:该任务特有的隐藏前置条件、典型易踩坑点,一旦遗忘会导致高成本重试的信息。 - 优先写:该任务特有的隐藏前置条件、典型易踩坑点,一旦遗忘会导致高成本重试的信息。
- 不记录:普通操作步骤、可在几步探测中重新获得的路径或状态信息。 - 不记录:普通操作步骤、可在几步探测中重新获得的路径或状态信息。
形式: 形式:
- SOP*_sop.md为单一任务或小类任务保留极简的「关键前置 + 典型坑」清单,避免长篇教程。 - SOP*_sop.md为单一任务或小类任务保留极简的「关键前置 + 典型坑」清单,避免长篇教程。
- 工具脚本(*.py仅封装高复用、逻辑相对复杂且不希望每次都重新推理的处理流程。 - 工具脚本(*.py仅封装高复用、逻辑相对复杂且不希望每次都重新推理的处理流程。
--- ---
## L1 ↔ L2 同步规则 ## L1 ↔ L2 同步规则
| L2 操作 | L1 同步 | | L2 操作 | L1 同步 |
|---------|--------| |---------|--------|
| 新增事实 | 在 TOPICS.GLOBAL_MEM 添加导航行 | | 新增事实 | 在 TOPICS.GLOBAL_MEM 添加导航行 |
| 删除事实 | 在 TOPICS.GLOBAL_MEM 删除导航行 | | 删除事实 | 在 TOPICS.GLOBAL_MEM 删除导航行 |
| 修改值 | 保持导航行不变 | | 修改值 | 保持导航行不变 |
--- ---
## 信息分类快速决策树 ## 信息分类快速决策树
``` ```
"这条信息该放哪层?" "这条信息该放哪层?"