Claude Messages API citations 怎么核对:document blocks、source 与引用位置
做 Claude 文档问答对接的时候,别看到输出里带一句「根据参考资料」就默认所有内容都能溯源了。稳妥的方案是把参考素材作为 document 内容块传给 Messages API,开启 citations.enabled 配置,之后逐一对返回的引用类型、位置区间、引用原文内容做核验,把「模型给出了回答」和「回答有明确证据支撑」拆成两个独立的校验维度。
要点速览
- 引用开关写在每个 document block 的
citations.enabled中。 - PDF、纯文本和自定义内容块对应不同的引用位置字段。
- PDF 页码从 1 开始计数,纯文本字符索引和自定义块索引从 0 开始计数。
- 流式响应需要单独拼接
citations_delta,不能只收集文本增量。
先定义三个可验收指标
不要只拿单条自然语言回答做主观判断。准备一份包含明确标题、数值和版本号的短测试文档,提出三类不同的问题,对照记录结果:
| 指标 | 判断方式 | 失败表现 |
|---|---|---|
| 引用覆盖 | 每个事实性回答是否关联对应 citation | 回答给出了明确结论但 citations 为空 |
| 位置有效 | 页码或字符区间能否精准落回原文范围 | 区间越界或者指向完全不相关的段落 |
| 内容一致 | cited_text 是否真的能支撑当前回答语句 | 引用条目存在,但对应原文完全不支撑给出的断言 |
这三个指标比「回答看起来像有引用」更适合放到项目的回归测试流程里。模型是否主动选择引用仍有可能受提问表述方式影响,所以测试集要覆盖直接提问、对比提问和无法从文档得出答案的提问这三类场景。
在 document block 上打开 citations
请求的核心结构很清晰:文档块放在 user 消息体内,相邻位置再放用户的提问文本:
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "text",
"media_type": "text/plain",
"data": "Redis 8.0 于 2024 年发布。COMMAND DOCS 返回命令元数据。"
},
"title": "版本说明",
"citations": {"enabled": true}
},
{"type": "text", "text": "Redis 8.0 的 COMMAND DOCS 用来做什么?请引用资料。"}
]
}
开启引用时,同一个请求内的所有文档块配置要保持一致:不要一份文档开启引用、另一份文档关闭引用,最后把返回结果当成同一套可信证据。官方相关说明也提到,提交的文档内容会先做自动切分,生成粒度足够细的可引用单元。

按文档来源核对 citation 位置
PDF:核对 page_number
PDF 类型的引用通常会携带页码范围,页码从 1 开始计数。测试校验的时候不要拿 PDF 阅读器的内部对象编号做比对,要回到普通用户肉眼可见的显示页码做核对。扫描生成的 PDF 还要额外校验 OCR 提取的文字内容是否完整准确。
纯文本:核对 character_index
纯文本类型的引用用字符区间定位,索引从 0 开始,结束位置一般按排他边界规则理解。回归脚本可以直接截取这个区间对应的字符串,与 cited_text 或者原始文档片段做一致性比对。
自定义内容:核对 block_index
自定义文档的引用位置指向原始 content 列表里的块索引,同样从 0 开始计数。这个数组在送入 API 之前如果被排序或者过滤,索引对应的语义就会完全改变,所以一定要保存发送前的完整块序列用于后续校验。

