LLM Observability no está disponible en el sitio seleccionado () en este momento.

Información general

La API de LLM Observability proporciona una interfaz para que los desarrolladores envíen información relacionada con trazas (traces) y tramos (spans) de LLM a Datadog. Si tu aplicación está escrita en Python, puedes utilizar el SDK de LLM Observability para Python.

API de tramos

Utiliza este endpoint para enviar tramos a Datadog. Para obtener más información sobre los tipos disponibles de tramos, consulta Tipos de tramo.

Endpoint
https://api./api/intake/llm-obs/v1/trace/spans
Método
POST

Solicitud

Encabezados (obligatorios)

  • DD-API-KEY=<YOUR_DATADOG_API_KEY>
  • Content-Type="application/json"

Datos del cuerpo de texto (obligatorios)

CampoTipoDescripción
datos [obligatorio]SpansRequestDataPunto de entrada en el cuerpo de solicitud.
{
  "data": {
    "type": "span",
    "attributes": {
      "ml_app": "weather-bot",
      "session_id": "1",
      "tags": [
        "service:weather-bot",
        "env:staging",
        "user_handle:example-user@example.com",
        "user_id:1234"
      ],
      "spans": [
        {
          "parent_id": "undefined",
          "trace_id": "<TEST_TRACE_ID>",
          "span_id": "<AGENT_SPAN_ID>",
          "name": "health_coach_agent",
          "meta": {
            "kind": "agent",
            "input": {
              "value": "What is the weather like today and do i wear a jacket?"
            },
            "output": {
              "value": "It's very hot and sunny, there is no need for a jacket"
            }
          },
          "start_ns": 1713889389104152000,
          "duration": 10000000000
        },
        {
          "parent_id": "<AGENT_SPAN_ID>",
          "trace_id": "<TEST_TRACE_ID>",
          "span_id": "<WORKFLOW_ID>",
          "name": "qa_workflow",
          "meta": {
            "kind": "workflow",
            "input": {
              "value": "What is the weather like today and do i wear a jacket?"
            },
            "output": {
              "value":  "It's very hot and sunny, there is no need for a jacket"
            }
          },
          "start_ns": 1713889389104152000,
          "duration": 5000000000
        },
        {
          "parent_id": "<WORKFLOW_SPAN_ID>",
          "trace_id": "<TEST_TRACE_ID>",
          "span_id": "<LLM_SPAN_ID>",
          "name": "generate_response",
          "meta": {
            "kind": "llm",
            "input": {
              "messages": [
                {
                  "role": "system",
                  "content": "Your role is to ..."
                },
                {
                  "role": "user",
                  "content": "What is the weather like today and do i wear a jacket?"
                }
              ]
            },
            "output": {
              "messages": [
                {
                  "content": "It's very hot and sunny, there is no need for a jacket",
                  "role": "assistant"
                }
              ]
            }
          },
          "start_ns": 1713889389104152000,
          "duration": 2000000000
        }
      ]
    }
  }
}

Respuesta

Si la solicitud tiene éxito, la API responde con un código de red 202 y un cuerpo vacío.

Normas de la API

Error

CampoTipoDescripción
messagecadenaEl mensaje de error.
stackcadenaEl stack trace.
tipocadenaEl tipo de error.

E/S

CampoTipoDescripción
valuecadenaValor de entrada o salida. Si no se establece, este valor se deduce de los mensajes o documentos.
messagesMensajeLista de mensajes. Sólo debe utilizarse para tramos de LLM.
documentsDocumentoLista de documentos. Esto sólo debe utilizarse como salida para los tramos de recuperación

Nota: Cuando sólo se establece input.messages para un tramo de LLM, Datadog infiere input.value a partir de input.messages y utiliza la siguiente lógica de inferencia:

  1. Si existe un mensaje con role=user, se utiliza el contenido del último mensaje como input.value.
  2. Si no hay ningún mensaje con función user, input.value se deduce concatenando los campos de contenido de todos los mensajes, independientemente de sus roles.

Mensaje

CampoTipoDescripción
content [obligatorio]cadenaEl cuerpo del mensaje.
rolcadenaEl rol de la entidad.

