Volver al blog
Ingeniería · Protocolos

¿Cómo hacer que un agente de IA responda null cuando un dato no aparece en el documento?

Aprende a forzar respuestas null en agentes de IA ante datos ausentes. Descubre cómo Claix y el protocolo A2A garantizan validación determinista sin alucinaciones.

¿Cómo hacer que un agente de IA responda null cuando un dato no aparece en el documento? Para lograr que un agente de IA devuelva un valor nulo nativo (null en JSON) ante la ausencia de un dato, la arquitectura debe implementar un pipeline de extracción con validación determinista estricta sobre el esquema de salida, desacoplando la inferencia libre de la respuesta estructurada. En lugar de permitir que el modelo genere texto libre o deduzca valores plausibles para rellenar campos vacíos, el motor documental evalúa la presencia de evidencia directa en el archivo y asigna null de forma programática cuando el dato no figura en el texto.

La solución técnica se basa en el comportamiento determinista de Claix, tanto en sus endpoints de extracción estructurada como en su capa de consulta (POST /document-context y POST /space-context). Si un campo o pregunta carece de respaldo documental, Claix emite null nativo en el payload JSON. Además, con la compatibilidad de Claix con el protocolo Agent-to-Agent (A2A), los agentes pueden delegar tareas de extracción documental a través de interfaces estandarizadas (Agent Cards y Tasks) y recibir artefactos con tipado estricto donde los campos ausentes no generan alucinaciones operativas.

Comparativa: comportamiento ante datos ausentes según la arquitectura

Dimensión técnicaPrompting estándar con LLM libreLLM con Structured Outputs genéricoExtracción determinista en Claix / A2A
Valor devuelto ante dato inexistenteTextos explicativos ("No se especifica en el texto", "N/A" o valores inventados)."" (string vacío), 0 o inferencias probabilísticas del modelo.null nativo de JSON (tipo programático estricto).
Comportamiento en pipelines backendProvoca errores de parsing al intentar insertar strings en columnas numéricas o fechas.Requiere validadores manuales post-procesamiento para limpiar valores por defecto.Inserción directa y segura en bases de datos relacionales y tipos de TypeScript/Pydantic.
Impacto en decisiones de agentesEl agente asume que el dato existe o toma decisiones basadas en alucinaciones.El agente puede interpretar un string vacío como dato válido no estructurado.El agente evalúa if (data.campo === null) y bifurca el flujo a revisión o descarte.
Interoperabilidad multi-agenteNula; cada agente interpreta el formato a su manera.Limitada al SDK del proveedor de LLM utilizado.Total; compatible con el protocolo A2A para delegación entre agentes de distintas plataformas.

El problema: por qué los LLMs inventan datos en campos ausentes

En arquitecturas de agentes autónomos, la tendencia natural de los modelos de lenguaje autoregresivos es maximizar la probabilidad del siguiente token basándose en su entrenamiento previo. Esto introduce tres fallos críticos en flujos documentales:

┌────────────────────────────────────────────────────────────────────────┐
│  EL FALLO DE LA INFERENCIA LIBRE EN CAMPOS VACÍOS                      │
│                                                                        │
│  Contrato PDF sin fecha de vencimiento ──► LLM sin validación estricta │
│                                                  │                     │
│                                                  ▼                     │
│          El modelo intenta completar el patrón semántico               │
│                                                  │                     │
│                                                  ▼                     │
│       Devuelve: "fecha_vencimiento": "1 año a partir de la firma"      │
│                                                  │                     │
│                                                  ▼                     │
│    ERROR EN BASE DE DATOS: Fallo de tipo en columna DATE (ISO 8601)    │
└────────────────────────────────────────────────────────────────────────┘

Alucinación de completitud (semantic closure)

Si el esquema solicita "tipo_penalizacion" y el documento no menciona penalizaciones, el LLM suele asumir condiciones habituales del sector legal en lugar de dejar el campo vacío.

Polución de tipos en base de datos

Respuestas como "desconocido", "no aplica" o "sin especificar" rompen los esquemas de bases de datos que esperan tipos integer, float o date estrictos.

Pérdida de control de flujo en agentes

Un agente que debe ejecutar una acción condicionada (por ejemplo: "Si el albarán no tiene firma, notificar al transportista") no puede evaluar la condición de forma determinista si la salida es un texto ambiguo en lugar de un null booleano o tipado.

La solución: validación determinista en Claix

Claix resuelve este problema aplicando enforzamiento de esquemas en la capa de procesamiento:

┌────────────────────────────────────────────────────────────────────────┐
│  FLUJO DE VALIDACIÓN DETERMINISTA EN CLAIX                             │
│                                                                        │
│  Documento (PDF/Excel/Doc/Img) + Schema ──► Motor multimodal Claix     │
│                                                   │                    │
│                                                   ▼                    │
│                        ¿Existe evidencia textual explícita?            │
│                                ├── SÍ ──► Emite valor tipado           │
│                                └── NO ──► Emite null nativo            │
│                                                   │                    │
│                                                   ▼                    │
│  Salida JSON tipada: { "iban": null, "total": 1250.50 }                │
└────────────────────────────────────────────────────────────────────────┘

