AstrApp
Docs

Configuración avanzada

Enseña a tu modelo a usar herramientas, a razonar antes de responder y a respetar las reglas de tu negocio. Esta página separa lo que AstrApp hace por ti de lo que depende de cómo escribas tus conversaciones.

Antes de empezar

Estas técnicas complementan un dataset base sólido; no lo sustituyen. Si aún no lo tienes, revisa Importar conversaciones, Formatos de importación y Calidad.

Qué hace AstrApp y qué te toca

TemaEn AstrAppTe toca a ti
Tool callingSíntesis genera conversaciones con llamadas a tus herramientas, Identificar herramientas las inserta en conversaciones reales y Evaluar con IA revisa que se usen bien.Definir tus herramientas y revisar que los resultados simulados tengan sentido.
Servidor MCPGenera el código de una Edge Function de Supabase con tus herramientas (Starter+).Desplegarla en tu proyecto de Supabase y conectarla a tu aplicación.
RazonamientoNo tiene una opción para esto.Escribir el razonamiento entre <think> en las respuestas del asistente.
Reglas de negocioNo hay un módulo de guardrails. Síntesis le pide al generador rechazos y “no lo sé” honestos, y Evaluar con IA los cuenta como buenas respuestas.Escribir las reglas en el system prompt y dar ejemplos que las cumplan.
EscenariosSíntesis le pide al generador variar el tipo de usuario y cubrir casos difíciles.Pedir escenarios de tu negocio editando el prompt de síntesis o con semillas.
Filtro de calidadEvaluar con IA marca cada conversación como válida o inválida.Armar el dataset solo con las válidas.

Tool calling

El modelo aprende cuándo llamar a una herramienta, con qué argumentos y cómo usar el resultado.

Una herramienta es una función externa (tu API, tu inventario, tu agenda) que el modelo pide ejecutar cuando le falta un dato. El modelo no la ejecuta: emite la llamada, tu aplicación la corre y le devuelve el resultado.

Cómo se ve en tus conversaciones

Las conversaciones que genera Síntesis guardan la llamada en el campo tool_calls del mensaje del asistente, y el resultado en un mensaje con role: "tool" y el name de la herramienta:

json
{
  "messages": [
    {
      "role": "system",
      "content": "Eres el asistente de soporte de una tienda en línea. Consulta el estado de los pedidos con consultar_pedido."
    },
    {
      "role": "user",
      "content": "¿Dónde está mi pedido 78432?"
    },
    {
      "role": "assistant",
      "content": "",
      "tool_calls": [
        { "name": "consultar_pedido", "arguments": { "numero_pedido": "78432" } }
      ]
    },
    {
      "role": "tool",
      "name": "consultar_pedido",
      "content": "{\"estado\": \"en_transito\", \"paqueteria\": \"DHL\", \"entrega_estimada\": \"15 de marzo\"}"
    },
    {
      "role": "assistant",
      "content": "Tu pedido 78432 va en camino con DHL y la entrega estimada es el 15 de marzo. ¿Te ayudo con algo más?"
    }
  ]
}

Al entrenar, AstrApp manda los mensajes tal cual, con tool_calls y name, y la plantilla de chat del modelo base decide cómo quedan escritos en el texto que aprende. En Entrenar › Entrenar modelo, los modelos que soportan herramientas llevan la etiqueta Tools.

Otro formato: Qwen ChatML

Al insertar llamadas con Identificar herramientas eliges entre OpenAI Structured (el campo tool_calls) y Qwen ChatML, que escribe la llamada dentro del texto entre etiquetas <tool_call> y el resultado entre <tool_response>. Usa un solo formato en todo el dataset.

Cómo conseguir estas conversaciones

