AstrApp
Docs
Preparación de Datos
Guía de Uso

Formatos de Datos

Conoce los formatos de datos soportados por AstrApp para fine-tuning: ChatML estándar, ChatML con Tool Calling, Thinking Mode y el formato Harmony para DPO.

¿Qué formato debo usar?

El formato depende de tu caso de uso. Para la mayoría de escenarios, el formato ChatML estándar es suficiente. Si tu modelo necesita llamar APIs o herramientas externas, usa ChatML con Tool Calling. Para alineamiento por preferencia, usa Harmony/DPO.


Formato ChatML (Estándar)

ChatML es el formato más utilizado para fine-tuning de modelos de chat. Cada ejemplo contiene un array de mensajes con roles (system, user, assistant). Es el formato nativo de OpenAI y el más ampliamente compatible.

ChatML (JSONL)
{"messages": [{"role": "system", "content": "Eres un asistente de atención al cliente amable y profesional."}, {"role": "user", "content": "Hola, quiero saber el estado de mi pedido"}, {"role": "assistant", "content": "¡Hola! Con gusto te ayudo. ¿Me podrías proporcionar tu número de pedido para verificar el estado?"}]}

Estructura de cada mensaje

system

Define la personalidad, contexto y reglas del asistente. Se incluye una sola vez al inicio.

user

El mensaje del usuario o cliente. Puede ser una pregunta, instrucción o solicitud.

assistant

La respuesta ideal del asistente. Es lo que el modelo aprenderá a generar.

Tip: Para conversaciones multi-turno, simplemente alterna mensajes de user y assistant dentro del mismo array de messages. Puedes incluir tantos turnos como necesites.

Ejemplo multi-turno

ChatML multi-turno (JSON)
{
  "messages": [
    {
      "role": "system",
      "content": "Eres un asistente de ventas de una concesionaria de autos."
    },
    {
      "role": "user",
      "content": "Hola, busco un auto familiar"
    },
    {
      "role": "assistant",
      "content": "¡Bienvenido! Me encanta ayudarte a encontrar el auto perfecto para tu familia. ¿Cuántos miembros tiene tu familia y qué uso principal le darías al vehículo?"
    },
    {
      "role": "user",
      "content": "Somos 5, dos adultos y tres niños. Lo usaríamos para ir al colegio y viajes los fines de semana"
    },
    {
      "role": "assistant",
      "content": "Para una familia de 5 con ese uso, te recomiendo ver nuestras SUVs medianas. La Toyota RAV4 y la Honda CR-V son excelentes opciones: tienen amplio espacio, buen consumo de combustible para uso diario y son muy seguras. ¿Te gustaría que agendemos una prueba de manejo con alguna de ellas?"
    }
  ]
}

ChatML con Tool Calling (Qwen Format)

Si tu modelo necesita consultar APIs, bases de datos u otras herramientas externas, puedes incluir llamadas a herramientas en el formato de entrenamiento. El modelo aprenderá cuándo y cómo llamar a cada herramienta.

ChatML con Tool Calling (JSON)
{
  "messages": [
    {
      "role": "system",
      "content": "Eres un asistente de ventas de una concesionaria. Tienes acceso a herramientas para buscar vehículos en el inventario."
    },
    {
      "role": "user",
      "content": "¿Tienen algún sedan disponible?"
    },
    {
      "role": "assistant",
      "content": "<tool_call>\n{\"name\": \"buscar_vehiculos\", \"arguments\": {\"tipo_carroceria\": \"Sedan\"}}\n</tool_call>"
    },
    {
      "role": "tool",
      "content": "<tool_response>\n{\"total\": 2, \"vehiculos\": [{\"marca\": \"Toyota\", \"modelo\": \"Corolla\", \"anio\": 2024, \"precio\": 359900}, {\"marca\": \"Honda\", \"modelo\": \"Civic\", \"anio\": 2024, \"precio\": 399900}]}\n</tool_response>"
    },
    {
      "role": "assistant",
      "content": "¡Claro! Encontré 2 sedanes disponibles en nuestro inventario:\n\n1. **Toyota Corolla 2024** - $359,900 MXN\n2. **Honda Civic 2024** - $399,900 MXN\n\nAmbos son excelentes opciones. El Corolla destaca por su confiabilidad y bajo costo de mantenimiento, mientras que el Civic ofrece un interior más deportivo. ¿Te gustaría más detalles de alguno o agendar una prueba de manejo?"
    }
  ]
}

Estructura de Tool Call

El asistente genera un bloque <tool_call> con el nombre de la herramienta y los argumentos en formato JSON. El sistema ejecuta la herramienta y devuelve el resultado en un mensaje con role tool.

Estructura de Tool Response

La respuesta de la herramienta se envuelve en tags <tool_response> y contiene el resultado en JSON. El asistente luego interpreta este resultado y genera una respuesta natural para el usuario.

Importante: Puedes usar respuestas de herramientas simuladas durante el entrenamiento. No necesitas conectar herramientas reales al crear el dataset. Lo importante es que el modelo aprenda el patrón de cuándo llamar a cada herramienta y cómo interpretar los resultados.


Formato Harmony / DPO

