falcoCódigo abierto · Salto Ángel

Lo que tu LLM decide, en milisegundos y sin pagar por llamada

Falco destila un modelo de lenguaje grande en un clasificador pequeño, rápido y calibrado. Un LLM enseña una vez; tu propio modelo responde después, en tu infraestructura.

El problema

Clasificar cada mensaje con un LLM no escala

Funciona en la demo. En producción, cada mensaje se convierte en una llamada a un modelo grande.

  • Lento

    Cada mensaje espera la respuesta de un modelo grande antes de que tu sistema pueda actuar.

  • Costoso

    Pagas por cada llamada, y la factura crece con cada mensaje que clasificas.

  • Dependiente

    Si el proveedor cambia precios o modelos, o se cae, tu operación cambia o se cae con él.

Cómo funciona

Etiquetar, entrenar, servir

Tres pasos, tres archivos. El LLM solo participa en el primero.

  1. Etiquetar

    tag.py

    Un LLM maestro lee tus textos y responde tus preguntas con probabilidades. El etiquetado se puede reanudar y reintenta con backoff.

  2. Entrenar

    train.py

    Un encoder multilingüe (mDeBERTa-v3 por defecto) aprende a reproducir esas probabilidades y se calibra para que un 0,9 acierte cerca del 90 % de las veces.

  3. Servir

    main.py · /v1/decide

    Una API FastAPI responde en milisegundos, sin llamar a ningún LLM en producción. Corre en CUDA, Apple MPS o CPU.

Ejemplo real

Un mensaje de soporte, tres respuestas

Una sola llamada a /v1/decide responde los tres tipos de pregunta: sí/no, opción múltiple y escala.

Mensaje

Me cobraron dos veces este mes y nadie responde, arréglenlo HOY

Preguntas

  • ¿Es urgente? · sí/no
  • Categoría · opción múltiple
  • Frustración · escala
Respuesta de /v1/decide
{
  "urgente": { "type": "noul", "noul": 0.93 },
  "categoria": {
    "type": "choice",
    "choice": "facturación",
    "probability": {
      "facturación": 0.88, "técnico": 0.04,
      "cuenta": 0.05, "otro": 0.03
    },
    "confidence": 0.61
  },
  "frustracion": {
    "type": "score",
    "score": 0.81,
    "distribution": {
      "ninguna": 0.01, "baja": 0.03, "media": 0.12,
      "alta": 0.45, "extrema": 0.39
    },
    "confidence": 0.42
  }
}

Valores ilustrativos. confidence va de 0 (distribución uniforme) a 1 (certeza).

Por qué Falco

Pensado para decidir en producción

  • Probabilidades calibradas

    La calibración por temperatura busca que un 0,9 signifique acertar cerca del 90 % de las veces, para que puedas fijar umbrales con confianza.

  • Preguntas en texto plano

    Las preguntas son parte de la entrada del modelo: la API acepta preguntas nuevas sin reentrenar. Eso sí, su precisión no está garantizada (son zero-shot).

  • Cualquier proveedor de LLM

    Usa como maestro Anthropic, Gemini o cualquier API compatible con OpenAI: OpenAI, Ollama, LM Studio, vLLM, Groq, OpenRouter, DeepSeek…

  • En tu propia infraestructura

    El modelo y la API corren donde tú decidas, en CUDA, Apple MPS o CPU, sin enviar cada mensaje a un tercero.

  • Código abierto

    El código está en GitHub: puedes leerlo, auditarlo y adaptarlo a tu caso.

Casos de uso

Dónde podría ayudarte

Algunas ideas de dónde encaja un clasificador rápido y calibrado.

  • Tickets de soporte

    Podrías clasificar cada ticket por categoría y urgencia en cuanto llega, y enviarlo al equipo correcto.

  • Priorización de leads

    Útil para estimar qué tan listo está un lead y decidir a quién contactar primero.

  • Moderación de mensajes

    Podrías marcar mensajes ofensivos o fuera de política con una probabilidad, y revisar a mano solo los dudosos.

  • Enrutamiento en WhatsApp

    Útil para decidir, mensaje a mensaje, si una conversación va a ventas, soporte o a una persona.

Para desarrolladores

De cero a /v1/decide en tres pasos

El camino rápido del README. Consulta la documentación para todas las opciones de etiquetado, entrenamiento y despliegue.

Terminal
uv sync --extra openai
# Crea .env con GEMINI_API_KEY=...  (o ANTHROPIC_API_KEY / OPENAI_API_KEY / OPENROUTER_API_KEY)

# 1. Etiquetar: genera 200 estados sintéticos y los etiqueta con el maestro
python tag.py --questions questions.json --generate 200 --provider gemini

# 2. Entrenar y calibrar el estudiante
python train.py --data data.jsonl --output model_s1

# 3. Servir
uvicorn main:app --port 8000
Leer la documentación en GitHub

Salto Ángel puede implementarlo en tu negocio

Te ayudamos a definir las preguntas, entrenar el modelo con tus datos y ponerlo en producción.