引用与答案依据
引用与答案依据 · 阅读后完成下方实验与检查题,再用「标记完成」记录进度。
学习目标
读完本课你能给 AI 回答配上「可打开的依据」:引用要能定位到具体文档片段,并且你能核对一条引用是否真正支持它旁边的结论,资料不足时也知道该怎么体面地说不知道。
问题场景
助手回答「删除接口是幂等的,见《接口规范》」。你点开文档翻了一遍——文档确实有这句话,但回答里还有半句「超过 24 小时的删除请求会被拒绝」,文档里压根没有。引用存在,但结论超出引用。用户一旦发现一次这种「半真回答」,对所有回答的信任都会打折。引用这件事,做到了「存在」只是及格线,做到「支持」才算数。
核心解释
一条合格的引用要有三要素:
- 定位:能打开。本站资料片段自带
document_id+order_index+heading(A19 切分时留下的元数据),凭这三个字段能定位到「哪份文档的第几段、属于哪个标题」。 - 摘录:不用翻原文就能核对。把命中片段的原文(
snippet)随引用一起展示,search_documents返回的片段就带 300 字以内的snippet。 - 对应:哪句结论由哪段支持要挂得上钩。整篇「参考文档」式的模糊引用没有核对价值。
// 引用数据结构:定位 + 摘录,均可由服务端从真实命中生成
interface DocRef {
documentId: string; // 定位:哪份文档
orderIndex: number; // 定位:第几个片段(配合 heading 展示)
heading: string | null;
snippet: string; // 摘录:片段原文(截断到 300 字)
claim: string; // 对应:这条引用支持回答里的哪句结论
}
「引用存在」≠「引用支持」,这是本课最要紧的区分。核对一条引用问三个问题:
- 引用的片段在资料库里真实存在吗?(防幻觉引用)
- 片段内容与结论说的是同一件事吗?(防「相关但不支持」)
- 结论有没有超出片段范围的部分?(防「半真回答」)
第三问最重要也最容易漏:片段支持结论的前半句,不代表支持整句。核对不能靠模型自觉,要靠固定流程——本课实验区就是一个最简核对器,把「结论关键词是否都落在引用片段里」变成可重复的检查。
示例拆解
资料不足的处理,看本站的真实写法(lib/ai/tools.ts):
if (rows.length === 0) {
return {
result: JSON.stringify({
total: 0,
message: "资料库没有命中内容;如无必要不要编造资料来源。",
}),
refs: [],
};
}
关键点:
- 「不知道」要作为结构化结果传给模型,而不是让检索静默失败。模型拿到「没有命中」的明确信息,才有机会回答「资料里没有相关内容」——这句话本身就是正确答案。
refs由服务端生成,与工具结果同源:本站 chat 接口在工具执行后把命中整理成refs事件(A10 协议)推给前端,前端渲染成可点击的来源。模型口头说的「据资料显示」不进refs,因为不可核查。- 核对是抽查制度不是一次性动作:A32 会把「引用是否支持结论」做成评估的一层;日常使用时每次点开一条引用核对,就是在给系统做免费测试。
动手任务
- 跑本课实验区,观察三条回答的核对结果:找出「引用存在但不支持」的那条,说清它的结论哪里超出了片段。
- 给实验区的核对函数加一档「部分支持」:结论关键词只有一部分落在片段里时返回这个判定。
- 在站内实际问一个资料问题,点开回答附带的引用,按三问流程核对一次,记录结果(支持 / 部分支持 / 不支持)。
常见错误
- 引用只给文档名不给片段:用户要翻整份文档才能核对,等于没引。定位粒度必须到片段(order_index + heading)。
- 让模型自己标「引用」:模型可能标出不存在的片段号。引用必须由服务端从真实命中生成,模型最多决定「用哪条」。
- 把相关当支持:片段讲「登录锁定」、结论讲「删除限制」,主题相近就引用过去——核对时逐关键词对,不凭主题感觉。
- 资料不足时让模型「尽力答」:无命中还让它回答,等于逼它编造。正确动作是把「没有命中」如实传给模型并允许它说不知道。
检查与复盘
自查清单:
- 能说出引用三要素(定位、摘录、对应)分别防什么问题
- 能区分「引用存在」与「引用支持」,并举出各自的反例
- 能解释无命中时返回结构化提示为什么比静默空列表好
参考资料
- OpenAI 文档:Function calling —— 工具结果如何回传并约束回答
- Anthropic 文档:Retrieval augmented generation (RAG) —— 引用与依据的官方实践
- 下一课 A23 讲检索打不中时的主动手段:改写问题、重排候选。
读完这一课了?
标记完成后,工作台会安排接下来的学习。