CaminoDóndeQué hace
GenerarConversaciones › Síntesis, sección HerramientasEliges herramientas de tu proyecto. AstrApp le pide al generador que las use en la mitad de las conversaciones del trabajo y no en la otra mitad; los resultados son simulados.
Insertar en conversaciones realesConversaciones › Ver todas, botón Identificar herramientas de la barra de selecciónUn modelo detecta dónde el asistente afirmó datos que debió consultar, propone las herramientas e inserta las llamadas.
ImportarDatasets › Importar datosSi tus conversaciones ya traen tool_calls y name, AstrApp los conserva.

Crear herramientas en Herramientas › Crear e identificarlas desde la barra de selección requiere el plan Starter+. Más detalles en Herramientas (tools).

Resultados simulados

Durante la síntesis, AstrApp no llama a tus APIs: le pasa al generador las definiciones de tus herramientas y el generador escribe resultados simulados pero realistas. Además le pide:

  • Un mensaje de resultado por cada llamada, en el mismo orden que las llamadas.
  • Que el asistente solo afirme datos que devolvió algún resultado.
  • Cifras del país y la moneda que indique el system prompt del asistente.

Buena práctica

Revisa que los resultados sean creíbles para tu negocio y que haya variedad: resultados con datos, resultados vacíos y errores. Así el modelo aprende a manejar cada caso.

Servidor MCP

Expone tus herramientas en producción. No interviene en el entrenamiento.

Un servidor MCP (Model Context Protocol) expone tus herramientas de forma estándar para que tu aplicación ejecute las llamadas que emite el modelo ya entrenado.

En Herramientas › Servidores MCP, con el plan Starter+, lo armas en cinco pasos: seleccionar herramientas, escaneo de seguridad, preview del código, despliegue y conexión MCP. AstrApp genera el código de una Edge Function de Supabase y te da:

  • La URL de la función y el JSON de configuración MCP.
  • Un ejemplo con cURL.
  • El comando para desplegarla: supabase functions deploy mcp-<nombre> --project-ref <PROJECT_REF>.
  • Las variables de entorno que piden las herramientas con autenticación.

El despliegue lo haces tú

AstrApp genera el código, pero no lo publica: lo despliegas en tu propio proyecto de Supabase con ese comando.

Cómo encaja en el flujo

  1. Define tus herramientas y el esquema de sus parámetros.
  2. Genera conversaciones con Síntesis usando esas herramientas (resultados simulados).
  3. Entrena el modelo: aprende cuándo llamar a cada herramienta y cómo usar el resultado.
  4. Despliega el servidor MCP para que, en producción, las llamadas del modelo obtengan datos reales.

Razonar antes de responder

Bloques <think> en las respuestas del asistente.

No es una opción de AstrApp

Ni Síntesis ni el entrenamiento tienen un interruptor para esto. Si quieres que el modelo razone antes de responder, escribe tú el razonamiento dentro de las respuestas del asistente.

El razonamiento va entre <think> y </think> al inicio del mensaje del asistente, seguido de la respuesta visible. Al entrenar, la plantilla de chat del modelo base decide cómo quedan esas etiquetas en el texto, así que conviene usarlo con modelos que ya traen un modo de razonamiento.

Cuándo usarlo

  • El modelo tiene que decidir entre varias herramientas.
  • La respuesta depende de cálculos o condiciones.
  • Hay que comparar opciones antes de recomendar.

Cómo escribirlo

  • Pide razonar en el system prompt.
  • El razonamiento debe llevar a la respuesta correcta.
  • La respuesta visible no menciona el razonamiento.
json
{
  "messages": [
    {
      "role": "system",
      "content": "Eres asesor de ventas de una tienda de tecnología. Razona antes de responder."
    },
    {
      "role": "user",
      "content": "Busco un regalo de tecnología de menos de $5,000. A mi esposa le gusta leer y hacer ejercicio."
    },
    {
      "role": "assistant",
      "content": "<think>\nPresupuesto: menos de $5,000. Intereses: lectura y ejercicio. Un lector electrónico cubre la lectura; un reloj deportivo, el ejercicio. Conviene preguntar cuál pesa más antes de recomendar un modelo.\n</think>\n\nTengo dos caminos: un lector electrónico si lo que más disfruta es leer, o un reloj deportivo si prefiere el ejercicio. ¿Cuál de las dos cosas hace más seguido?"
    }
  ]
}

