SAG 式多跳推理 Agent
概述
本技能让你像 SAG(SQL-Retrieval Augmented Generation)那样思考:不是被动地做一次向量检索就停,而是沿着实体链主动追查,从已找到的内容里发掘新线索,多跳扩展直到拼出完整答案。
核心心法:把知识库想象成一张"事项网络",每个事项卡片上有实体标签。你的工作是走通实体与实体之间的连接路径——就像 SQL JOIN 一样精确地串联线索。
SAG 式推理六步法
Phase 1:实体聚光灯 🔦
从用户问题中提取所有命名实体,按"特异性"降序排列。特异性越高,作为连接点的价值越大。
实体类型(按特异性从高到低):
- 🥇 专有名词(公司名、项目名、产品名、人名)→ 最高价值
- 🥈 专业术语(技术概念、行业黑话)→ 中等价值
- 🥉 通用概念("系统"、"方案"、"流程")→ 最低价值,容易误匹配
输出:一个排好序的实体列表,标注每个实体的类型。
示例:
问题:"收购了B公司的企业,其CTO后来加入了哪个项目?"
实体提取:
1. [专有名词] B公司 — 最高特异性
2. [专有名词] CTO — 较高特异性(职位+缩写)
3. [术语] 收购 — 中等
4. [通用] 项目 — 低
→ 优先用"B公司"和"CTO"做种子检索
Phase 2:种子检索 🌱
用 Phase 1 提取的高特异性实体,对知识库做并行搜索。
搜索策略:
- 每个高特异性实体单独搜索一次(不用组合搜索)
- 每次都要求取回 Top-K 结果
- 合并所有搜索结果,去重
⚠️ 关键检查点:检查种子检索是否命中与你预期相关的文档。如果种子检索全部空手而归,检查:
- 实体名称是否准确?(试试同义词、简称、别名)
- 搜索词是否太窄?(试试放宽到实体的类型/类别)
输出:一组种子文档,记录每个文档命中了哪些实体。
种子检索结果:
- 文档1: [B公司] "A公司全资收购了B公司"
- 文档2: [CTO] "张三被任命为A公司的CTO"
→ 已命中2份文档,涉及实体:A公司、B公司、张三、CTO
Phase 3:实体传播 🧬
扫描所有种子文档,发现"新实体"——即那些出现在种子文档中、但不在原始问题中的实体。
寻找新实体的方法:
1. 逐篇读取种子文档的核心内容
2. 标出文中的专有名词(人名、公司名、项目名、地名)
3. 与 Phase 1 的原始实体列表对比
4. 不在原始列表中的 = 新实体
新实体的价值:
- 新实体是连接不同文档的"桥梁"
- 原始问题中没出现这个词,但它默默地连接着多份文档
- 这正是传统 RAG 的盲区:找到了文档1和2就停了,因为没意识到"张三"这个不在问题中的词是通往文档3的关键
种子文档扫描结果:
文档1出现实体:A公司、B公司、全资收购
文档2出现实体:张三、A公司、CTO、任命
原始问题实体:B公司、CTO
→ 新实体发现:A公司(出现在2份文档中)、张三(出现在1份文档中)
→ 【张三】是关键桥梁:不在原始问题中,但它是文档1和文档2之间的连接点
Phase 4:多跳扩展 🔗
用 Phase 3 发现的新实体,执行多轮扩展搜索:
- 第一跳:用新实体搜索知识库 → 发现更多相关文档
- 扫描新文档:提取这些新文档中的实体
- 第二跳:发现更多新实体 → 继续搜索
- 重复直到满足停止条件
停止条件(满足任一即停):
- ✅ 已拼出完整的推理链,可以直接回答问题
- ✅ 连续两跳没有发现新的高特异性实体
- ✅ 最大跳数已达(建议上限:4跳,与 MuSiQue 最难测试集对齐)
- ✅ 上下文窗口已接近上限
第一跳扩展:
搜索"张三" →
文档3: "张三离职,加入了盘古大模型项目"
新实体发现:盘古大模型、离职、加入
第二跳扩展:
搜索"盘古大模型" →
文档4: "盘古大模型是XX公司开发的..."
→ 已获得足够信息回答问题,停止扩展
推理链:
[B公司] → 文档1 [A公司收购B公司]
↓ 新实体"张三"
文档2 [张三任A公司CTO]
↓
文档3 [张三加入盘古大模型]
Phase 5:证据组装 🧩
将所有发现按实体链串联成完整的推理路径:
- 画实体链图:原始实体 → 中间新实体 → 最终目标实体
- 每段证据标注来源:哪个文档、哪句话
- 识别推理断点:如果链在某处断裂,明确标出"此处为推测"而非事实
- 评估确定性:整条链有多少步是基于精确匹配(高确定性),多少步是基于语义相似(低确定性)
推理链(确定性评估):
Step 1: B公司 → 文档1 {实体精确匹配} ✅ 高确定性
Step 2: A公司 ← 文档2 {实体精确匹配} ✅ 高确定性
↑ 张三(新实体)
Step 3: 张三 → 文档3 {实体精确匹配} ✅ 高确定性
Step 4: 盘古大模型 → 答案 {实体精确匹配} ✅ 高确定性
整条链确定性:100%(每步都是精确实体匹配)
Phase 6:答案生成 ✅
按推理链生成最终答案,格式要求:
## 答案
[直接回答用户问题]
## 推理链
实体1 → [文档A] → 新实体X → [文档B] → ... → 答案
(标注每步的证据来源)
## 确定性说明
- 精确实体匹配:X步
- 语义近似匹配:Y步
- 推测成分:Z处
工作流示例
示例 1:企业并购推理
用户:「收购了B公司的企业,其CTO后来加入了哪个项目?」
Phase 1: 实体[B公司, CTO]
Phase 2: 搜索"B公司"→文档1[收购]; 搜索"CTO"→文档2[任命张三]
Phase 3: 扫描→发现新实体[张三, A公司]
Phase 4: 搜索"张三"→文档3[加入盘古大模型]; 搜索"A公司"→文档1已命中
Phase 5: B公司→A公司→张三→盘古大模型 (100%精确)
Phase 6: 答案→盘古大模型
示例 2:事件追溯
用户:「为什么3号产线的良率在Q3下降了?」
Phase 1: 实体[3号产线, 良率, Q3]
Phase 2: 搜索→车间日报[Q3良率92%→85%], 质量周报[3号产线异常]
Phase 3: 扫描→发现新实体[设备编号NX-2000, 工艺变更通知单]
Phase 4: 搜索"NX-2000"→维修记录[7月15日更换核心部件]
搜索"工艺变更"→技术通告[Q2末调整了退火温度参数]
Phase 5: 3号产线→良率下降→更换零部件→工艺参数变更
其中"更换零部件"和"工艺变更"有精确文档匹配 ✅
"两者因果关系"是基于维修日志与技术通告的时间前后顺序 ⚠️推测
Phase 6: 答案→Q3良率下降主要关联两个事件……
与 SAG 的映射关系
| SAG 组件 | 本技能对应步骤 | 差异说明 |
|---|---|---|
| 离线事件卡片入库 | Phase 2 种子检索 | 技能没有预建索引,靠搜索工具实时获取 |
| SQL 实体表 | Phase 1 实体提取 | 技能靠 LLM 识别实体,不精确但更灵活 |
| SQL JOIN 动态超边 | Phase 3→4 实体传播+扩展 | 技能手动跟踪实体链,SAG 自动 JOIN |
| TOP-N 证据合并 | Phase 5 证据组装 | 两者思路一致 |
| 可解释 Trace | Phase 6 推理链输出 | 技能输出自然语言链,可读性更高 |
注意事项
- 每次搜索都是成本:合理控制跳数(建议≤4),不要无限制扩展
- 新实体必须是"埋藏"的实体才值钱:如果所有实体都在原始问题中,说明没有多跳空间
- 没有命中时及时止损:连续两跳没有新实体,或者新实体全是通用词,停止扩展
- 区分精确匹配和语义推测:最终答案中明确标注哪些是严格证据,哪些是合理推测
- 与普通 RAG 结合:如果问题没有多跳需求,走普通 RAG 更快——先判断是否需要多跳