Skip to main content

Citas

Las citas vinculan fragmentos de la respuesta de un asistente con las fuentes que los respaldan. Active enableCitations al crear o reanudar una sesión y, a continuación, lea la carga útil de citations en los eventos assistant.message para representar notas al pie, listas de fuentes o enlaces insertados.

Advertencia

Las citas son experimentales. El nombre de la opción, la carga de eventos y la cobertura del proveedor pueden cambiar en una versión futura.

Cómo funcionan las citas

Las citas las proporciona el proveedor del modelo, no el SDK. El flujo tiene tres partes:

  1. La aplicación proporciona material que se puede citar, como un documento adjunto o el resultado de una herramienta que contiene contenido de origen.
  2. El tiempo de ejecución marca ese material como citable en la red cuando enableCitations está activado. Para los modelos de Anthropic, los archivos adjuntos se envían en bloques document con las citas habilitadas.
  3. El modelo devuelve metadatos de citas y el entorno de ejecución los normaliza en un objeto citations independiente del proveedor en el evento final assistant.message.

La compatibilidad con el proveedor es limitada. El campo provider de cada registro de origen indica de dónde procede la cita:

Valor del proveedorMeaning
anthropicCita generada por una respuesta de un modelo de Anthropic (Claude)
openaiCita producida por la respuesta de un modelo de OpenAI
clientCita sintetizada por el entorno de ejecución a partir de la salida de la herramienta

Nota:

enableCitations Activar no garantiza que una respuesta contenga citas. Los modelos solo los emiten cuando la respuesta se basa en material de origen citable. Trate siempre el citations campo como opcional.

Habilitación de citas en una sesión

Configure la opción al crear la sesión y vuelva a configurarla al reanudarla si desea referencias después de reiniciar.

Lenguajes de código navigation

TypeScript
const session = await client.createSession({
    onPermissionRequest: approveAll,
    enableCitations: true,
});

const resumed = await client.resumeSession(session.sessionId, {
    onPermissionRequest: approveAll,
    enableCitations: true,
});

Leer citas de mensajes del asistente

Las citaciones se reciben con el evento final assistant.message, no con los eventos assistant.message_delta. Espere al mensaje final antes de representar los marcadores de origen.

Lenguajes de código navigation

TypeScript
session.on((event) => {
    if (event.type !== "assistant.message" || !event.data.citations) {
        return;
    }

    const { sources, spans } = event.data.citations;
    const sourceById = new Map(sources.map((source) => [source.id, source]));

    for (const span of spans) {
        const quoted = event.data.content.slice(span.startIndex, span.endIndex);
        for (const reference of span.references) {
            const source = sourceById.get(reference.sourceId);
            const label = source?.title ?? source?.url ?? source?.path ?? source?.id;
            console.log(`"${quoted}" — ${label}`);
        }
    }
});

Referencia del contenido de la cita

El citations objeto separa los orígenes desduplicados de los intervalos que hacen referencia a ellos, por lo que un origen citado cinco veces aparece una vez en sources.

TipoCampoDescription
CitationssourcesConjunto de orígenes desduplicado al que hacen referencia los intervalos de citas
CitationsspansIntervalos de texto generado anotados con sus orígenes auxiliares
CitationSourceidIdentificador estable con alcance de turno al que hace referencia CitationReference.sourceId
CitationSourceproviderSistema que produjo la cita: anthropic, openaio client
CitationSourcetitle?Título legible de la fuente
CitationSourceurl?Dirección URL del origen, cuando es un recurso web
CitationSourcepath?Ruta de acceso del archivo relativa a la raíz del área de trabajo del agente, cuando el origen es un archivo
CitationSpanstartIndexDesplazamiento inicial en el contenido final del mensaje (unidades de código UTF-16, basadas en cero, inclusivas)
CitationSpanendIndexDesplazamiento final en el contenido final del mensaje (unidades de código UTF-16, basadas en cero y exclusivas)
CitationSpanreferencesOrígenes que admiten este intervalo
CitationReferencesourceIdIdentificador de CitationSource al que apunta esta referencia
CitationReferencecitedText?Texto exacto del origen que admite el intervalo, cuando el modelo lo proporciona
CitationReferencelocation?Ubicación dentro de la fuente que respalda el fragmento
CitationReferenceproviderMetadata?Datos de correlación nativos del proveedor, transmitidos de forma opaca

Sugerencia

Los desplazamientos de segmento se miden en unidades de código UTF-16 con respecto a la cadena final content. TypeScript, Java y .NET cadenas ya son UTF-16, por lo que puede segmentarlos directamente. Las cadenas de Python se indexan por punto de código Unicode y las cadenas de Go y Rust son UTF-8, por lo que debes convertir el contenido a unidades de código UTF-16 antes de segmentarlo, como hacen los ejemplos anteriores.

Ubicaciones de las citas

CitationReference.location es una unión discriminada cuya clave discriminante es type:

Tipo de ubicaciónCamposUse
char
startIndex, endIndexIntervalo de caracteres dentro del texto de origen
page
startPage, endPageIntervalo de páginas dentro de un documento paginado
block
startBlock, endBlockIntervalo de bloques de contenido dentro de un documento estructurado

Proporcionar orígenes citables

Las citas necesitan material de origen que el modelo pueda atribuir. Hay dos maneras de suministrarlo.

Adjuntar documentos a un mensaje

Cuando se habilitan las citas y la sesión usa un proveedor de Anthropic, los archivos adjuntos se envían como bloques document con las citas activadas, para que el modelo pueda citar pasajes de ellos.

await session.sendAndWait({
    prompt: "Summarize the attached PDF and cite the passages you used.",
    attachments: [
        {
            type: "blob",
            data: pdfBase64,
            displayName: "quarterly-report.pdf",
            mimeType: "application/pdf",
        },
    ],
});

Consulte Entrada de imagen para ver la API de adjuntos y los esquemas de adjuntos file y blob.

Devolver orígenes citables desde una herramienta

Los resultados de la herramienta incluyen una matriz experimental citableSources. Cada entrada proporciona content que el modelo puede citar, junto con un id y opcional title, urly path. Estas fuentes se almacenan con el resultado de la herramienta, por lo que sobreviven a la reanudación de la sesión y las citas generadas a partir de ellas se etiquetan con el proveedor client.

Limitations

  • Las citas son experimentales en cada SDK y no están cubiertas por garantías de compatibilidad.
  • La cobertura depende del proveedor de modelos. Una sesión configurada para un proveedor que no admite citas no emite ninguna carga útil citations.
  • Las referencias solo están presentes en el evento final assistant.message, por lo que los clientes que consumen la respuesta en streaming no pueden mostrarlas durante la respuesta.
  • El código público y las citaciones por duplicación de IP no forman parte de este ámbito.

Lectura adicional