A22第 1 / 1 课时未开始内容版本 1.0.0 · 核验于 2026-10-26

引用与答案依据

引用与答案依据 · 阅读后完成下方实验与检查题,再用「标记完成」记录进度。

学习目标

读完本课你能给 AI 回答配上「可打开的依据」:引用要能定位到具体文档片段,并且你能核对一条引用是否真正支持它旁边的结论,资料不足时也知道该怎么体面地说不知道。

问题场景

助手回答「删除接口是幂等的,见《接口规范》」。你点开文档翻了一遍——文档确实有这句话,但回答里还有半句「超过 24 小时的删除请求会被拒绝」,文档里压根没有。引用存在,但结论超出引用。用户一旦发现一次这种「半真回答」,对所有回答的信任都会打折。引用这件事,做到了「存在」只是及格线,做到「支持」才算数。

核心解释

一条合格的引用要有三要素:

  1. 定位:能打开。本站资料片段自带 document_id + order_index + heading(A19 切分时留下的元数据),凭这三个字段能定位到「哪份文档的第几段、属于哪个标题」。
  2. 摘录:不用翻原文就能核对。把命中片段的原文(snippet)随引用一起展示,search_documents 返回的片段就带 300 字以内的 snippet。
  3. 对应:哪句结论由哪段支持要挂得上钩。整篇「参考文档」式的模糊引用没有核对价值。
// 引用数据结构:定位 + 摘录,均可由服务端从真实命中生成
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 会把「引用是否支持结论」做成评估的一层;日常使用时每次点开一条引用核对,就是在给系统做免费测试。

动手任务

  1. 跑本课实验区,观察三条回答的核对结果:找出「引用存在但不支持」的那条,说清它的结论哪里超出了片段。
  2. 给实验区的核对函数加一档「部分支持」:结论关键词只有一部分落在片段里时返回这个判定。
  3. 在站内实际问一个资料问题,点开回答附带的引用,按三问流程核对一次,记录结果(支持 / 部分支持 / 不支持)。

常见错误

  • 引用只给文档名不给片段:用户要翻整份文档才能核对,等于没引。定位粒度必须到片段(order_index + heading)。
  • 让模型自己标「引用」:模型可能标出不存在的片段号。引用必须由服务端从真实命中生成,模型最多决定「用哪条」。
  • 把相关当支持:片段讲「登录锁定」、结论讲「删除限制」,主题相近就引用过去——核对时逐关键词对,不凭主题感觉。
  • 资料不足时让模型「尽力答」:无命中还让它回答,等于逼它编造。正确动作是把「没有命中」如实传给模型并允许它说不知道。

检查与复盘

自查清单:

  • 能说出引用三要素(定位、摘录、对应)分别防什么问题
  • 能区分「引用存在」与「引用支持」,并举出各自的反例
  • 能解释无命中时返回结构化提示为什么比静默空列表好

参考资料

动手实验
动手实验
预览
点击「运行」在隔离沙箱中预览
检查题共 2 题,提交后立即显示解析
答案由服务端判定;答错的题会自动进入复习计划。
Q1多选中等(多选,全部选对才算正确)

关于 AI 回答的引用,下列说法正确的有?(多选)

Q2读代码较难

助手回答「删除接口是幂等的,超过 24 小时的删除请求会被拒绝」,并附上如下引用。核对这条引用后应该得出什么结论?

{
  "documentId": "doc-api-spec",
  "orderIndex": 12,
  "heading": "删除接口",
  "snippet": "删除接口必须幂等:重复调用同一请求不应产生二次删除……",
  "claim": "删除接口是幂等的,超过 24 小时的删除请求会被拒绝"
}

读完这一课了?

标记完成后,工作台会安排接下来的学习。

Command Palette

Search for a command to run...