Was this page helpful?
This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.
Claude es capaz de proporcionar citas detalladas al responder preguntas sobre documentos, ayudándote a rastrear y verificar las fuentes de información en las respuestas.
Todos los modelos activos admiten citas, con la excepción de Haiku 3.
Comparte tus comentarios y sugerencias sobre la función de citas usando este formulario.
Aquí hay un ejemplo de cómo usar citas con la API de Messages:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
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)Comparación con enfoques basados en prompts
En comparación con soluciones de citas basadas en prompts, la función de citas tiene las siguientes ventajas:
cited_text no cuenta hacia tus tokens de salida.cited_text se extrae, se garantiza que las citas contengan punteros válidos a los documentos proporcionados.Integra citas con Claude en estos pasos:
División automática vs contenido personalizado
Por defecto, los documentos de texto plano y PDF se dividen automáticamente en oraciones. Si necesitas más control sobre la granularidad de las citas (por ejemplo, para puntos de viñeta o transcripciones), usa documentos de contenido personalizado en su lugar. Consulta Tipos de Documento para más detalles.
Por ejemplo, si deseas que Claude pueda citar oraciones específicas de tus fragmentos de RAG, debes poner cada fragmento de RAG en un documento de texto plano. De lo contrario, si no deseas que se realice más división, o si deseas personalizar cualquier división adicional, puedes poner fragmentos de RAG en documento(s) de contenido personalizado.
source de un documento puede ser citado.title y context son campos opcionales que se pasarán al modelo pero no se usarán hacia el contenido citado.title está limitado en longitud, por lo que es posible que encuentres el campo context útil para almacenar cualquier metadato del documento como texto o json stringificado.content proporcionada en el documento de contenido personalizado.cited_text se proporciona por conveniencia y no cuenta hacia los tokens de salida.cited_text tampoco se cuenta hacia los tokens de entrada.Las citas funcionan en conjunto con otras características de la API, incluyendo almacenamiento en caché de prompts, conteo de tokens y procesamiento por lotes.
Las citas y las salidas estructuradas son incompatibles
Las citas no se pueden usar junto con Salidas Estructuradas. Si habilitas citas en cualquier documento proporcionado por el usuario (bloques de Documento o RequestSearchResultBlock) e incluyes también el parámetro output_config.format (o el parámetro output_format deprecado), la API devolverá un error 400.
Esto se debe a que las citas requieren intercalar bloques de citas con salida de texto, lo que es incompatible con las restricciones estrictas del esquema JSON de las salidas estructuradas.
Las citas y el almacenamiento en caché de prompts se pueden usar juntos de manera efectiva.
Los bloques de citas generados en respuestas no se pueden almacenar en caché directamente, pero los documentos fuente a los que hacen referencia sí se pueden almacenar en caché. Para optimizar el rendimiento, aplica cache_control a tus bloques de contenido de documento de nivel superior.
En este ejemplo:
cache_control en el bloque de documentoSe admiten tres tipos de documento para citas. Los documentos se pueden proporcionar directamente en el mensaje (base64, texto o URL) o cargarse a través de la API de Archivos y hacer referencia por file_id:
| Tipo | Mejor para | División | Formato de cita |
|---|---|---|---|
| Texto plano | Documentos de texto simple, prosa | Oración | Índices de caracteres (indexado desde 0) |
| Archivos PDF con contenido de texto | Oración | Números de página (indexado desde 1) | |
| Contenido personalizado | Listas, transcripciones, formato especial, citas más granulares | Sin división adicional | Índices de bloques (indexado desde 0) |
Los archivos .csv, .xlsx, .docx, .md y .txt no se admiten como bloques de documento. Conviértelos a texto plano e inclúyelos directamente en el contenido del mensaje. Consulta Trabajar con otros formatos de archivo.
Los documentos de texto plano se dividen automáticamente en oraciones. Puedes proporcionarlos en línea o por referencia con su file_id:
Los documentos PDF se pueden proporcionar como datos codificados en base64 o por file_id. El texto PDF se extrae y se divide en oraciones. Como las citas de imágenes aún no se admiten, los PDF que son escaneos de documentos y no contienen texto extraíble no serán citables.
Los documentos de contenido personalizado te dan control sobre la granularidad de las citas. No se realiza división adicional y los fragmentos se proporcionan al modelo de acuerdo con los bloques de contenido proporcionados.
{
"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},
}Cuando las citas están habilitadas, las respuestas incluyen múltiples bloques de texto con citas:
{
"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,
}
],
},
]
}Para respuestas de streaming, se incluye un tipo citations_delta que contiene una sola cita que se agregará a la lista citations en el bloque de contenido text actual.
Proporciona documento(s) y habilita citas
citations.enabled=true en cada uno de tus documentos. Actualmente, las citas deben habilitarse en todos o ninguno de los documentos dentro de una solicitud.Los documentos se procesan
Claude proporciona respuesta citada
client = anthropic.Anthropic()
# Long document content (e.g., technical documentation)
long_document = (
"This is a very long document with thousands of words..." + " ... " * 1000
) # Minimum cacheable length
response = client.messages.create(
model="claude-opus-4-7",
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)