让大模型“有据可查”:一篇关于证据式文本生成的全景指南

——写给对 LLM 真实性心存疑虑的你

“AI 说西班牙人口将在 2025 年达到 4,800 万,是真的吗?”
如果你也曾这样追问,本文可以给你答案,并告诉你如何让大模型在回答时亮出证据


1. 为什么我们需要“证据式”文本生成?

用户常见疑惑 一句话解释
大模型会不会“编故事”? 会,这被称为幻觉(hallucination)。
怎么判断它有没有引用真实资料? 看它是否给出可追溯的引用、归因或原文引用
现有研究零散吗? 非常零散:同一概念有 7 种不同叫法,300 多种评估指标各自为政。

2025 年 8 月,德国 TU Dresden 团队发布了一份覆盖 134 篇论文 的调查报告[^1],首次把“证据式文本生成”这一领域梳理成一张清晰的地图。本文用通俗语言把报告拆给你看。


2. 证据式文本生成的三大动作

动作 日常类比 在 LLM 中的表现形式
归因(Attribution) “这句话我从哪听来的?” 回答末尾附上一段可点击的出处。
引用(Citation) 论文里的 [1] [2] 行内数字或括号,指向具体文档。
原文引用(Quotation) “张三曾说:……” 直接把证据原文嵌进回答。

调查显示:75% 的论文采用“引用”,62% 用“归因”,仅 13% 用“原文引用”[^2]。


3. 一张图看懂技术流派

taxonomy
(原报告图 4:证据式文本生成四维分类法)

我们把技术流派拆成 4 个维度,彼此组合就像搭积木:

维度 可选项(通俗版) 研究热度示例
归因方式 ①纯靠模型记忆 ②先找资料再回答 ③边写边查 ②“先找资料”占 73 篇
LLM 训练策略 不训练 / 微调 / 强化学习 78% 只靠提示词(零样本)
引用形态 文本、表格、图片、知识图谱 96% 用纯文本
评估指标 真实性、可读性、是否忠实原文…… 300 种里仅 2 种被反复使用

4. 七条技术路线,谁更适合你的产品?

4.1 纯模型法(Parametric)

  • 做法:不连外网,全靠模型肚子里学过的知识。
  • 优点:部署简单、响应快。
  • 缺点:无法回答训练数据之后的问题。
  • 代表工作:Chu et al. 的 FARD——让模型在预训练时就学会“自我归因”[^3]。

4.2 先检索后生成(Post-Retrieval)

  • 做法:用户提问 → 系统先搜 5~10 篇文档 → 让 LLM 基于这些文档写答案。
  • 关键词:RAG(Retrieval-Augmented Generation)。
  • 注意:标准 RAG 不会自动标引用,需要额外插件。

4.3 先写再找补(Post-Generation)

  • 流程:LLM 先自由发挥 → 系统再检查每句话 → 缺证据的句子被重写。
  • 代表系统:Google 的 RARR,可自动纠正幻觉[^4]。

4.4 边写边查(In-Generation)

  • 形象比喻:像“边写论文边去图书馆”。
  • 案例:Self-RAG,模型每写完一句就问自己“要不要去搜资料?”如果需要,就现场检索并继续写。

4.5 把证据直接塞提示里(In-Context)

  • 适用场景:你已经手握一批文档,例如法律卷宗或医疗病历。
  • 一句话总结:把 5 篇 PDF 直接贴进提示词,让模型“带着镣铐跳舞”。

5. 评估指标 300 选 8:产品经理的速查表

指标 考察点 适用场景 是否需人工
Citation Precision 引用是否精确到句子 问答系统
Claim Recall 答案是否覆盖所有要点 摘要
MAUVE 文本流畅度 vs 人话 聊天机器人
Exact Match 完全匹配标准答案 考试阅卷
FActScore 每个原子事实都可溯源 长报告 半自动
Context-Recall 检索回的文档是否够用 搜索增强
Levenshtein 改答案时别改太多 事实修正
Human Evaluation 真人打分 所有场景

