Diese Funktion ist für Zero Data Retention (ZDR) qualifiziert. Wenn deine Organisation eine ZDR-Vereinbarung hat, werden Daten, die über diese Funktion gesendet werden, nicht gespeichert, nachdem die API-Antwort zurückgegeben wurde.
Claude kann detaillierte Zitationen liefern, wenn es Fragen zu Dokumenten beantwortet, und dir so helfen, die Quellen hinter jeder Antwort nachzuverfolgen und zu überprüfen.
Alle aktiven Modelle unterstützen Zitationen, mit Ausnahme von Claude Haiku 3.
Teile dein Feedback und deine Vorschläge zur Zitationsfunktion über das Feedback-Formular für Zitationen mit.
Das folgende Beispiel zeigt, wie du Zitationen für ein Klartextdokument mit der Messages API aktivierst:
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)Vergleich mit Prompt-basierten Ansätzen
Im Vergleich dazu, Claude per Prompt zum Zitieren von Quellen aufzufordern, bietet die Zitationsfunktion die folgenden Vorteile:
cited_text nicht zu deinen Output-Token zählt.cited_text direkt extrahiert, ist garantiert, dass Zitationen gültige Verweise auf die bereitgestellten Dokumente enthalten.Integriere Zitationen mit Claude in diesen Schritten:
Dokument(e) bereitstellen und Zitationen aktivieren
citations.enabled=true für jedes deiner Dokumente. Derzeit müssen Zitationen entweder für alle oder für keines der Dokumente innerhalb einer Anfrage aktiviert sein.Dokumente werden verarbeitet
Claude liefert eine Antwort mit Zitationen
Automatisches Chunking vs. benutzerdefinierte Inhalte
Standardmäßig werden Klartext- und PDF-Dokumente automatisch in Sätze aufgeteilt. Wenn du mehr Kontrolle über die Granularität der Zitationen benötigst (zum Beispiel für Aufzählungspunkte oder Transkripte), verwende stattdessen Dokumente mit benutzerdefinierten Inhalten. Siehe Dokumenttypen für weitere Details.
Wenn du zum Beispiel möchtest, dass Claude bestimmte Sätze aus deinen RAG-Chunks zitieren kann, solltest du jeden RAG-Chunk in ein Klartextdokument packen. Wenn du andernfalls kein weiteres Chunking wünschst oder zusätzliches Chunking anpassen möchtest, kannst du RAG-Chunks in Dokumente mit benutzerdefinierten Inhalten packen.
source-Inhalt eines Dokuments befindet, kann zitiert werden.title und context sind optionale Felder, die an das Modell übergeben, aber nicht für zitierte Inhalte verwendet werden.title ist in der Länge begrenzt, daher ist das Feld context nützlich, um Dokument-Metadaten als Text oder als JSON-String zu speichern.content-Liste, die im Dokument mit benutzerdefinierten Inhalten bereitgestellt wurde.cited_text wird der Einfachheit halber bereitgestellt und zählt nicht zu den Output-Token.cited_text in nachfolgenden Gesprächsrunden zurückgegeben wird, zählt es ebenfalls nicht zu den Input-Token.Zitationen funktionieren in Verbindung mit anderen API-Funktionen, einschließlich Prompt-Caching, Token-Zählung und Batch-Verarbeitung.
Zitationen und strukturierte Ausgaben sind inkompatibel
Zitationen können nicht zusammen mit strukturierten Ausgaben verwendet werden. Wenn du Zitationen für ein vom Nutzer bereitgestelltes Dokument (document-Blöcke oder search_result-Blöcke) aktivierst und außerdem den Parameter output_config.format (oder den veralteten Parameter output_format) angibst, gibt die API einen 400-Fehler zurück.
Das liegt daran, dass Zitationen das Einfügen von Zitationsblöcken zwischen Textausgaben erfordern, was mit den strikten JSON-Schema-Beschränkungen strukturierter Ausgaben inkompatibel ist.
Zitationen und Prompt-Caching können effektiv zusammen verwendet werden.
Die in Antworten generierten Zitationsblöcke können nicht direkt gecacht werden, aber die Quelldokumente, auf die sie verweisen, können gecacht werden. Um die Leistung zu optimieren, wende cache_control auf deine Dokument-Content-Blöcke auf oberster Ebene an.
client = anthropic.Anthropic()
# Langer Dokumentinhalt (zum Beispiel technische Dokumentation)
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)In diesem Beispiel:
cache_control auf dem Dokumentblock gecacht.Drei Dokumenttypen werden für Zitationen unterstützt. Dokumente können direkt in der Nachricht bereitgestellt werden (Base64, Text oder URL) oder über die Files API hochgeladen und per file_id referenziert werden:
| Typ | Am besten geeignet für | Chunking | Zitationsformat |
|---|---|---|---|
| Klartext | Einfache Textdokumente, Prosa | Satz | Zeichenindizes (0-indiziert) |
| PDF-Dateien mit Textinhalt | Satz | Seitenzahlen (1-indiziert) | |
| Benutzerdefinierte Inhalte | Listen, Transkripte, spezielle Formatierung, granularere Zitationen | Kein zusätzliches Chunking | Block-Indizes (0-indiziert) |
Für Dateitypen, die der document-Block nicht unterstützt (zum Beispiel .docx und .xlsx), konvertiere die Dateien in Klartext und füge den Inhalt direkt in den Nachrichteninhalt ein. Dateien, die bereits Klartext sind, wie .csv- und .md-Dateien, können auch mit einem expliziten text/plain-Content-Type hochgeladen werden. Siehe Arbeiten mit anderen Dateiformaten.
Klartextdokumente werden automatisch in Sätze aufgeteilt. Du kannst sie inline oder per Referenz mit ihrer file_id bereitstellen:
Das Einführungsbeispiel oben auf dieser Seite zeigt eine vollständige Klartext-Anfrage in jedem SDK. Der Dokumentblock verwendet eine text-Quelle:
{
"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-Dokumente können als Base64-codierte Daten, als URL oder per file_id bereitgestellt werden. PDF-Text wird extrahiert und in Sätze aufgeteilt. Da Bildzitationen noch nicht unterstützt werden, können PDFs, die Scans von Dokumenten sind und keinen extrahierbaren Text enthalten, nicht zitiert werden.
client = anthropic.Anthropic()
pdf_base64 = base64.standard_b64encode(
pathlib.Path("/path/to/document.pdf").read_bytes()
).decode()
response = client.messages.create(
model="claude-opus-4-8",
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)Dokumente mit benutzerdefinierten Inhalten geben dir Kontrolle über die Granularität der Zitationen. Es erfolgt kein zusätzliches Chunking und die Chunks werden dem Modell entsprechend den bereitgestellten Content-Blöcken übergeben.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
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)Wenn Zitationen aktiviert sind, enthalten Antworten mehrere Textblöcke mit Zitationen:
{
"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,
}
],
},
]
}Bei Streaming-Antworten kommen Zitationen als Delta-Typ citations_delta innerhalb von content_block_delta-Events an. Jedes Delta enthält eine einzelne Zitation, die der citations-Liste des aktuellen text-Content-Blocks hinzugefügt wird.
Verarbeite den Delta-Typ citations_delta zusammen mit Text-Deltas, um zitierte Antworten während des Streamings darzustellen.
Übergib Suchergebnisse aus deiner RAG-Pipeline als vollwertige Content-Blöcke mit integrierter Zitationsunterstützung.
Erfahre, wie Claude Text aus PDFs extrahiert und wie seitenbasierte Zitationen auf deine Quelldateien zurückverweisen.
Lade Dokumente einmal hoch und referenziere sie per file_id über mehrere Zitationsanfragen hinweg.
Was this page helpful?