Callsistdocs
Guías

Los siete módulos de comprensión

Temas, moderación, PII, lenguaje, sentimiento, resumen y tareas. Qué devuelve cada uno.

Se piden dentro de understanding en el POST. Se ejecutan en tres llamadas al LLM, no siete, y un grupo que falla solo se lleva a sus módulos:

GrupoMódulos
insighttopic_detection, summarization, action_items, sentiment_analysis
safetycontent_moderation, profanity_filter
piipii_redaction

Pedir los siete es más barato que pedir seis. El pack cuesta 0,29 €/h y solo se aplica si están los siete; seis sueltos salen a 0,35 €/h.

Si no mandas understanding, la respuesta trae "understanding": {} — un objeto vacío, no null. Comprueba las claves que esperas, no si el objeto existe.

topic_detection

{
  "topics": [
    { "label": "tech_configuration", "relevance": 0.9 },
    { "label": "survey", "relevance": 0.5 }
  ],
  "taxonomy": "contact_center",
  "taxonomy_version": 1
}

Con taxonomy: "contact_center" (el defecto) los label salen siempre de una lista cerrada de 40 identificadores estables. Lo que el modelo invente fuera de la lista se descarta. Es lo que permite agregar por tema entre llamadas e idiomas — con etiquetas libres, «problema de factura» y «incidencia de facturación» son dos temas distintos.

Con taxonomy: "open" las etiquetas son libres. taxonomy: "iab" no está implementada: se acepta, se cae a etiquetas libres y se avisa con taxonomy_unavailable:iab en warnings.

summarization

{ "text": "- El cliente llama porque ha introducido mal el PIN…\n- El agente verifica…" }

format puede ser bullets (por defecto, viñetas separadas por \n), paragraph o headline. El resumen sale en el idioma de la conversación. context —hasta 1 000 caracteres— se inyecta en el prompt: úsalo para el sector o el nombre del cliente.

action_items

{ "items": [ { "text": "Enviar el duplicado de la factura de junio", "owner": "agente", "due": null } ] }

owner y due valen null cuando no se dicen en la llamada. Una lista vacía es un resultado válido y frecuente: no la trates como un fallo.

content_moderation

{ "findings": [ { "category": "hate", "severity": 0.7, "excerpt": "…" } ] }

severity va de 0 a 1. Categorías: violence, hate, self_harm, sexual, drugs, weapons.

profanity_filter

{ "terms": [ { "text": "…" } ] }

Las palabras se contrastan contra el texto real antes de devolverse: si el modelo se inventa un insulto que nadie dijo, se descarta.

sentiment_analysis

{
  "overall": "positive",
  "by_utterance": [ { "index": 1, "sentiment": "neutral" }, { "index": 24, "sentiment": "positive" } ]
}

overall y sentiment valen positive, neutral o negative. index apunta a la posición dentro de utterances.

scope solo admite "customer". Mandar "agent" devuelve 400 sentiment_scope_not_permitted, y no es un capricho: el Reglamento de IA (art. 5.1.f) prohíbe inferir emociones de trabajadores en su entorno laboral, y vincula también al proveedor del sistema. Las intervenciones del agente no aparecen en by_utterance.

Esto no impide evaluar la calidad del trabajo del agente contra una plantilla — eso es evaluación de desempeño sobre hechos observables, no inferencia de emociones. Lo que no se puede es preguntar «¿cómo se sentía el agente?».

Tampoco hay reconocimiento de emociones por señal acústica, ni lo habrá. El sentimiento se infiere del texto.

pii_redaction

Tiene página propia, porque la forma de leerlo mal es silenciosa y cara: Redacción de PII.

On this page