Documento

CampoTipoDescripción
textocadenaEl texto del documento.
nombrecadenaEl nombre del documento.
scorefloatLa puntuación asociada a este documento.
idcadenaEl ID de este documento.

Meta

CampoTipoDescripción
kind [obligatorio]cadenaEl tipo de tramo: "agent", "workflow", "llm", "tool", "task", "embedding", o "retrieval".
errorErrorInformación sobre errores en el tramo.
inputIOLa información de entrada del tramo.
outputIOLa información de salida del tramo.
metadataDict[key (string), value] donde el valor es un valor float, bool o stringDatos sobre el tramo que no están relacionados con la entrada o la salida. Utiliza las siguientes claves de metadatos para tramos de LLM: temperature, max_tokens, model_name y model_provider.

Métricas

CampoTipoDescripción
input_tokensfloat64El número de tokens de entrada. Sólo válido para tramos de LLM.
output_tokensfloat64El número de tokens de salida. Sólo válido para tramos de LLM.
total_tokensfloat64El número total de tokens asociados al tramo. Sólo válido para tramos de LLM.
time_to_first_tokenfloat64El tiempo en segundos que tarda en devolverse el primer token de salida en aplicaciones LLM basadas en streaming. Establecido para tramos raíz.
time_per_output_tokenfloat64El tiempo en segundos que tarda en devolverse el token de salida en aplicaciones de LLM basadas en streaming. Establecido para tramos raíz.

Tramo

CampoTipoDescripción
name [obligatorio]cadenaEl nombre del tramo.
span_id [obligatorio]cadenaUn ID exclusivo de tramo.
trace_id [obligatorio]cadenaUn identificador único compartido por todos los tramos de la misma traza.
parent_id [obligatorio]cadenaID de la entidad principal directa del tramo. Si el tramo es un tramo raíz, parent_id debe ser undefined.
start_ns [obligatorio]uint64La hora de inicio del tramo en nanosegundos.
duration [obligatorio]float64La duración del tramo en nanosegundos.
meta [obligatorio]MetaEl contenido básico relativo al tramo.
statuscadenaEstado de error ("ok" o "error"). Por defecto "ok".
métricasMétricasMétricas de Datadog para recopilar.
session_idcadenaEl campo session_id del tramo. Anula el campo de nivel superior session_id.
tags[Etiqueta]Una lista de etiquetas para aplicar a este tramo concreto.

SpansRequestData

CampoTipoDescripción
type [obligatorio]cadenaIdentificador de la solicitud. Establecido en span.
attributes [obligatorio]SpansPayloadEl cuerpo de la solicitud.

SpansPayload

CampoTipoDescripción
ml_app [obligatorio]cadenaEl nombre de tu solicitud de LLM. Consulta Directrices para la denominación de aplicaciones.
spans [obligatorio][Tramo]Una lista de tramos.
tags[Etiqueta]Una lista de etiquetas de nivel superior para aplicar a cada tramo.
session_idcadenaLa sesión a la que pertenece la lista de tramos. También se puede anular o establecer en tramos individuales.

Etiqueta

Las etiquetas deben formatearse como una lista de cadenas (por ejemplo, ["user_handle:dog@gmail.com", "app_version:1.0.0"]). Su finalidad es almacenar información contextual en torno al tramo.

Para más información sobre etiquetas, consulta Empezando con etiquetas.

Directrices para la asignación de nombres a las aplicaciones

El nombre de tu aplicación (el valor de DD_LLMOBS_ML_APP) debe ser una cadena Unicode en minúsculas. Puede contener los caracteres que se indican a continuación:

  • Caracteres alfanuméricos
  • Guiones bajos
  • Signos de resta
  • Dos puntos
  • Puntos
  • Barras

El nombre puede tener hasta 193 caracteres y no puede contener guiones bajos contiguos o finales.

API de evaluaciones

Utiliza este endpoint para enviar evaluaciones asociadas a un determinado tramo a Datadog.

Endpoint
https://api./api/intake/llm-obs/v1/eval-metric
Método
POST

