Saltar al contenido principal
Jordi Izquierdo Montalbán
Proyectos

Agente de Soporte Fiable (OfficeFlow)

Asistente de atención al cliente instrumentado de v0 a v5 para erradicar alucinaciones y bucles: base de conocimiento RAG, verificación estricta de inventario en SQLite, suites de evaluación offline deterministas y comparativas pairwise.

Código privado: te lo enseño en una entrevista

LangSmith, LangGraph, Python, SQLite, RAG, pytest, LLM-as-a-judge, Pairwise Evals

El problema

Un agente de atención al cliente basado en un LLM puede sonar convincente y educado y, aun así, fallar donde más duele: prometer productos agotados, aplicar políticas de devolución obsoletas o repetir llamadas a herramientas en bucle. Nada de eso hace saltar un error técnico en la consola.

La solución

Flujo de atención al cliente instrumentado: solicitud → RAG de políticas sin fragmentación → comprobación heurística de stock en SQLite → evaluación offline en 3 capas y monitorización en producción.

En el proyecto Building Reliable Agents instrumenté el agente de soporte OfficeFlow y lo fui mejorando, de la versión inicial a una v5 lista para producción, con el ciclo Build ➔ Test ➔ Deploy ➔ Monitor de LangSmith:

  1. De v0 a v5:
    • v0: agente base, sin trazabilidad ni políticas acotadas.
    • v1: instrumentación completa con LangSmith para ver las ejecuciones.
    • v2: instrucciones reforzadas sobre el uso de herramientas y el formato de respuesta.
    • v3: reglas estrictas para comprobar el stock en la base de datos SQLite antes de responder.
    • v4: RAG sin trocear (No-chunking RAG), para consultar íntegras las políticas de la empresa.
    • v5: respuestas más concisas, sin redundancias.
  2. Evaluación offline en tres capas:
    • Heurísticas en código: scripts deterministas (eval_schema_check.py) que validan la estructura JSON exacta y el stock en la base de datos, sin gastar LLM.
    • Evaluadores semánticos (LLM-as-a-judge): rúbricas automáticas que miden la fidelidad a la documentación oficial y la veracidad de las afirmaciones.
    • Comparación por pares (Pairwise Evaluation): experimentos ciegos que enfrentan dos versiones del prompt (run_pairwise_experiment.py) con orden aleatorio (randomize_order=True), para comprobar si la nueva supera a la anterior.
  3. Monitorización en producción y colas de feedback:
    • Reglas de automatización que analizan el tráfico en vivo en LangSmith.
    • El agente Insights detecta tendencias de insatisfacción.
    • Las trazas fallidas o con votos negativos pasan solas a colas de anotación humana (Annotation Queues) para que el equipo las revise.

Stack desglosado

  • Orquestación: LangGraph y Python.
  • Plataforma de observabilidad: LangSmith (@traceable, RunTree, metadata, tags).
  • Bases de datos: SQLite (inventario de productos y base de conocimiento).
  • Metodología de testing: langsmith.evaluate(), evaluadores heurísticos deterministas y evaluadores de criterios LLM.

Resultados y aprendizajes

Lo que funcionó fue cambiar la validación a mano («probar a ojo con 3 preguntas») por suites de evaluación offline que se pueden repetir. Cada cambio en un prompt o en un modelo se valida contra datasets cerrados, con métricas numéricas, antes de tocar el despliegue.

Lo que aprendí: la fiabilidad de un agente no la regala el LLM. Se trabaja como cualquier otra disciplina de ingeniería, con trazabilidad detallada, aserciones deterministas sobre las herramientas y ciclos continuos de feedback humano.