Claude может предоставлять подробные цитаты при ответах на вопросы о документах, помогая вам отслеживать и проверять источники, стоящие за каждым ответом.
Все активные модели поддерживают цитирование.
Следующий пример показывает, как включить цитирование для документа с обычным текстом с помощью Messages API:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-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)Интегрируйте цитирование с Claude, выполнив следующие шаги:
Предоставьте документ(ы) и включите цитирование
citations.enabled=true для каждого из ваших документов. В настоящее время цитирование должно быть включено либо для всех документов в запросе, либо ни для одного из них.Документы обрабатываются
Claude предоставляет ответ с цитатами
source документа, может быть процитирован.title и context — необязательные поля, которые передаются модели, но не используются в качестве цитируемого содержимого.title ограничена, поэтому поле context полезно для хранения метаданных документа в виде текста или сериализованного JSON.content, предоставленному в документе с пользовательским содержимым.cited_text предоставляется для удобства и не учитывается в выходных токенах.cited_text также не учитывается во входных токенах.Цитирование работает совместно с другими функциями API, включая кэширование подсказок, подсчёт токенов и пакетную обработку.
Цитирование и кэширование подсказок можно эффективно использовать вместе.
Блоки цитат, генерируемые в ответах, не могут быть кэшированы напрямую, но исходные документы, на которые они ссылаются, могут быть кэшированы. Для оптимизации производительности примените 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-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)В этом примере:
cache_control на блоке документа.Для цитирования поддерживаются три типа документов. Документы могут быть предоставлены непосредственно в сообщении (base64, текст или URL) или загружены через Files API и указаны по file_id:
| Тип | Лучше всего подходит для | Разбиение | Формат цитаты |
|---|---|---|---|
| Обычный текст | Простые текстовые документы, проза | По предложениям | Индексы символов (индексация с 0) |
| PDF-файлы с текстовым содержимым | По предложениям | Номера страниц (индексация с 1) | |
| Пользовательское содержимое | Списки, транскрипты, специальное форматирование, более детальные цитаты | Без дополнительного разбиения | Индексы блоков (индексация с 0) |
Документы с обычным текстом автоматически разбиваются на предложения. Вы можете предоставить их встроенными или по ссылке с их file_id:
Вводный пример в начале этой страницы показывает полный запрос с обычным текстом для каждого SDK. Блок документа использует источник 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 }
}PDF-документы могут быть предоставлены в виде данных, закодированных в base64, URL или по file_id. Текст PDF извлекается и разбивается на предложения. Поскольку цитирование изображений пока не поддерживается, PDF-файлы, которые являются сканами документов и не содержат извлекаемого текста, не могут быть процитированы.
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",
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)Документы с пользовательским содержимым дают вам контроль над гранулярностью цитирования. Дополнительное разбиение не выполняется, и фрагменты предоставляются модели в соответствии с предоставленными блоками содержимого.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-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)Когда цитирование включено, ответы содержат несколько текстовых блоков с цитатами:
{
"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,
}
],
},
]
}Для ответов с потоковой передачей цитаты поступают как тип дельты citations_delta внутри событий content_block_delta. Каждая дельта содержит одну цитату, которую нужно добавить в список citations текущего блока содержимого text.
Обрабатывайте тип дельты citations_delta вместе с текстовыми дельтами, чтобы отображать ответы с цитатами по мере их потоковой передачи.
Передавайте результаты поиска из вашего RAG-конвейера как полноценные блоки содержимого со встроенной поддержкой цитирования.
Узнайте, как Claude извлекает текст из PDF и как цитаты на основе страниц соотносятся с вашими исходными файлами.
Загружайте документы один раз и ссылайтесь на них по file_id в нескольких запросах с цитированием.
| Supported platforms |
|
|---|
Was this page helpful?