小提示:只有 ALCEG-Eval 两个框架被 12 篇以上论文同时采用,可直接拿来就用。


6. 真实数据集:从哪儿找“带答案”的考题?

任务 最常用数据集 数据样例 获取方式
开放问答 ASQA, ELI5 知乎式长问题 + 维基百科段落 ASQA 官网
多跳问答 HotpotQA 需读两篇维基文章才能回答 HotpotQA 下载
科学问答 ExpertQA 专家提问 + 网络搜索结果 论文附录
摘要 GovReport 美国国会报告 + 人工摘要 Hugging Face
事实验证 FEVER “拿破仑死于 1821 年”——真 or 假? FEVER 官网

7. 代码示例:用 30 行 Python 跑通“先检索后生成”

以下示例完全基于公开库,不依赖私有数据。

# 步骤 0:安装
pip install langchain==0.2 faiss-cpu sentence-transformers

# 步骤 1:准备文档
from langchain.vectorstores import FAISS
from langchain.embeddings import SentenceTransformerEmbeddings
docs = [...]  # 你自己的文档列表
db = FAISS.from_documents(docs, SentenceTransformerEmbeddings('all-MiniLM-L6-v2'))

# 步骤 2:检索
question = "西班牙 2025 年人口是多少?"
retrieved = db.similarity_search(question, k=3)

# 步骤 3:生成带引用
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
prompt = PromptTemplate(
    template="请用中文回答:{question}\n\n仅基于以下资料,并在句末用[1][2]注明出处:\n{context}",
    input_variables=["question", "context"]
)
llm = OpenAI(temperature=0)
answer = llm(prompt.format(question=question,
                           context="\n".join([d.page_content for d in retrieved])))
print(answer)

8. 用户最想知道的 7 个问答(FAQ)

Q1:我想让客服机器人引用内部知识库,该选哪条技术路线?
A:如果知识库稳定且不大(<10 万条),直接“in-context”塞进提示词最省事;若文档经常更新,用“post-retrieval”实时检索。

Q2:怎么评估我的系统有没有幻觉?
A:先用 FActScore 把回答拆成原子事实,再让 NLI 模型检查每个事实是否能被原文支持,人工抽检 5% 即可。

Q3:标注成本高怎么办?
A:用 LLM-as-a-judge。把问题和回答丢给 GPT-4,让它打分,可省 80% 人工。

Q4:中文论文和英文论文引用格式不同,需要两套系统吗?
A:不需要。把引用模板做成可配置即可,例如
zh_template = "根据{authors}在{year}的研究[1]"
en_template = "According to {authors} ({year}) [1]"

Q5:模型总引用同一条维基百科,怎么破?
A:在检索阶段加入 diversity rerank,让返回结果来自不同域名或段落。

Q6:图片、表格能引用吗?
A:可以,但要用多模态模型(如 GPT-4V),指标换成 bounding-box recall

Q7:会不会因为引用太多导致阅读体验差?
A:用 single citation per claim(一句一引)足以保证可信度,同时避免阅读疲劳。


9. 未来三年,研究者最关注的 3 个缺口

缺口 一句话解释 商业机会
混合归因 同时利用模型记忆 + 实时检索,减少延迟 移动端超轻量“离线+在线”混合问答
可解释引用 让用户知道“为什么选这篇而不是那篇” 教育、法律场景的可审计 AI
统一评估 建立像 GLUE 一样的行业基准 提供一站式评测 SaaS

10. 结语:给开发者的行动清单

  1. 今天就能做:用 ALCE 框架跑一次现有数据,拿到基线分数。
  2. 本月可做:把检索器换成向量数据库,支持实时更新。
  3. 明年规划:尝试 Self-RAG,让模型在生成过程中动态决定“需不需要再查一次”。

技术不会消除幻觉,但可追溯的证据能让用户放心。
下一步,轮到你把“可信 AI”从论文搬到产品里了。