Reglas de negocio (guardrails)

Restricciones que el modelo debe respetar siempre.

AstrApp no tiene un módulo de guardrails: las reglas se enseñan con datos. Escríbelas en el system prompt y refuérzalas con conversaciones donde el asistente las cumple.

Lo que sí hace AstrApp: el prompt de Síntesis pide incluir peticiones fuera de alcance e inapropiadas, donde el asistente reconoce que no sabe o se niega con cortesía, y Evaluar con IA cuenta esas respuestas como válidas (etiquetas good_refusal y good_escalation).

TipoEjemplos
Restricciones de contenidoNo hablar de competidores; no dar consejos médicos, legales ni financieros; no compartir información interna.
Reglas de negocioDescuento máximo que puede ofrecer; plazo de devolución; escalar si el monto supera cierta cantidad; confirmar identidad antes de dar datos sensibles.
Formato de respuestaRespuestas breves; cerrar con una llamada a la acción; listas solo para comparar; confirmar antes de ejecutar una acción.

Ejemplo: escalar un reembolso

json
{
  "messages": [
    {
      "role": "system",
      "content": "Eres un asistente de soporte. REGLA: si el cliente pide un reembolso mayor a $5,000 MXN, escala a un agente humano."
    },
    {
      "role": "user",
      "content": "Quiero que me devuelvan los $8,500 de mi compra. El producto llegó dañado."
    },
    {
      "role": "assistant",
      "content": "Lamento que tu producto llegara dañado. Por el monto del reembolso, $8,500 MXN, lo tiene que aprobar uno de nuestros agentes. ¿Te parece bien si te transfiero con un agente ahora?"
    }
  ]
}

Escenarios y tipos de cliente

Que tu dataset cubra las situaciones que el modelo va a encontrar en producción.

El prompt de Síntesis ya le pide al generador variar el tipo de usuario (experiencia, tono, intención y forma de escribir) y repartir casos difíciles: peticiones ambiguas, fuera de alcance, correcciones, cambios de tema y peticiones inapropiadas. No hay un control para fijar la proporción de cada escenario. Si necesitas escenarios de tu negocio, tienes dos vías:

  • Ver y editar prompt en Síntesis: tu versión se manda tal cual, pero deja de actualizarse sola al cambiar idioma, turnos o herramientas.
  • Semillas: Síntesis genera variaciones de las conversaciones que marques (hasta 50, entre las válidas y las marcadas como semilla).
EscenarioEjemplos
Cliente satisfechoCompra sin problemas, preguntas sobre productos, consultas informativas.
Cliente con un problemaProducto defectuoso, envío retrasado, error en un cobro.
Cliente molestoQuejas fuertes, amenaza con cancelar, pide hablar con un gerente.
Consulta complejaVarios productos, comparaciones, necesidades específicas.
Caso especialSolicitud fuera de lo normal, excepción a una política, urgencia.

Buena práctica

Reparte los escenarios según lo que ves en tus conversaciones reales, no en partes iguales.

Filtro de calidad

Cómo quedarte solo con las conversaciones que valen la pena.

Las conversaciones que genera Síntesis llegan pendientes y sin score. El “Umbral de calidad” de Síntesis solo se aplica cuando la generación no puede correr en segundo plano. Para filtrar por calidad:

  1. Genera con Síntesis.
  2. Evalúa con Procesar › Evaluar con IA.
  3. Filtra las válidas y revisa a mano una muestra.
  4. Manda las que pasan a un dataset con A dataset.

Los criterios y las bandas del score están en Calidad.

Empieza simple, escala después

No combines todo a la vez. Empieza con conversaciones ChatML sencillas y reglas claras en el system prompt, entrena, evalúa y agrega herramientas o razonamiento donde el modelo lo necesite.

Sigue con Entrenamiento.