Claude能够在回答有关文档的问题时提供详细的引用,帮助您跟踪和验证回答中的信息来源。

引用功能目前可用于Claude 3.7 Sonnet、Claude 3.5 Sonnet(新版)和3.5 Haiku。

请使用此表单分享您对引用功能的反馈和建议。

以下是如何在Messages API中使用引用的示例:

与基于提示的方法比较

与基于提示的引用解决方案相比,引用功能具有以下优势:

  • 成本节约: 如果您的基于提示的方法要求Claude输出直接引用,您可能会看到成本节约,因为cited_text不计入您的输出令牌。
  • 更可靠的引用: 因为我们将引用解析为上述相应的响应格式并提取cited_text,引用保证包含对提供文档的有效指针。
  • 提高引用质量: 在我们的评估中,我们发现引用功能比纯粹基于提示的方法更有可能引用文档中最相关的引述。

引用功能的工作原理

通过以下步骤将引用功能与Claude集成:

1

提供文档并启用引用

  • 以任何支持的格式包含文档:PDF纯文本自定义内容文档
  • 在每个文档上设置citations.enabled=true。目前,必须在请求中的所有文档上启用引用,或者都不启用。
  • 请注意,目前仅支持文本引用,图像引用尚不可用。
2

文档处理

  • 文档内容被”分块”以定义可能引用的最小粒度。例如,句子分块将允许Claude引用单个句子或连接多个连续句子以引用段落(或更长内容)!
    • 对于PDF: 文本按照PDF支持中描述的方式提取,内容被分成句子。目前不支持从PDF引用图像。
    • 对于纯文本文档: 内容被分成可以引用的句子。
    • 对于自定义内容文档: 您提供的内容块按原样使用,不进行进一步分块。
3

Claude提供带引用的回答

  • 回答现在可能包括多个文本块,每个文本块可以包含Claude的声明以及支持该声明的引用列表。
  • 引用会参考源文档中的特定位置。这些引用的格式取决于被引用的文档类型。
    • 对于PDF: 引用将包括页码范围(从1开始计数)。
    • 对于纯文本文档: 引用将包括字符索引范围(从0开始计数)。
    • 对于自定义内容文档: 引用将包括内容块索引范围(从0开始计数),对应于原始提供的内容列表。
  • 提供文档索引以指示参考源,并根据原始请求中所有文档的列表从0开始计数。

自动分块与自定义内容

默认情况下,纯文本和PDF文档会自动被分成句子。如果您需要对引用粒度有更多控制(例如,对于项目符号或转录),请使用自定义内容文档。有关更多详细信息,请参阅文档类型

例如,如果您希望Claude能够引用RAG块中的特定句子,您应该将每个RAG块放入纯文本文档中。否则,如果您不希望进行任何进一步的分块,或者如果您想自定义任何额外的分块,您可以将RAG块放入自定义内容文档中。

可引用与不可引用内容

  • 可以引用文档source内容中的文本。
  • titlecontext是可选字段,将传递给模型但不用于被引用内容。
  • title长度有限,因此您可能会发现context字段对存储任何文档元数据(如文本或字符串化JSON)很有用。

引用索引

  • 文档索引是从请求中所有文档内容块的列表(跨所有消息)开始计数的0索引。
  • 字符索引是从0开始计数的,具有排他性结束索引。
  • 页码是从1开始计数的,具有排他性结束页码。
  • 内容块索引是从0开始计数的,具有排他性结束索引,来自自定义内容文档中提供的content列表。

令牌成本

  • 启用引用会因系统提示添加和文档分块而导致输入令牌略微增加。
  • 然而,引用功能在输出令牌方面非常高效。在底层,模型以标准化格式输出引用,然后解析为引用文本和文档位置索引。cited_text字段是为了方便而提供的,不计入输出令牌。
  • 在后续对话回合中传递回的cited_text也不计入输入令牌。

功能兼容性

引用功能与其他API功能兼容,包括提示缓存令牌计数批处理


文档类型

选择文档类型

我们支持三种文档类型的引用:

类型最适合分块引用格式
纯文本简单文本文档,散文句子字符索引(从0开始)
PDF包含文本内容的PDF文件句子页码(从1开始)
自定义内容列表,转录,特殊格式,更细粒度的引用不进行额外分块块索引(从0开始)

纯文本文档

纯文本文档会自动被分成句子:

{
    "type": "document",
    "source": {
        "type": "text",
        "media_type": "text/plain",
        "data": "Plain text content..."
    },
    "title": "Document Title", # 可选
    "context": "Context about the document that will not be cited from", # 可选
    "citations": {"enabled": True}
}

PDF文档

PDF文档以base64编码数据提供。PDF文本会被提取并分成句子。由于图像引用尚不支持,作为文档扫描的PDF如果不包含可提取的文本将无法引用。

{
    "type": "document",
    "source": {
        "type": "base64",
        "media_type": "application/pdf",
        "data": base64_encoded_pdf_data
    },
    "title": "Document Title", # 可选
    "context": "Context about the document that will not be cited from", # 可选
    "citations": {"enabled": True}
}

自定义内容文档

自定义内容文档让您可以控制引用粒度。不进行额外分块,块按照提供的内容块提供给模型。

{
    "type": "document",
    "source": {
        "type": "content",
        "content": [
            {"type": "text", "text": "First chunk"},
            {"type": "text", "text": "Second chunk"}
        ]
    },
    "title": "Document Title", # 可选
    "context": "Context about the document that will not be cited from", # 可选
    "citations": {"enabled": True}
}

响应结构

启用引用后,响应包括带有引用的多个文本块:

{
    "content": [
        {
            "type": "text",
            "text": "According to the document, "
        },
        {
            "type": "text",
            "text": "the grass is green",
            "citations": [{
                "type": "char_location",
                "cited_text": "The grass is green.",
                "document_index": 0,
                "document_title": "Example Document",
                "start_char_index": 0,
                "end_char_index": 20
            }]
        },
        {
            "type": "text",
            "text": " and "
        },
        {
            "type": "text",
            "text": "the sky is blue",
            "citations": [{
                "type": "char_location",
                "cited_text": "The sky is blue.",
                "document_index": 0,
                "document_title": "Example Document",
                "start_char_index": 20,
                "end_char_index": 36
            }]
        }
    ]
}

流式支持

对于流式响应,我们添加了一个citations_delta类型,其中包含要添加到当前text内容块的citations列表中的单个引用。

Was this page helpful?