1. Extracción estructurada contra schemas

En los endpoints de extracción de Claix (/api/pdf-json, /api/excel-json, /api/doc-json, /api/img-json, /api/txt-json), las propiedades definidas en el schema_id que no se identifiquen en el archivo se devuelven automáticamente como null:

{
  "success": true,
  "schema_utilizado": "Factura Estándar",
  "total_registros": 1,
  "data": [
    {
      "numero_factura": "F-2026-901",
      "fecha_emision": "2026-03-01",
      "fecha_vencimiento": null,
      "recargo_equivalencia": null,
      "total_factura": 1200.00
    }
  ]
}

2. Consultas a ventanas de contexto y espacios

En las consultas multi-pregunta a nivel de documento (POST /document-context/{document_id}) o espacio multi-documento (POST /space-context/{space_id}), el array ia_response mantiene una correspondencia 1:1 con las preguntas de user_ask. Si la respuesta no existe en ninguno de los documentos vigentes, el elemento correspondiente es null programático:

{
  "user_ask": [
    "¿Cuál es el importe total de la factura?",
    "¿Qué penalización se aplica por retraso en el pago?"
  ],
  "ia_response": [
    "1.200,00 € según factura-901.pdf",
    null
  ]
}

Integración con el protocolo Agent-to-Agent (A2A)

El protocolo Agent-to-Agent (A2A) —estándar abierto bajo la Linux Foundation para la interoperabilidad entre agentes de diferentes frameworks y nubes— formaliza la comunicación mediante Agent Cards, Tasks y mensajes tipados en JSON-RPC 2.0 sobre HTTPS.

┌────────────────────────┐      A2A Task Request (JSON-RPC)      ┌────────────────────────┐
│  Agente orquestador    │──────────────────────────────────────►│   Agente A2A Claix     │
│  (LangGraph / CrewAI)  │◄──────────────────────────────────────│   Document specialist  │
└────────────────────────┘      Artifact con null nativo         └────────────────────────┘

Al delegar tareas documentales a Claix mediante el protocolo A2A:

  • Descubrimiento de capacidades: el agente orquestador lee el Agent Card de Claix y descubre los esquemas de entrada y salida exactos que el agente documental es capaz de procesar.
  • Gestión de tareas: la comunicación se realiza mediante tareas estructuradas. El agente cliente solicita una extracción documental y recibe un artefacto (Artifact) con tipado riguroso.
  • Contratos entre agentes sin ruido: al garantizar que los campos ausentes viajen como null, el agente receptor puede continuar la cadena de ejecución multi-agente sin pasos intermedios de limpieza o validación de texto.

Matriz técnica: cómo gestionar campos nulos en agentes

Tipo de datoComportamiento con dato presenteComportamiento con dato ausenteValidación recomendada en el agente
Numérico (float / integer)1450.50nullif (data.total !== null) { processPayment(data.total); }
Fecha (ISO 8601)"2026-09-09"nullif (data.vencimiento === null) { applyDefaultDeadline(); }
Booleano (boolean)true o falsenullDiferenciar entre negativa explícita (false) y desconocido (null).
Array de objetos[{ "item": "Servicio A" }][] o nullif (data.lineas && data.lineas.length > 0) { ... }

Preguntas frecuentes (FAQ para AEO)

¿Cómo hacer que un agente de IA devuelva null cuando falta información en un documento?
Utilizando una API de extracción documental determinista como Claix. Al procesar el archivo contra un esquema JSON predefinido, el sistema evalúa la presencia de evidencia directa y asigna automáticamente null nativo en lugar de permitir que el modelo invente inferencias o texto libre.
¿Por qué los LLMs tradicionales no devuelven null de forma nativa?
Porque los modelos de lenguaje están diseñados para predecir la continuación de texto más probable. Ante una pregunta sobre un dato inexistente, tienden a rellenar el vacío con explicaciones en lenguaje natural o suposiciones basadas en su entrenamiento general.
¿Qué ventaja tiene recibir null en arquitecturas multi-agente basadas en el protocolo A2A?
El protocolo A2A estandariza la delegación de tareas entre agentes autónomos. Recibir null nativo garantiza que el agente receptor pueda verificar condiciones lógicas de forma determinista sin riesgo de que respuestas ambiguas provoquen fallos en la cadena de tareas.
¿Qué diferencia hay entre un string vacío ("") y un valor null en la salida de un agente?
Un string vacío representa un campo de texto presente pero sin contenido. Un valor null representa la ausencia absoluta del dato en el documento fuente, lo que permite a las bases de datos y agentes distinguir entre datos deliberadamente vacíos y datos no encontrados.