Files
sanguo_moziplus_v2/docs/research/trajectory-distillation-research.md
T
2026-05-26 23:21:11 +08:00

7.3 KiB
Raw Blame History

调研专题:对话历史蒸馏为 Skill

日期:2026-05-26 状态:方案已确认,待执行 发起人:主公 执行人:诸葛亮(调度)+ 庞统/司马懿(数据源)


1. 背景

庞统和司马懿积累了大量对话历史(共 ~2GB JSONL),其中包含丰富的实践经验——用户纠正、反复试错、成功模式、协作流程等。这些经验目前只埋在历史对话里,每次遇到类似问题还要重新沟通、重新纠正。

目标:从历史对话中批量蒸馏经验,形成结构化 Skill,供所有将军直接使用。

Skill 存放位置~/.openclaw/sanguo_projects/sanguo_moziplus_v2/skills/(开发目录,部署位置待定)


2. 数据源全貌

数据源 位置 规模 价值
庞统 JSONL ~/.openclaw/agents/pangtong-fujunshi/sessions/ 961 文件, 1.2G 最丰富,含完整 tool 调用链
司马懿 JSONL ~/.openclaw/agents/simayi-challenger/sessions/ 410 文件, 751M 代码评审经验
Sanguo Mail ~/.sanguo_projects/sanguo_mail/mail/ 80 封邮件, 404K 协作流程和决策记录
各将军 MEMORY.md workspace-*/MEMORY.md 庞统 ~80 行, 司马懿 ~30 行 已沉淀的经验(可直接用)
诸葛亮 MEMORY.md ~/.openclaw/workspace/MEMORY.md ~150 行 全局经验

合计:约 2GB JSONL + 80 封邮件 + 若干 MEMORY/notes

JSONL 数据格式说明

OpenClaw 的 JSONL 格式(v3):

// 每行一个 JSON 对象,type 字段区分
{"type": "session", "id": "...", "timestamp": "...", "cwd": "..."}  // 会话开始
{"type": "model_change", "provider": "zhipu", "modelId": "glm-5.1"} // 模型信息
{"type": "message", "message": {"role": "user/assistant", "content": [...]}} // 消息

消息内容(message.content)为数组,每项:

  • {"type": "text", "text": "..."} — 文本
  • {"type": "tool_use", "name": "...", "input": {...}} — 工具调用
  • {"type": "tool_result", "content": "..."} — 工具返回

另有 trajectory JSONL(含 traceSchema: openclaw-trajectory),格式略有不同但同样包含完整的消息流。


3. 扫描模式(6 种)

来自业界研究 + 三国团队实践整合:

# 模式 信号特征 蒸馏价值 理论来源
纠正模式 用户消息含"不对/错了/不要/停/我说的不是" 最高 Trace2Skill(失败轨迹分析)、Hermes self-improvement
反复试错模式 同一任务 3+ 次连续 tool call 失败后成功 AgenTracer(反事实归因)、SkillRL(失败教训蒸馏)
成功模式 复杂任务(5+ tool calls)一次成功 Hermes5+ tool calls 自动保存 skill
协作模式 Sanguo Mail 往来、agent 间 send_message 三国团队实践
决策分歧模式 用户说"先不要"/"方案"/"等等"后 Agent 调整方向 三国团队实践——Agent 学会"什么时候该问不该做"
经验声明模式 Agent 自发总结"以后应该XX"/"这个方法好" 三国团队实践——Agent 自己的经验判断,常被遗忘

理论参考

论文/项目 核心思路 我们的借鉴点
Trace2Skill (2603.25158) 并行子 Agent 分析多条 trajectory,提取局部经验,归纳合并为统一 Skill 批量处理 + 归纳合并的思路
Hermes Curator (v0.12) 后台 Agent 定期评分/合并/修剪 Skill 库(7 天周期) 长期维护机制
SkillRL (aiming-lab) 成功轨迹→战略模式,失败轨迹→简明教训 双向蒸馏(成功+失败)
AgenTracer (2509.03312) 反事实回放定位失败轨迹中的关键错误步骤 精确归因"错在哪"
Hermes self-improvement 复杂任务(5+ tool calls)后自动保存 Skill 触发阈值设计

4. 提炼流程(5 步)

Step 1: 分类扫描

输入:所有 JSONL 文件 + Sanguo Mail + MEMORY.md 方法:Python 脚本遍历,按 6 种模式的关键词和结构特征标记片段 产出:带标签的片段索引

# 纠正模式信号词
CORRECTION_SIGNALS = [
    "不对", "错了", "不要", "停", "我说的不是", "不是这个意思",
    "重新来", "重来", "别这样", "不要这样", "你再看看",
    "no", "wrong", "stop", "not what I meant", "redo"
]

# 试错模式:连续 3+ 次 tool_result 含错误信息
# 成功模式:5+ tool_use 且最终用户满意(无纠正信号)
# 协作模式:send_message / Sanguo Mail 引用
# 决策分歧:用户消息含"先不要"/"方案"/"等等"/"确认"
# 经验声明:Agent 消息含"以后"/"应该"/"建议"/"经验"

Step 2: 片段提取

输入:片段索引 方法:按标签提取上下文窗口(纠正/试错前后各 5 轮对话) 产出:候选经验片段集合(预计几百条)

Step 3: LLM 归纳(sub-agent 并行)

输入:按模式分组的片段集合 方法:每个 sub-agent 处理一批同类片段,输出经验卡片 产出:经验卡片(格式如下)

# 经验卡片格式
场景: "什么情况下遇到"
做法: "正确的处理方式"
关键细节: "容易踩的坑"
反面教训: "错误做法及后果"
来源: "agent名/session-id/行号"
置信度: "high/medium/low"

Step 4: 合并去重 → Skill 初稿

输入:经验卡片集合 方法:同类卡片合并为 Skill 文件,遵循 SKILL.md 标准结构 产出:若干 SKILL.md 初稿

Step 5: 主公审阅

输入Skill 初稿 方法:展示给主公,确认/修改后放入 ~/.openclaw/sanguo_projects/sanguo_moziplus_v2/skills/ 产出:正式 Skill 文件


5. 预期产出 Skill

Skill 主要来源模式 说明
mozi-task-creation-guide ①② 创建 mozi 任务时的避坑指南
code-review-checklist ③④ 司马懿的评审模式总结
agent-collaboration-patterns ④⑤ 将军间协作最佳实践
requirement-clarification-patterns 什么时候该问、怎么问
error-recovery-patterns 常见错误和恢复方式
coding-anti-patterns 编码中常犯的错误

以上为预判,实际产出取决于扫描结果。


6. 执行计划

阶段 内容 负责人 状态
调研 本文档 诸葛亮 完成
Step 1 编写扫描脚本 + 运行 诸葛亮 → sub-agent 待执行
Step 2 片段提取 sub-agent 待执行
Step 3 LLM 归纳 sub-agent(并行) 待执行
Step 4 合并为 Skill 初稿 诸葛亮 待执行
Step 5 主公审阅 主公 待执行
Step 5 主公审阅 主公 待执行

7. 长期机制(Curator

蒸馏完成后,需要建立持续改进机制(参考 Hermes Curator):

  • 触发条件:每次复杂任务完成后,Agent 自动判断是否值得保存
  • 周期清理:定期检查 Skill 使用频率,淘汰僵尸 Skill
  • 使用中改进:使用 Skill 时发现过时立即 patch

这部分待 Skill 体系建立后落地。