让答案有出处:citations 引用溯源

47 阅读2分钟

「从零到 AI 应用工程师」专栏 · 第 13 篇


能答还不够。工业场景还要回答:你这话从哪份手册、哪一页来的?

references 和 citations 经常被混用——今天把它们掰开。


一、两个字段分别是什么

referencescitations
何时产生检索/重排之后,喂给模型之前模型(或兜底)生成答案之后
含义本轮候选证据(上下文)答案里实际用到的出处
典型用途调试「模型看了啥」前端高亮、审计、工单溯源

关系:

references = [切片1, 切片2, 切片3]   # 候选
answer     = "……处理步骤见【1】,阈值见【2】。"
citations  = [切片1对应项, 切片2对应项]  # 子集

可以召回了 3 条,答案只标了【1】——这很正常。


二、标记怎么落到 doc_id / page

  1. Prompt 要求:有依据时写 【1】【2】(或 [1]);
  2. 后处理用正则抽出序号;
  3. 序号对齐 references[N-1],拷贝 doc_id、page、source、text 等。
# 伪代码
indices = extract_cited_indices(answer)  # 【1】【2】 → [1, 2]
citations = []
for i in indices:
    if 1 <= i <= len(references):
        ref = references[i - 1]
        citations.append({
            "ref_index": i,
            "doc_id": ref.doc_id,
            "page": ref.page,
            "source": basename(ref.source),
            "text": ref.text,
        })

计划里说的「响应带 [doc_id, page]」,落在每个 citation 对象上。


三、模型忘了标引用怎么办

策略说明
检索兜底回答本地拼装时自己带【N】,再整表映射
fallback_all无标记时临时把全部 references 当作 citations(便于人工核对,正式产品要慎用)
拒答 / 降置信无依据或无引用时不装有出处(见下两篇治理)

原则:没有可靠映射,就不要假装有强引用。


四、前端与 Agent 怎么用

  • 展示答案时,把【N】做成脚注或侧栏卡片;
  • 卡片显示:文件名、页码、摘录;
  • Agent 写工单:只把 citations 写进「依据」字段,不要把整份 references 当已引用。

五、带走这三条

  1. references = 候选;citations = 实际引用。
  2. 靠 Prompt 标号 + 后处理映射 meta,不是靠模型口述文件名。
  3. 无标记就要降级策略,不能默认为「全都引用了」。

下一篇:治幻觉——没依据就拒答,禁止「可能大概也许」。

这是专栏第 13 篇。两到三天一更,拒答见。