Kutipan
Dasarkan respons Claude pada dokumen sumber Anda. Kutipan mengembalikan bagian teks yang tepat yang mendukung setiap klaim, sehingga Anda dapat memverifikasi jawaban dan menampilkan sumber kepada pengguna Anda.
Claude dapat memberikan kutipan terperinci saat menjawab pertanyaan tentang dokumen, membantu Anda melacak dan memverifikasi sumber di balik setiap respons.
Semua model aktif mendukung kutipan.
Contoh berikut menunjukkan cara mengaktifkan kutipan pada dokumen teks biasa dengan Messages API:
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": "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)Cara kerja kutipan
Integrasikan kutipan dengan Claude dalam langkah-langkah berikut:
Sediakan dokumen dan aktifkan kutipan
- Sertakan dokumen dalam salah satu format yang didukung: dokumen PDF, teks biasa, atau konten kustom.
- Atur
citations.enabled=truepada setiap dokumen Anda. Saat ini, kutipan harus diaktifkan pada semua atau tidak sama sekali dari dokumen dalam sebuah permintaan. - Hanya kutipan teks yang saat ini didukung. Kutipan gambar belum memungkinkan.
Dokumen diproses
- Konten dokumen "dipotong" (chunked) untuk menentukan granularitas minimum dari kutipan yang mungkin. Misalnya, pemotongan kalimat memungkinkan Claude mengutip satu kalimat atau merangkai beberapa kalimat berurutan untuk mengutip paragraf atau bagian yang lebih panjang.
- Untuk PDF: Teks diekstrak seperti yang dijelaskan dalam dukungan PDF dan konten dipotong menjadi kalimat. Mengutip gambar dari PDF saat ini tidak didukung.
- Untuk dokumen teks biasa: Konten dipotong menjadi kalimat yang dapat dikutip.
- Untuk dokumen konten kustom: Blok konten yang Anda sediakan digunakan apa adanya dan tidak ada pemotongan lebih lanjut yang dilakukan.
- Konten dokumen "dipotong" (chunked) untuk menentukan granularitas minimum dari kutipan yang mungkin. Misalnya, pemotongan kalimat memungkinkan Claude mengutip satu kalimat atau merangkai beberapa kalimat berurutan untuk mengutip paragraf atau bagian yang lebih panjang.
Claude memberikan respons yang dikutip
- Respons sekarang dapat mencakup beberapa blok teks di mana setiap blok teks dapat berisi klaim yang dibuat Claude dan daftar kutipan yang mendukung klaim tersebut.
- Kutipan merujuk ke lokasi tertentu dalam dokumen sumber. Format kutipan ini bergantung pada jenis dokumen yang dikutip.
- Untuk PDF: Kutipan mencakup rentang nomor halaman (diindeks mulai dari 1).
- Untuk dokumen teks biasa: Kutipan mencakup rentang indeks karakter (diindeks mulai dari 0).
- Untuk dokumen konten kustom: Kutipan mencakup rentang indeks blok konten (diindeks mulai dari 0) yang sesuai dengan daftar konten asli yang disediakan.
- Indeks dokumen disediakan untuk menunjukkan sumber referensi dan diindeks mulai dari 0 sesuai dengan daftar semua dokumen dalam permintaan asli Anda.
Konten yang dapat dikutip versus tidak dapat dikutip
- Teks yang ditemukan dalam konten
sourcedokumen dapat dikutip. titledancontextadalah bidang opsional yang diteruskan ke model tetapi tidak digunakan untuk konten yang dikutip.titleterbatas panjangnya, sehingga bidangcontextberguna untuk menyimpan metadata dokumen sebagai teks atau JSON yang distringifikasi.
Indeks kutipan
- Indeks dokumen diindeks mulai dari 0 dari daftar semua blok konten dokumen dalam permintaan (mencakup semua pesan).
- Indeks karakter diindeks mulai dari 0 dengan indeks akhir eksklusif.
- Nomor halaman diindeks mulai dari 1 dengan nomor halaman akhir eksklusif.
- Indeks blok konten diindeks mulai dari 0 dengan indeks akhir eksklusif dari daftar
contentyang disediakan dalam dokumen konten kustom.
Biaya token
- Mengaktifkan kutipan menyebabkan sedikit peningkatan token input karena penambahan prompt sistem dan pemotongan dokumen.
- Namun, fitur kutipan sangat efisien dengan token output. Secara internal, model menghasilkan kutipan dalam format standar yang kemudian diurai menjadi teks yang dikutip dan indeks lokasi dokumen. Bidang
cited_textdisediakan untuk kenyamanan dan tidak dihitung terhadap token output. - Ketika diteruskan kembali dalam giliran percakapan berikutnya,
cited_textjuga tidak dihitung terhadap token input.
Kompatibilitas fitur
Kutipan bekerja bersama dengan fitur API lainnya termasuk caching prompt, penghitungan token, dan pemrosesan batch.
Menggunakan caching prompt dengan kutipan
Kutipan dan caching prompt dapat digunakan bersama secara efektif.
Blok kutipan yang dihasilkan dalam respons tidak dapat di-cache secara langsung, tetapi dokumen sumber yang dirujuknya dapat di-cache. Untuk mengoptimalkan kinerja, terapkan cache_control pada blok konten dokumen tingkat atas Anda.
client = anthropic.Anthropic()
# Konten dokumen panjang (misalnya, dokumentasi teknis)
long_document = (
"This is a very long document with thousands of words..." + " ... " * 1000
) # Minimum cacheable length
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": 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)Dalam contoh ini:
- Konten dokumen di-cache menggunakan
cache_controlpada blok dokumen. - Kutipan diaktifkan pada dokumen.
- Claude dapat menghasilkan respons dengan kutipan sambil memanfaatkan konten dokumen yang di-cache.
- Permintaan berikutnya yang menggunakan dokumen yang sama memanfaatkan konten yang di-cache.
Jenis dokumen
Memilih jenis dokumen
Tiga jenis dokumen didukung untuk kutipan. Dokumen dapat disediakan langsung dalam pesan (base64, teks, atau URL) atau diunggah melalui Files API dan dirujuk dengan file_id:
| Jenis | Terbaik untuk | Pemotongan | Format kutipan |
|---|---|---|---|
| Teks biasa | Dokumen teks sederhana, prosa | Kalimat | Indeks karakter (diindeks mulai dari 0) |
| File PDF dengan konten teks | Kalimat | Nomor halaman (diindeks mulai dari 1) | |
| Konten kustom | Daftar, transkrip, pemformatan khusus, kutipan yang lebih granular | Tidak ada pemotongan tambahan | Indeks blok (diindeks mulai dari 0) |
Dokumen teks biasa
Dokumen teks biasa secara otomatis dipotong menjadi kalimat. Anda dapat menyediakannya secara inline atau dengan referensi menggunakan file_id mereka:
Contoh pengantar di bagian atas halaman ini menunjukkan permintaan teks biasa yang lengkap di setiap SDK. Blok dokumen menggunakan sumber text:
{
"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 }
}{
"type": "char_location",
"cited_text": "The exact text being cited", // not counted toward output tokens
"document_index": 0,
"document_title": "Document Title",
"start_char_index": 0, // 0-indexed
"end_char_index": 50 // exclusive
}Dokumen PDF
Dokumen PDF dapat disediakan sebagai data yang dikodekan base64, URL, atau dengan file_id. Teks PDF diekstrak dan dipotong menjadi kalimat. Karena kutipan gambar belum didukung, PDF yang merupakan hasil pindaian dokumen dan tidak mengandung teks yang dapat diekstrak tidak dapat dikutip.
client = anthropic.Anthropic()
pdf_base64 = base64.standard_b64encode(
pathlib.Path("/path/to/document.pdf").read_bytes()
).decode()
response = client.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": pdf_base64,
},
"title": "Document Title",
"context": "Context about the document that will not be cited from",
"citations": {"enabled": True},
},
{"type": "text", "text": "Summarize this document."},
],
}
],
)
print(response){
"type": "page_location",
"cited_text": "The exact text being cited", // not counted toward output tokens
"document_index": 0,
"document_title": "Document Title",
"start_page_number": 1, // 1-indexed
"end_page_number": 2 // exclusive
}Dokumen konten kustom
Dokumen konten kustom memberi Anda kontrol atas granularitas kutipan. Tidak ada pemotongan tambahan yang dilakukan dan potongan disediakan ke model sesuai dengan blok konten yang disediakan.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"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},
},
{"type": "text", "text": "Summarize this document."},
],
}
],
)
print(response){
"type": "content_block_location",
"cited_text": "The exact text being cited", // not counted toward output tokens
"document_index": 0,
"document_title": "Document Title",
"start_block_index": 0, // 0-indexed
"end_block_index": 1 // exclusive
}Struktur respons
Ketika kutipan diaktifkan, respons mencakup beberapa blok teks dengan kutipan:
{
"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
}
]
}
]
}Dukungan streaming
Untuk respons streaming, kutipan tiba sebagai tipe delta citations_delta di dalam event content_block_delta. Setiap delta berisi satu kutipan untuk ditambahkan ke daftar citations pada blok konten text saat ini.
event: message_start
data: {"type": "message_start", ...}
event: content_block_start
data: {"type": "content_block_start", "index": 0, ...}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0,
"delta": {"type": "text_delta", "text": "According to..."}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0,
"delta": {"type": "citations_delta",
"citation": {
"type": "char_location",
"cited_text": "...",
"document_index": 0,
...
}}}
event: content_block_stop
data: {"type": "content_block_stop", "index": 0}
event: message_stop
data: {"type": "message_stop"}Langkah selanjutnya
Tangani tipe delta citations_delta bersama dengan delta teks untuk merender respons yang dikutip saat mereka di-stream.
Teruskan hasil pencarian dari pipeline RAG Anda sebagai blok konten kelas satu dengan dukungan kutipan bawaan.
Pelajari bagaimana Claude mengekstrak teks dari PDF dan bagaimana kutipan berbasis halaman dipetakan kembali ke file sumber Anda.
Unggah dokumen sekali dan rujuk dengan file_id di beberapa permintaan kutipan.
Compatibility
- Supported platforms
- Claude API
- Claude Platform on AWS
- Amazon Bedrock
- Google Cloud
- Microsoft Foundry
Was this page helpful?