TSD v2.7 已将 Web 端作为主交互界面,并要求任务全生命周期反馈、工具调用说明、多模式审批、任务图谱和记忆图谱联动。当前代码已经具备三个基础能力:
InteractionStore持久化 Web 会话和可见交互事件。memory_mirror.py将 Web 交互镜像到MemoryGraph的会话/轮次/消息结构。TaskGraphAdapter、DialogueAdapter、ExperienceAdapter可把任务、对话、经验投射到统一记忆图谱。
缺口是:工具调用、审批、工具结果等任务执行事件仍主要作为普通对话消息或前端卡片存在,尚未形成稳定的任务执行语义链,也没有在任务结束时提炼为可复用经验。
建立一条闭环:
工具/审批/进度原始事件
→ InteractionStore 事件流水
→ MemoryGraph 任务执行语义节点和边
→ 任务结束/失败/纠错触发经验提炼
→ EnhancedExperienceStore 保存经验
→ ExperienceAdapter 回投 MemoryGraph
→ 后续 L1-B 上下文检索和 L2 工具决策可召回
- 不新增主链硬编码回复。
- 不改变 L1-B 工具预判、L2 单次决策、真实 tool_call 后进入工具循环的架构。
- 不把每次普通工具调用都直接写成经验,避免经验库污染。
- 不引入新的持久化后端,继续使用
InteractionStore、MemoryGraph、EnhancedExperienceStore。
保存所有用户可见、可审计、可回放的交互事件:
pipeline.agent_startpipeline.agent_tool_callpipeline.agent_donepipeline.agent_errorIDE_APPROVAL_STATUSIDE_TOOL_RESULTIDE_CHECKPOINT_STATUS- 用户插话和审批结果
用途:
- 页面刷新、切换会话、重启后的卡片回放。
- 任务执行 trace 的原始材料。
- 中途插话时召回最近 interaction。
采用“三猜想分析”的独立节点类型方案。工具调用、工具结果、审批事件不再混入普通 DIALOGUE 类型,而是新增任务执行专用 NodeType,以便热路径 BFS、赫布学习和衰减策略能够天然区分任务执行事件与用户对话。
第一阶段新增三类底层节点:
| NodeType | 含义 | 主要用途 |
|---|---|---|
TOOL_CALL |
L2 真实发起的工具调用 | 工具选择、参数摘要、执行轮次、风险等级 |
TOOL_RESULT |
工具调用产生的结果 | 成功/失败、耗时、结果摘要、影响文件 |
APPROVAL |
审批请求与审批决策 | 审批模式、风险、用户决策、白名单演化 |
其他事件继续复用现有类型:
| 事件 | NodeType | metadata.sub_type |
|---|---|---|
| 用户/助手普通消息 | DIALOGUE | user_turn / agent_turn |
| 任务进度 | EPISODE 或 DIALOGUE | task_progress |
| 任务总结 | EPISODE 或 DIALOGUE | task_summary |
| 任务失败 | EPISODE 或 DIALOGUE | task_error |
| 经验 | EXPERIENCE | experience |
专用节点建议元数据:
| NodeType | 关键 metadata |
|---|---|
TOOL_CALL |
pair_id, tool_name, arguments_summary, fc_turn, task_graph_id, risk_level, source_event_id |
TOOL_RESULT |
pair_id, tool_name, success, latency_ms, result_preview, affected_files, source_event_id |
APPROVAL |
approval_id, pair_id, tool_name, phase, decision, risk_level, approval_mode, action_summary, source_event_id |
建议边:
| source | target | edge |
|---|---|---|
| session | round | HIERARCHY |
| round | TOOL_CALL / TOOL_RESULT / APPROVAL | HIERARCHY |
| round | task_graph/task_node | REFERENCE |
| task_node | TOOL_CALL | DEPENDENCY |
| TOOL_CALL | TOOL_RESULT | CAUSAL |
| APPROVAL(request) | APPROVAL(decision) | CAUSAL |
| APPROVAL(decision) | TOOL_CALL | CAUSAL |
| TOOL_RESULT | file/code_symbol | REFERENCE |
| TOOL_CALL | next TOOL_CALL | TEMPORAL |
| task_summary | experience | REFERENCE |
这样做的收益:
get_nodes_by_type(NodeType.TOOL_CALL)可直接定位工具调用,不需要在DIALOGUE中二次过滤。- 赫布学习可以单独统计工具调用之间的共激活,不会与普通对话节点混淆。
decay_and_prune()可对TOOL_CALL/TOOL_RESULT采用更快衰减,对APPROVAL中的用户偏好采用更慢衰减。- 任务执行 trace 可直接从专用节点和边聚合,减少文本解析噪声。
只保存经过提炼、可泛化、可复用的经验:
success:有效工具链或执行策略。failure:失败原因和规避方式。preference:用户偏好、审批偏好、路径偏好。procedure:稳定流程模板。
经验必须包含证据来源:
conversation_idturn_idtask_graph_idsource_event_idstool_chainapproval_tracefilessuccess
位置:
zulong/launcher/web_chat_router.pyzulong/launcher/memory_mirror.py
要求:
_persist_web_visible_message()在写入InteractionStore后调用 MemoryGraph mirror。THINKING_STEP中的data.interaction要原样进入 payload。- 审批事件要保留
approval_id/tool_name/risk_level/risk_reason/action_summary。
位置:
zulong/launcher/memory_mirror.py
要求:
- 识别
event_type和payload.interaction.kind。 - 为工具调用创建
TOOL_CALL节点,为工具结果创建TOOL_RESULT节点,为审批请求/决策创建APPROVAL节点。 - 生成稳定事件节点 ID,避免同一
pair_id/approval_id重复生成多节点。 - action/observation 共享
pair_id时,建立TOOL_CALL → TOOL_RESULT因果关系。 - 如果 payload 含
task_graph_id,把事件挂到对应任务图。 - 如果 payload 含文件路径,创建或引用 FILE 节点。
位置建议:
- 新建
zulong/review/task_execution_extractor.py - 或扩展
zulong/review/experience_extractor.py
输入:
- 当前
conversation_id turn_idtask_graph_idInteractionStore.get_messages(conversation_id)- MemoryGraph 中本轮 round 的子节点
输出:
{
"goal": "...",
"tool_chain": [...],
"approval_trace": [...],
"files": [...],
"result": "...",
"success": True,
"failure_reason": "",
"retry_count": 0,
"verification": [...],
"source_event_ids": [...]
}位置建议:
- 新建
zulong/review/task_experience_generator.py - 复用
EnhancedExperienceStore.add_experience()
触发时机:
pipeline.agent_donepipeline.agent_error- 审批拒绝
- 用户纠错
- 同类工具失败重复出现
规则:
- 成功任务提炼
success/procedure。 - 失败任务提炼
failure。 - 审批行为提炼
preference,但必须达到重复或明确表达阈值。 - 经验内容必须短、具体、可执行。
- 扩展
memory_graph.py与 Hybrid/Sharded 兼容层:新增TOOL_CALL、TOOL_RESULT、APPROVAL三类节点类型。 - 扩展
memory_mirror.py:将 tool action 映射为TOOL_CALL,tool observation 映射为TOOL_RESULT,审批请求/决策映射为APPROVAL。 - 在
_persist_web_visible_message()后调用 mirror,确保 Web 卡片事件同步进入 MemoryGraph。 - 支持
pair_id去重和TOOL_CALL → TOOL_RESULT因果边。 - 支持审批请求/结果节点和因果边。
- 支持 task_graph_id 到 TASK 节点的 REFERENCE 边。
- 支持同一任务内
TOOL_CALL → next TOOL_CALL的 TEMPORAL 工具链边。
验收:
- 复杂任务执行后,MemoryGraph 中能按类型查询到本轮 round 下的
TOOL_CALL、TOOL_RESULT、APPROVAL节点。 - 工具调用与工具结果通过
CAUSAL边配对,工具调用序列通过TEMPORAL边串联。 - 刷新/重启后卡片仍能由 InteractionStore 回放,MemoryGraph 中节点仍存在。
- 新建 TaskExecutionTrace 提取器。
- 从 InteractionStore 聚合工具链、审批链、结果、错误和文件路径。
- 在
pipeline.agent_done/agent_error时生成 trace 并写入 MemoryGraph summary 节点 metadata。
验收:
- 任一复杂任务完成后,可打印出结构化 trace。
- trace 中至少包含 goal、tool_chain、approval_trace、result、success、source_event_ids。
- 新建任务经验生成器。
- 将 trace 转换为经验候选。
- 使用
EnhancedExperienceStore.add_experience()保存经验。 - 保存成功后,在 MemoryGraph 中创建或更新 EXPERIENCE 节点,并与 task_summary 建 REFERENCE 边。
验收:
- 成功创建 Web 项目类任务后,经验库出现一条 procedure/success 经验。
- 失败或审批拒绝任务后,经验库出现 failure/preference 候选。
- 后续类似任务的记忆检索能召回该经验。
- 加入经验去重:相同 task_graph_id + 相近 content 不重复保存。
- 将用户正/负反馈作为经验确认信号。
- 将高价值经验标记为
IMPORTANT,低置信候选仅保留在 InteractionStore/MemoryGraph,不进入 ExperienceStore。
验收:
- 重复刷新或重复广播不会重复写经验。
- 用户明确纠错后能生成 failure lesson。
- 第一阶段只新增
TOOL_CALL、TOOL_RESULT、APPROVAL三类底层 NodeType,不扩大到进度、总结、异常等所有事件,避免一次性迁移过大。 - MemoryGraph 当前运行态有 Hybrid/Sharded 兼容层,新增节点类型必须同时兼容 Enum 类型和字符串类型存储。
- 工具调用事件数量可能很大,必须保留原始事件在 InteractionStore,MemoryGraph 只挂关键语义节点和摘要。
- 经验库不能成为日志库,只有任务结束、失败、纠错、重复模式才进入经验化。
- 审批记录可能包含敏感路径/命令,经验化时需要摘要化,避免把完整命令无脑写入长期经验。
- 完成 P0,让任务执行过程稳定进入 MemoryGraph。
- 完成 P1,让单次任务可生成结构化 trace。
- 完成 P2,让 trace 可经验化并回投 MemoryGraph。
- 完成 P3,做去重、确认和质量控制。