Citations 是 Claude API 面向文档问答和 RAG 场景的关键能力。它让 Claude 的回答不仅给出结论,还能指向具体来源位置,便于用户验证。
为什么需要 Citations?
普通 RAG 常见问题:
- 模型引用不稳定
- 引用格式靠 Prompt 约束,容易失效
- 很难知道一句话来自哪个 chunk
- 输出 quote 会增加 token 成本
- 用户无法快速验证答案
Claude Citations 把引用变成标准化结构,而不是仅靠模型“写出引用”。
基本用法
在文档块上启用:
json
{
"type": "document",
"source": {
"type": "text",
"media_type": "text/plain",
"data": "The grass is green. The sky is blue."
},
"title": "My Document",
"citations": { "enabled": true }
}Claude 的回答会包含带 citations 的 text block。引用中会出现:
cited_text:被引用的原文document_index:第几个文档document_title:文档标题- 位置索引:页码、字符范围或 block 范围
cited_text 是方便字段,不计入输出 token。
支持的文档类型
| 类型 | 适合场景 | 引用位置 |
|---|---|---|
| Plain text | 普通文本、文章、说明文档 | 字符索引 |
| 报告、论文、合同、手册 | 页码范围 | |
| Custom content | RAG chunks、访谈记录、列表 | content block 索引 |
Plain text 和 PDF 会自动按句子 chunk。Custom content 不会再自动切分,适合你想控制引用粒度的 RAG 系统。
RAG 系统如何使用?
如果你已经有自己的检索系统,建议:
- 每个检索 chunk 作为 custom content block
- 在
title或context中放文档元数据 - 引用结果中的 block index 映射回你的 chunk ID
- UI 上展示 cited text 和原文链接
这样用户不仅能看到答案,还能点回原始资料。
与 Prompt Caching 的组合
Citations 可以和 Prompt Caching 一起使用。对于很长的文档:
- 文档块启用 citations
- 同时加
cache_control - 后续请求复用同一文档内容
适合多轮文档问答、法律合同分析、长报告分析等场景。
重要限制
Citations 目前不能和 Structured Outputs 同时使用。原因是 citations 需要在文本输出中交错插入引用块,而 strict JSON schema 输出要求完整 JSON 结构,两者冲突。
如果你既需要结构化数据又需要引用,可以采用两步法:
- 先让 Claude 带 citations 回答
- 再把回答转成结构化对象,保留引用 ID 或原文位置
最佳实践
- 给文档设置清晰
title - 用
context放元数据,但不要指望它被引用 - RAG 场景优先 custom content 控制粒度
- 扫描版 PDF 需要先 OCR,否则无法可靠引用文本
- UI 中展示引用原文和位置,增强可信度
- 对关键业务结论要求“无引用则不要回答”
来源:Anthropic 官方文档 - Citations | 整理:ClaudeEagle