Jesús Martínez
EN
← Trabajo · Caso de estudio

Respuestas de inmigración que un abogado puede respaldar.

Quien tiene un problema migratorio pregunta en su idioma, muchas veces con miedo, sobre leyes que no dejan de cambiar. Construí VizEx, una herramienta pública que responde una pregunta con un panorama tipo memorando, basado en datos oficiales al día, y que nunca cruza la línea hacia la asesoría legal.

Cliente
Liveday
Rol
Líder de IA y único ingeniero
Período
Abr 2026 a jul 2026
Construido con
Python, FastAPI, Supabase, Claude, Tavily, React

El contexto

Respuestas hay muchas. Nadie responde por ellas.

Las preguntas de inmigración vienen de personas angustiadas, en muchos idiomas, sobre un cuerpo de leyes que se mueve con la presión política. Lo que encuentran gratis en internet es demasiado general para servir o viene de fuentes que no responden por nada.

El problema

Una frase equivocada ya es ejercer el derecho.

Decirle a alguien que califica para una visa, o que su solicitud va a ser aprobada, es asesoría legal. Una IA que lo diga una sola vez, en cualquier idioma, convierte una fuente de clientes en un riesgo legal. El abogado supervisor, con 35 años de ejercicio, necesitaba un sistema lo bastante seguro como para ponerle su nombre.

El enfoque

Primero las reglas por escrito. Después, calificar cada respuesta contra ellas.

El abogado dictó reglas formales y por escrito sobre cómo puede comportarse la IA. Construí el sistema que las hace cumplir en cada respuesta, y un nivel de pruebas que revisa las respuestas mismas, no solo el código que las produce.

01

Preguntar

Una sola pregunta, en cualquier idioma y sin crear cuenta, desde un widget incrustado en el sitio público.

02

Filtrar

Un modelo rápido y económico lee la pregunta primero, antes de gastar el modelo caro en ella.

03

Responder

Un modelo más potente escribe un panorama de una a tres páginas, con búsqueda web en vivo para tener datos oficiales al día. Muestra los caminos y los riesgos, nombra pronto cualquier complicación, como una estadía vencida o una negación previa, y nunca predice un resultado.

04

Entregar

La respuesta llega al navegador en 20 a 90 segundos, en el idioma de quien preguntó. Cierra con el descargo legal obligatorio y una invitación a agendar una consulta, y las situaciones urgentes reciben una invitación urgente.

05

Aprender

El abogado revisa respuestas candidatas en su propia herramienta. Las que elige se emparejan con preguntas nuevas y se le muestran al modelo como ejemplos.

Decisiones y trade-offs

Tres decisiones que lo hicieron funcionar.

01

Calificar las reglas, no solo el código.

Un cuarto nivel de pruebas califica las respuestas generadas contra las reglas del abogado. Cada escenario empareja una pregunta con una respuesta ideal escrita por él; las reglas innegociables las verifica el código y el resto, un juez LLM. Corre aparte de la suite diaria, así que los commits de rutina nunca gastan presupuesto de modelos.

Elegí escenarios calificados en vez de confiar en el prompt
02

No dejar la línea abierta.

Una respuesta puede tardar minuto y medio. Cada pregunta nueva se vuelve un trabajo en la base de datos, un worker lo toma y escribe la respuesta, y el navegador la recibe en cuanto está lista. Un barrido cada minuto recoge lo que se haya quedado atascado.

Elegí una cola de trabajos asíncrona en vez de una conexión abierta
03

Curar, no hacer fine-tuning.

El abogado fijó el límite: el modelo en producción nunca se reentrena. En cambio, las respuestas que él califica mejor se recuperan por similitud con cada pregunta nueva y se le dan al modelo como ejemplos, siempre en el mismo idioma y con un interruptor para apagarlo.

Elegí ejemplos curados en vez de fine-tuning

El giro

Las reglas le ganaron al modelo.

La forma obvia de hacer más seguras las respuestas era un modelo más potente. No fue eso lo que funcionó. VizEx llegó a ser lo bastante seguro como para llevar el nombre de un abogado gracias al nivel de pruebas: sus reglas, calificadas escenario por escenario contra respuestas ideales escritas por él, con las reglas que nunca se doblan verificadas por código y no por un juez. Cada ejecución queda registrada junto a la versión que la produjo, así que un cambio que rompe una regla aparece en las pruebas, no en una respuesta que alguien ya leyó.

1frase equivocada basta para ejercer el derecho
4.ºnivel de pruebas, que califica las respuestas y no el código

El resultado

Dónde terminó.

~100preguntas respondidas en las primeras dos semanas y media en línea
~33consultas agendadas a partir de ellas, cerca de una de cada tres
~5casos firmados, de unos USD 5.000 cada uno
3idiomas respondidos con naturalidad: inglés, español y portugués

En línea y abierto al público, y el cliente lo sigue ampliando. Lo construí solo en unos tres meses y medio: el backend, la herramienta de revisión del abogado y el widget incrustable.

Para el lector técnico

Notas de ingeniería

Una cola de trabajos dentro de Postgres

Insertar una pregunta dispara un webhook hacia el worker, que toma el trabajo de forma atómica con FOR UPDATE SKIP LOCKED. La fila terminada llega al navegador por Supabase Realtime, así que una generación larga nunca depende de que una conexión siga abierta. Las fallas vuelven a la cola hasta un límite y luego fallan de forma visible en el monitoreo de errores.

Reglas con disparador

Algunos pasajes tienen que aparecer siempre que aparezca su disparador: la anulación automática de la visa tras una estadía vencida según la sección 222(g) de la INA, los castigos de tres y diez años por presencia ilegal, con su vencimiento calculado a partir de la fecha de salida que da la persona, y una alerta sobre las políticas que están cambiando. El modelo además emite una etiqueta de urgencia que el pipeline lee y retira antes de que nadie la vea.

Nativo en cada idioma

Las respuestas salen en un registro natural, sin fragmentos en inglés ni títulos sin traducir, y el descargo legal también va traducido. El portugués usa por defecto el registro de Brasil, salvo que la pregunta indique otra cosa.

Tres respuestas que de verdad son distintas

La herramienta de revisión genera preguntas repartidas en una mezcla definida de registros emocionales, y mide que el generador de verdad produzca esa mezcla. Cada pregunta recibe tres candidatas, a temperaturas fijas y con enfoques distintos. Luego un filtro de similitud compara sus comienzos, que es donde de verdad se diferencian, y aparte descarta las casi idénticas.

Un widget que no le pide nada al sitio

JavaScript puro y autocontenido en un iframe del mismo origen, así que el sitio público no tuvo que configurar CORS. Tres versiones por idioma, mensajes de carga por etapas para una espera de hasta 90 segundos, enlaces de agenda en el idioma de la persona y una guía de integración para la agencia externa que maneja el sitio. Detrás, 1.124 pruebas, con más del doble de código de pruebas que de código de la aplicación.

  • Python
  • FastAPI
  • Supabase
  • PostgreSQL
  • pgvector
  • pg_cron
  • pg_net
  • Supabase Realtime
  • Claude Sonnet
  • Claude Haiku
  • OpenAI embeddings
  • Tavily
  • Calendly
  • Sentry
  • React
  • Docker
  • Render

Siguiente proyecto · Multiagente · 2025

Ocho agentes de IA en un solo Slack

¿Necesitas IA en un campo donde una frase equivocada sale cara?