RAG-04生成编排-Grounded-Generation-RAG

本文属于 RAG 工程框架中的「4 生成与智能体编排」环节,聚焦「Grounded Generation(证据绑定生成)」方法。可先阅读 RAG-00.方法概述 再进入本篇。

原理

在提示中强制“先证据后结论”,仅允许基于证据片段生成,减少幻觉(Hallucination)。

关键技术/实现路径

  • 证据优先提示模板。
  • 输出结构约束(答案+证据+不确定性)。
  • 生成后事实核验。

优缺点

  • 优点:事实一致性显著提升。
  • 缺点:回答风格可能更保守。

性能与资源

  • 中等开销,质量收益显著。

应用场景

  • 高准确性要求问答系统。

统一合成数据示例

输入数据片段

1
{"query":"机票报销规则","evidence":["D01:机票上限2000元","D01:30天内提交"]}

中间结果(受约束生成草稿)

1
{"draft_claims":["机票上限2000元","30天内提交"],"unsupported_claims":[]}

最终生成示例(含引用)

1
{"answer":"机票报销上限2000元,且需30天内提交。","citations":[{"doc_id":"D01","evidence_span":"机票上限2000元;30天内提交"}]}

原始发表与工程实现

  • 代表性原始发表:RARR (2023)。
  • 核心解决问题:解决幻觉与不可验证答案。
  • 成熟实现工具:Guardrails AI, TruLens, DeepEval。

详细原理拆解

  • 证据先行生成,claim 必须可回溯到 evidence,降低幻觉。
  • 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
  • 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1
2
3
4
5
flowchart LR
In[输入 Query 与知识] --> Core[方法核心计算]
Core --> Rank[匹配/路由/排序]
Rank --> Build[证据组装]
Build --> Out[答案与引用]

工程落地扩展示例

伪代码

1
2
3
4
5
6
7
def grounded_generate(query, evidence, llm, entailment, config):
draft = llm.draft(query, evidence)
claims = split_claims(draft)
unsupported = [c for c in claims if entailment(c, evidence) < config.support_threshold]
if unsupported:
return llm.rewrite(query, evidence, claims, drop=unsupported)
return finalize(draft, evidence)

参数示例

1
2
3
4
entailment_model: deberta-v3-nli
support_threshold: 0.82
max_rewrite_rounds: 2
abstain_if_unsupported: true

常见失败案例

  • 失败模式 1:NLI 阈值过高,大量真命题被判 unsupported,答案过度拒答。
  • 失败模式 2:证据本身矛盾,entailment 无法仲裁,需上游冲突检测。
  • 失败模式 3:改写轮次多,延迟上升且可能引入新幻觉。

Demo 数据带入计算示例

1
2
草稿含 3 条结论,其中「可特批」无证据;entailment 对应该句得分 0.31 < 0.82 → 标记 unsupported。
重写后仅保留「上限2000」「30天内」两条,**答案完全落在证据闭包内**。
-------------本文结束感谢您的阅读-------------