この機能はZero Data Retention(ZDR)の対象です。組織がZDR契約を締結している場合、この機能を通じて送信されたデータは、APIレスポンスが返された後に保存されることはありません。
Claudeは、ドキュメントに関する質問に回答する際に詳細な引用を提供することができ、レスポンス内の情報源を追跡および検証するのに役立ちます。
Haiku 3を除き、すべてのアクティブなモデルが引用をサポートしています。
引用機能に関するフィードバックやご提案は、こちらのフォームからお寄せください。
以下は、Messages APIで引用を使用する方法の例です。
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "text",
"media_type": "text/plain",
"data": "The grass is green. The sky is blue.",
},
"title": "My Document",
"context": "This is a trustworthy document.",
"citations": {"enabled": True},
},
{"type": "text", "text": "What color is the grass and sky?"},
],
}
],
)
print(response)プロンプトベースのアプローチとの比較
プロンプトベースの引用ソリューションと比較して、引用機能には以下の利点があります。
cited_textは出力トークンにカウントされないため、コスト削減が見込める可能性があります。cited_textが抽出されるため、引用には提供されたドキュメントへの有効なポインタが含まれることが保証されます。以下の手順でClaudeに引用を統合します。
ドキュメントを提供し、引用を有効にする
ドキュメントが処理される
Claudeが引用付きのレスポンスを提供する
自動チャンク化とカスタムコンテンツの比較
デフォルトでは、プレーンテキストおよびPDFドキュメントは自動的に文単位にチャンク化されます。引用の粒度をより細かく制御する必要がある場合(箇条書きやトランスクリプトなど)は、代わりにカスタムコンテンツドキュメントを使用してください。詳細については、ドキュメントタイプを参照してください。
たとえば、ClaudeがRAGチャンクから特定の文を引用できるようにしたい場合は、各RAGチャンクをプレーンテキストドキュメントに入れる必要があります。一方、追加のチャンク化を行いたくない場合、または追加のチャンク化をカスタマイズしたい場合は、RAGチャンクをカスタムコンテンツドキュメントに入れることができます。
sourceコンテンツ内にあるテキストは引用可能です。titleとcontextはオプションのフィールドで、モデルに渡されますが、引用コンテンツとしては使用されません。titleは長さに制限があるため、ドキュメントのメタデータをテキストまたは文字列化されたJSONとして保存するにはcontextフィールドが便利な場合があります。contentリストから0始まりで、終了インデックスは排他的です。cited_textフィールドは利便性のために提供されており、出力トークンにはカウントされません。cited_textは入力トークンにカウントされません。引用は、プロンプトキャッシング、トークンカウント、バッチ処理などの他のAPI機能と組み合わせて使用できます。
引用と構造化出力は互換性がありません
引用は構造化出力と併用できません。ユーザー提供のドキュメント(DocumentブロックまたはRequestSearchResultBlock)で引用を有効にし、同時にoutput_config.formatパラメータ(または非推奨のoutput_formatパラメータ)を含めると、APIは400エラーを返します。
これは、引用がテキスト出力と引用ブロックを交互に配置する必要があり、構造化出力の厳密なJSONスキーマ制約と互換性がないためです。
引用とプロンプトキャッシングは効果的に併用できます。
レスポンスで生成された引用ブロックは直接キャッシュできませんが、それらが参照するソースドキュメントはキャッシュできます。パフォーマンスを最適化するには、トップレベルのドキュメントコンテンツブロックにcache_controlを適用してください。
client = anthropic.Anthropic()
# 長いドキュメントコンテンツ(例:技術ドキュメント)
long_document = (
"This is a very long document with thousands of words..." + " ... " * 1000
) # Minimum cacheable length
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "text",
"media_type": "text/plain",
"data": long_document,
},
"citations": {"enabled": True},
"cache_control": {
"type": "ephemeral"
}, # Cache the document content
},
{
"type": "text",
"text": "What does this document say about API features?",
},
],
}
],
)
print(response)この例では:
cache_controlを使用してドキュメントコンテンツがキャッシュされます引用では3つのドキュメントタイプがサポートされています。ドキュメントはメッセージ内で直接提供する(base64、テキスト、またはURL)か、Files API経由でアップロードしてfile_idで参照することができます。
| タイプ | 最適な用途 | チャンク化 | 引用形式 |
|---|---|---|---|
| プレーンテキスト | シンプルなテキストドキュメント、散文 | 文単位 | 文字インデックス(0始まり) |
| テキストコンテンツを含むPDFファイル | 文単位 | ページ番号(1始まり) | |
| カスタムコンテンツ | リスト、トランスクリプト、特殊な書式、より細かい粒度の引用 | 追加のチャンク化なし | ブロックインデックス(0始まり) |
.csv、.xlsx、.docx、.md、.txtファイルはドキュメントブロックとしてサポートされていません。これらはプレーンテキストに変換し、メッセージコンテンツに直接含めてください。他のファイル形式の扱い方を参照してください。
プレーンテキストドキュメントは自動的に文単位にチャンク化されます。インラインで提供するか、file_idで参照して提供できます。
PDFドキュメントは、base64エンコードされたデータ、URL、またはfile_idとして提供できます。PDFテキストは抽出され、文単位にチャンク化されます。画像引用はまだサポートされていないため、ドキュメントのスキャンであり抽出可能なテキストを含まないPDFは引用できません。
カスタムコンテンツドキュメントを使用すると、引用の粒度を制御できます。追加のチャンク化は行われず、提供されたコンテンツブロックに従ってチャンクがモデルに提供されます。
{
"type": "document",
"source": {
"type": "content",
"content": [
{"type": "text", "text": "First chunk"},
{"type": "text", "text": "Second chunk"},
],
},
"title": "Document Title", # optional
"context": "Context about the document that will not be cited from", # optional
"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,
}
],
},
{
"type": "text",
"text": ". Information from page 5 states that ",
},
{
"type": "text",
"text": "water is essential",
"citations": [
{
"type": "page_location",
"cited_text": "Water is essential for life.",
"document_index": 1,
"document_title": "PDF Document",
"start_page_number": 5,
"end_page_number": 6,
}
],
},
{
"type": "text",
"text": ". The custom document mentions ",
},
{
"type": "text",
"text": "important findings",
"citations": [
{
"type": "content_block_location",
"cited_text": "These are important findings.",
"document_index": 2,
"document_title": "Custom Content Document",
"start_block_index": 0,
"end_block_index": 1,
}
],
},
]
}ストリーミングレスポンスの場合、現在のtextコンテンツブロックのcitationsリストに追加される単一の引用を含むcitations_deltaタイプが含まれます。
Was this page helpful?