Las evaluaciones requieren un span_id y trace_id.

  • Si no utilizas el SDK de LLM Observability, envía los archivos span_id y trace_id que utilizó para crear tu tramo objetivo.
  • Si utilizas el SDK de LLM Observability, obtén los atributos span_id y trace_id buscando tu tramo objetivo y accediendo a los atributos root_span.span_id y root_span.trace_id.

Solicitud

Encabezados (obligatorios)

  • DD-API-KEY=<YOUR_DATADOG_API_KEY>
  • Content-Type="application/json"

Datos del cuerpo de texto (obligatorios)

CampoTipoDescripción
data [obligatorio]EvalMetricsRequestDataPunto de entrada en el cuerpo de la solicitud.
{
  "data": {
    "type": "evaluation_metric",
    "attributes": {
      "metrics": [
        {
          "span_id": "61399242116139924211",
          "trace_id": "13932955089405749200",
          "ml_app": "weather-bot",
          "timestamp_ms": 1609459200,
          "metric_type": "categorical",
          "label": "Sentiment",
          "categorical_value": "Positive"
        },
        {
          "span_id": "20245611112024561111",
          "trace_id": "13932955089405749200",
          "ml_app": "weather-bot",
          "timestamp_ms": 1609479200,
          "metric_type": "score",
          "label": "Accuracy",
          "score_value": 3
        }
      ]
    }
  }
}

Respuesta

CampoTipoDescripciónAsegurado
IDcadenaUUID de respuesta generado al enviar.
métricas[EvalMetric]Una lista de evaluaciones.
{
  "data": {
    "type": "evaluation_metric",
    "id": "456f4567-e89b-12d3-a456-426655440000",
    "attributes": {
      "metrics": [
        {
          "id": "d4f36434-f0cd-47fc-884d-6996cee26da4",
          "span_id": "61399242116139924211",
          "trace_id": "13932955089405749200",
          "ml_app": "weather-bot",
          "timestamp_ms": 1609459200,
          "metric_type": "categorical",
          "label": "Sentiment",
          "categorical_value": "Positive"
        },
        {
          "id": "cdfc4fc7-e2f6-4149-9c35-edc4bbf7b525",
          "span_id": "20245611112024561111",
          "trace_id": "13932955089405749200",
          "ml_app": "weather-bot",
          "timestamp_ms": 1609479200,
          "metric_type": "score",
          "label": "Accuracy",
          "score_value": 3
        }
      ]
    }
  }
}

Normas de la API

Atributo

CampoTipoDescripción
metrics [obligatorio][EvalMetric]Una lista de evaluaciones cada una asociada a un tramo.
tags[Etiqueta]Una lista de etiquetas para aplicar a todas las evaluaciones de la carga útil.

EvalMetric

CampoTipoDescripción
IDcadenaEvaluación métrica UUID (generada en el momento de la presentación).
span_id [obligatorio]cadenaEl ID del tramo al que está asociada esta evaluación.
trace_id [obligatorio]cadenaEl ID de la traza a la que está asociada esta evaluación.
timestamp_ms [obligatorio]int64Una marca temporal UTC UNIX en milisegundos que representa la hora a la que se envió la solicitud.
ml_app [obligatorio]cadenaEl nombre de tu solicitud de LLM. Consulta Directrices para la denominación de solicitudes.
metric_type [obligatorio]cadenaEl tipo de evaluación: "categorical" o "score".
label [obligatorio]cadenaEl nombre único o etiqueta para la evaluación proporcionada.
categorical_value [obligatorio si metric_type es “categorical”]cadenaCadena que representa la categoría a la que pertenece la evaluación.
score_value [obligatorio si metric_type es “score “]númeroUn valor de puntuación de la evaluación.
tags[Etiqueta]Una lista de etiquetas para aplicar a esta métrica de evaluación concreta.

EvalMetricsRequestData

CampoTipoDescripción
type [obligatorio]cadenaIdentificador de la solicitud. Establecido en evaluation_metric.
attributes [obligatorio][EvalMetric]El cuerpo de la solicitud.