El formato Harmony se usa para entrenamiento por preferencia (DPO - Direct Preference Optimization). En lugar de una sola respuesta correcta, proporcionas una respuesta preferida y una no preferida. El modelo aprende a generar respuestas del estilo preferido y a evitar el estilo no preferido.

Harmony / DPO (JSON)
{
  "input": {
    "messages": [
      {
        "role": "assistant",
        "content": "¡Hola! Soy tu asistente virtual. ¿En qué puedo ayudarte?"
      },
      {
        "role": "user",
        "content": "¿Qué es la inteligencia artificial de código abierto?"
      }
    ]
  },
  "preferred_output": [
    {
      "role": "assistant",
      "content": "La IA de código abierto significa que los modelos están disponibles para que cualquiera los use, modifique y comparta libremente. Esto permite a empresas y desarrolladores personalizar los modelos para sus necesidades específicas sin depender de un proveedor. Ejemplos populares incluyen Llama de Meta, Mistral y Qwen de Alibaba."
    }
  ],
  "non_preferred_output": [
    {
      "role": "assistant",
      "content": "Es cuando el código es público."
    }
  ]
}

Respuesta Preferida

  • - Detallada y completa
  • - Incluye ejemplos concretos
  • - Tono profesional y amable
  • - Información precisa y útil

Respuesta No Preferida

  • - Demasiado breve o vaga
  • - Sin contexto ni ejemplos
  • - Tono seco o poco profesional
  • - Información incompleta

Tip: El formato Harmony/DPO es ideal cuando quieres alinear el estilo de respuesta de tu modelo. Úsalo después de un primer fine-tuning con ChatML para refinar el comportamiento del modelo según las preferencias de tu negocio.


ChatML con Thinking Mode

El Thinking Mode permite que el modelo "piense" antes de responder, incluyendo un razonamiento interno que no se muestra al usuario final. Esto mejora la calidad de las respuestas en tareas que requieren razonamiento complejo, como cálculos, decisiones condicionales o análisis de múltiples factores.

ChatML con Thinking (JSON)
{
  "messages": [
    {
      "role": "system",
      "content": "Eres un asistente de una tienda en línea. Siempre razona internamente antes de responder."
    },
    {
      "role": "user",
      "content": "¿Cuánto cuesta el envío a Guadalajara?"
    },
    {
      "role": "assistant",
      "content": "<think>\nEl usuario pregunta por costos de envío a Guadalajara. Debo consultar la herramienta de tarifas antes de responder con precios específicos. Guadalajara está en la zona metropolitana de Jalisco, que generalmente tiene envío estándar de $99 MXN y express de $199 MXN para pedidos menores a $999. Para pedidos mayores, el envío estándar es gratis.\n</think>\n\nEl costo de envío a Guadalajara depende del tipo de envío:\n\n- **Envío estándar (3-5 días):** $99 MXN\n- **Envío express (1-2 días):** $199 MXN\n- **Envío gratis** en pedidos mayores a $999 MXN\n\n¿Te gustaría agregar algo a tu carrito para calcular el total?"
    }
  ]
}

¿Cuándo usar Thinking Mode?

  • Respuestas que requieren cálculos o lógica
  • Decisiones condicionales (si X entonces Y)
  • Cuando el modelo debe decidir qué herramienta usar
  • Análisis de múltiples factores antes de responder

¿Cuándo NO usar Thinking Mode?

  • xRespuestas simples y directas (saludos, FAQs)
  • xCuando la velocidad de respuesta es prioridad
  • xModelos pequeños (1-3B) con tokens limitados
  • xConversaciones puramente informativas

Nota: El contenido dentro de los tags <think> se genera como parte de la respuesta del modelo, pero puede ser filtrado antes de mostrarlo al usuario final. AstrApp maneja esta lógica automáticamente en el pipeline de inferencia.


Comparación de Formatos

Usa esta tabla como referencia rápida para decidir qué formato usar según tu caso de uso.

ChatML
Caso de uso: Fine-tuning estándar (SFT)
Roles: system, user, assistant
Tool Calling: Con tags <tool_call>
Thinking: Con tags <think>
Recomendado: La mayoría de casos
ChatML + Tool Calling
Caso de uso: Modelos con herramientas
Roles: system, user, assistant, tool
Tool Calling: Nativo
Thinking: Opcional
Recomendado: Asistentes con APIs
ChatML + Thinking
Caso de uso: Modelos con razonamiento
Roles: system, user, assistant
Tool Calling: Opcional
Thinking: Nativo
Recomendado: Tareas complejas
Harmony / DPO
Caso de uso: Entrenamiento por preferencia
Roles: user, assistant (preferred/non-preferred)
Tool Calling: No aplica
Thinking: No aplica
Recomendado: Alineamiento RLHF/DPO

Referencia Rápida de Keys

ChatML (SFT)

{
  "messages": [
    {"role": "...", "content": "..."}
  ]
}

Key principal: messages (array de objetos con role y content)

Harmony / DPO

{
  "input": {"messages": [...]},
  "preferred_output": [...],
  "non_preferred_output": [...]
}

Keys: input, preferred_output, non_preferred_output


¿No estás seguro del formato?

Empieza con ChatML estándar para tu primer fine-tuning. Es el formato más simple y compatible. Puedes agregar Tool Calling o Thinking Mode después cuando tengas un modelo base funcionando bien.

Ver configuración avanzada