流式响应不要漏掉 citations_delta
非流式请求可以直接遍历 text 内容块里的 citations 字段完成核验。流式请求则需要同时处理文本增量和引用增量:citations_delta 代表要追加到当前 text block 下的一条引用。如果只拼接返回的文本内容、直接丢弃这类事件,最终前端展示的文本看起来完整,背后的证据链路已经丢失了。
text_delta -> 追加回答文字
citation_delta -> 追加当前 text block 的引用
message_stop -> 校验引用数量和位置
建议把当前 content block 的序号、已收集文本总长度和 citations 累计数量一起写入调试日志。遇到请求断线重连的时候,不能把同一条引用重复追加,要靠事件顺序或者请求级唯一 ID 做去重处理。
把引用测试放进发布门禁
- 固定一份小体积测试文档,里面包含三个可精确定位的事实点,再加一个文档里完全没有覆盖的事实点。
- 分别测试 PDF、纯文本或自定义内容块中的任意一类,确认索引基准没有写反。
- 断言回答里的事实句必须携带对应 citation,明确拒答或者提示资料不足的句子不能强行生成不存在的来源。
- 对
cited_text做原文包含校验或者区间回查,避免出现引用内容漂移的问题。 - 流式和非流式两种调用模式分别做验收,确认二者返回的引用数量和位置语义完全一致。
引用本身并不是内容可信度的自动证明。来源本身过期、多份文档内容冲突、问题超出素材覆盖范围时,正确的返回结果反而应该是提示现有资料不足以给出答案。测试门禁要保障的是「所有给出的引用都能回溯到对应证据」,而不是强迫模型每句话都附一个看似合规的无效引用。
常见问题
citations.enabled 应该写在哪里?
写在需要被引用的 document 内容块中,不能写在普通的 text 提问块上。
为什么 citation 的索引有 0 开始和 1 开始两种规则?
PDF 使用从 1 开始的可见页码;纯文本使用从 0 开始的字符索引;自定义文档使用从 0 开始的内容块索引。
流式调用为什么返回结果没有引用?
大概率是只处理了 text delta,遗漏了 citations_delta 事件;也有可能是没有在对应的 document block 上开启引用配置。
可以只让部分文档开启引用吗?
同一个请求内最好保持配置一致,官方文档说明当前引用功能要么对全部文档启用,要么全部关闭。
把 citations 当成一条可以逐节点回查的数据链来做验收:先确认配置开关正常生效,再确认不同文档类型对应的索引基准正确,最后同时校验非流式和流式的返回事件。只有引用的位置真的能回溯到原始文档内容,文档问答要求的「可追溯」才算真正落地。
Redis COMMAND DOCS 怎么做命令兼容探测:since、arguments 与版本分支
- 上一篇
- Redis COMMAND DOCS 怎么做命令兼容探测:since、arguments 与版本分支
- 下一篇
- Google Developer Knowledge API 新增 relevance_score 怎么用:过滤、排序与回归验收
-
- 科技周边 · 人工智能 | 1小时前 | 人工智能 · diffusers ModularPipeline update_components ComponentSpec 模型组件
- Diffusers ModularPipeline 怎么替换单个模型组件
- 175浏览 收藏
-
- 科技周边 · 人工智能 | 5小时前 |
- Transformers bitsandbytes 量化后怎么保留部分模块精度
- 359浏览 收藏
-
- 科技周边 · 人工智能 | 10小时前 | 人工智能 · Transformers 大模型推理 KV Cache 显存不足 缓存卸载
- Transformers KV cache 怎么在显存不足时启用卸载
- 499浏览 收藏
-
- 科技周边 · 人工智能 | 14小时前 |
- Transformers chat template 怎么生成 assistant token 掩码
- 164浏览 收藏
-
- 科技周边 · 人工智能 | 16小时前 |
- Diffusers LoRA 权重融合后怎么恢复基础模型
- 291浏览 收藏
-
- 科技周边 · 人工智能 | 18小时前 |
- Sentence Transformers 向量归一化何时影响相似度
- 372浏览 收藏
-
- 科技周边 · 人工智能 | 20小时前 | 人工智能 · 位置偏差 大模型评测 LLM-as-a-Judge 成对评测
- 大模型回答怎么设计成对评测减少位置偏差
- 314浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 | 人工智能 · OpenAI Realtime API VAD server_vad semantic_vad
- OpenAI Realtime API 怎么配置语音轮次检测
- 293浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- OpenAI Structured Outputs 怎么约束嵌套 JSON 结构
- 247浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | 人工智能 · PyTorch ONNX dynamic_shapes 动态维度
- ONNX 导出动态维度怎么声明输入轴
- 194浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | 人工智能 · PyTorch 混合精度 AMP GradScaler 梯度溢出 optimizer.step
- PyTorch GradScaler 何时会跳过参数更新
- 268浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | 人工智能 · 深度学习 · PyTorch 随机种子 DataLoader num_workers worker_init_fn
- PyTorch DataLoader 多进程为什么会重复随机数据
- 316浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 343次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 403次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 403次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 362次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 184次使用
-
- Claude API 提示词缓存为什么总 miss:静态前缀、工具定义与 usage 核对
- 2026-07-18 280浏览
-
- Claude Prompt Caching 怎么验收:静态前缀、动态尾部与缓存命中率
- 2026-08-16 363浏览
-
- AI 推理过程怎么给用户看摘要:Responses API reasoning summary 与隐私边界
- 2026-08-23 195浏览
-
- AI 接口超时后怎么安全重试:请求标识、指数退避与结果去重
- 2026-08-24 482浏览
-
- AI 接口 504 后要不要重发:请求标识、退避与幂等核对
- 2026-08-24 229浏览

