让大模型“有据可查”:一篇关于证据式文本生成的全景指南
——写给对 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. 一张图看懂技术流派
(原报告图 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 | 真人打分 | 所有场景 | 是 |
小提示:只有 ALCE 和 G-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. 结语:给开发者的行动清单
-
今天就能做:用 ALCE 框架跑一次现有数据,拿到基线分数。 -
本月可做:把检索器换成向量数据库,支持实时更新。 -
明年规划:尝试 Self-RAG,让模型在生成过程中动态决定“需不需要再查一次”。
技术不会消除幻觉,但可追溯的证据能让用户放心。
下一步,轮到你把“可信 AI”从论文搬到产品里了。