Claude API文档引用怎么开启?citations、原文位置与证据核对
在Messages文档块开启citations,读取引用对象而非只看回答文字;正确处理文档索引、…
文章目录
应用让Claude根据文档回答,单在提示里写“请附来源”,可能只得到人工生成的页码或一句笼统说明。Messages API提供citations功能,把回答与所给文档的具体位置关联。本文用一份虚构规则文本展示启用、读取与人工核对,不实际调用付费API,也不把有效引用指针等同于结论一定充分。
第一步:准备可引用的文档内容
当前支持PDF、纯文本和自定义内容文档,引用针对文本,不能直接引用图片。PDF里纯图片的图表或扫描文字不能默认获得文本引用,先确认有可提取内容。文档title与context是辅助元数据,不是可引用正文,重要证据应放source内容中。
本例使用自己写的两句练习规则,避免真实客户资料。多份文档时保持稳定顺序并记录对应版本;同一请求目前要求所有文档都开启引用或都不开,不能只在某个块启用后期待任意混用。普通网页或第三方聊天不一定暴露这些API参数。
第二步:在document块开启引用
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5-5", max_tokens=1024,
messages=[{"role":"user","content":[
{"type":"document",
"source":{"type":"text","media_type":"text/plain",
"data":"练习规则:提交材料需要项目编号。普通问题在三个工作日内回复。"},
"title":"练习规则A", "citations":{"enabled":True}},
{"type":"text","text":"提交需要什么?回复期限是什么?逐项回答并引用原文,未知内容不补充。"}
]}],
)
for block in response.content:
if block.type == "text":
print(block.text)
for citation in block.citations or []:
print(citation.model_dump())
示例通过已配置环境认证,不含真实密钥。模型按账号当前可用范围核对;代码只做示范,不代表已在你环境运行。读取每个text块的citations,不只把所有文本拼接后丢弃引用对象,否则前端可能无法知道哪句话对应哪段证据。
第三步:解释位置字段的口径
document_index从零开始,对应请求中的文档顺序。纯文本字符区间从零开始、结束索引不包含;PDF页码从一开始,结束页也不包含。不能把结束页直接显示为“包含该页”的范围,或把字符索引当字节偏移来裁剪UTF-8原文。
不同语言对Unicode字符串索引有不同处理方式,前端如要高亮,应按实际字符模型验证,不凭视觉长度猜切片。自定义内容引用使用块索引,同样需要回到原内容列表,不套用PDF页码逻辑。保留cited_text有助于人工核对。
第四步:核对引用是否支持整句结论
证据验收:文档编号是否正确;引用原文是否包含所需条件;回答有没有把“工作日”改成“自然日”;是否额外补上未给出的负责人、价格或生效日期;没有证据的字段是否明确未知。
API保证的有效位置指针,不保证每个论断都由那段文字充分支持。练习规则只说普通问题三个工作日回复,不能扩写成紧急请求也必定如此。引用系统帮助追溯,应用仍应检查语义、条件和文档版本。
第五步:处理与其他格式的冲突
citations不能与output_config.format结构化输出在同一请求同时启用,官方说明这类组合会400。需要每字段引用时,可先要求逐字段文字和引用,再按实际块结构在应用中处理,不强制“只输出JSON”后指望仍保留完整引用。
保存结果时保留回答、文档版本与位置映射,别只存一串孤立页码。对于缺失引用、拒绝或不完整回答,按真实状态处理,不补造来源。完成标准是每项重要答案可回到正确原文,引用粒度与索引口径正确,且结论没有超出材料。
文档索引跨请求中的全部document块按顺序计算,不能只在最后一条用户消息里重新编号。应用保存来源映射时应与实际发送顺序一致。
官方资料
资料核对日期:2026年11月9日。
本文地址:https://www.163264.com/20112

