Importar CSV
Si tus conversaciones viven en una hoja de cálculo o en un export del CRM, no tienes que convertirlas a JSON. AstrApp lee el CSV y lo agrupa en conversaciones, siempre que los encabezados le digan qué es cada columna.
Antes de empezar
- Tu archivo necesita una fila de encabezados: de ahí se deduce todo lo demás.
- En Datasets › Importar datos el tope es de 4 MB por importación. Si tu export pesa más, pártelo.
- Importar datos detecta el formato por el contenido: un archivo
.csvo.tsvse lee como tabla, salvo que empiece como JSON o XML o sea un chat de WhatsApp o de WeChat. Si pegas el CSV en vez de subirlo, el encabezado debe incluir alguna columna reconocida, comoroleocontent.
Los dos modos
AstrApp mira tus encabezados y decide cuál de las dos formas usaste. No eliges el modo: lo determinan las columnas.
Modo A: una fila por mensaje
Se activa cuando hay una columna de rol y una de contenido.
Cada fila es un mensaje. Las filas se agrupan en conversaciones por la columna de id y, dentro de cada conversación, se ordenan por la columna de orden. Es la forma natural de un export de mensajería o de una tabla de chats.
conversation_id,msg_index,role,content
c1,0,system,Eres el asistente de una tienda en línea.
c1,1,user,¿Hacen envíos a Monterrey?
c1,2,assistant,"Sí, enviamos a todo México."
c1,3,user,¿Cuánto tarda?
c1,4,assistant,De 3 a 5 días hábiles.
c2,0,system,Eres el asistente de una tienda en línea.
c2,1,user,¿Puedo devolver un producto?
c2,2,assistant,"Sí, tienes 30 días para devolverlo."Cómo se decide dónde termina cada conversación:
- Con columna de id, cada valor distinto es una conversación. Es lo recomendable.
- Sin columna de id, pero con filas system, cada fila system abre una conversación nueva.
- Sin columna de id y sin filas system, todo el archivo se vuelve una sola conversación.
La columna de orden es opcional. Sin ella se respeta el orden de las filas, lo que funciona si tu export ya viene ordenado. Si lo generaste con una consulta sin ORDER BY, agrégala.
Modo B: una fila por conversación
Se activa cuando hay una columna de usuario y una de asistente.
Cada fila es una conversación de dos turnos: lo que preguntó el usuario y lo que respondió el asistente, con un system prompt opcional. Es la forma típica de una tabla de preguntas frecuentes o de un guion de atención.
system,pregunta,respuesta
Eres el asistente de una tienda en línea.,¿Hacen envíos a Monterrey?,"Sí, enviamos a todo México."
Eres el asistente de una tienda en línea.,¿Cuánto tarda el envío?,De 3 a 5 días hábiles.
Eres el asistente de una tienda en línea.,¿Puedo devolver un producto?,"Sí, tienes 30 días para devolverlo."Este ejemplo usa pregunta y respuesta en vez de user y assistant: ambos se reconocen. Las filas sin usuario o sin asistente se descartan.
Si tienes las dos cosas, gana el modo A
Un CSV de WeChat no pasa por estas reglas
Si la fila de encabezados trae IsSender y StrContent —el CSV que exporta WeChatMsg—, el archivo se lee como un chat de WeChat y no con los modos A y B.
- Los roles los decides tú. No salen de una columna: el asistente de importación te pregunta quién responde por tu negocio y sus mensajes se guardan como
assistant. Los nombres no se guardan, solo deciden el rol. - Solo mensajes de texto. Imágenes, voz, video, stickers, adjuntos y avisos del sistema se omiten, igual que los chats de grupo. El asistente te dice cuántos quedaron fuera.
- Un chat por contacto. Cada contacto del CSV es una conversación aparte y, dentro de cada chat, una pausa de 6 horas o más empieza una conversación nueva.
Sirven tres formatos: el CSV y el TXT de WeChatMsg y el TXT de WechatExporter. Los pasos completos están en WeChat.
Quitar datos personales antes de guardar
En el asistente de importación y en la importación rápida el interruptor viene marcado. Cambia correos, teléfonos, tarjetas, IPs, IDs de WeChat, CURP, RFC, SSN, cédulas chinas y direcciones con calle y número por marcadores como [EMAIL]. Se aplica antes de guardar y antes de quitar duplicados, así que la vista previa te muestra cuántos encontró.
No detecta nombres de personas ni direcciones escritas de otra forma: revisa la muestra de la vista previa. Si importas por la API, quitar datos personales está apagado hasta que lo pidas en el cuerpo de la petición.
Nombres de columna reconocidos
No necesitas renombrar tus encabezados si ya están en español o en inglés.
| Para qué sirve | Modo | Nombres aceptados |
|---|---|---|
| Rol del mensaje | A | role, rol, sender, remitente, from, de, type, tipo |
| Contenido del mensaje | A | content, contenido, message, mensaje, text, texto, body, cuerpo |
| Id de conversación | A | conversation_id, conv_id, conversation, conversacion, conversación, id_conversacion, thread_id, session_id, chat_id, dialog_id, dialogue_id |
| Orden dentro de la conversación | A | msg_index, message_index, turn, turno, index, indice, índice, orden, position, posicion, posición, seq, sequence |
| Mensaje del usuario | B | user, usuario, input, pregunta, question, prompt, instruction, instruccion |
| Respuesta del asistente | B | assistant, asistente, output, respuesta, answer, response, completion |
| System prompt | B | system, sistema, system_prompt |
Las mayúsculas y los espacios al inicio o al final no importan, pero el nombre debe coincidir completo. Si tu archivo trae varias columnas del mismo grupo, se usa la que aparece primero en esta lista.
Cómo se traducen los roles
En el modo A, el valor de la columna de rol se convierte a uno de los cuatro roles de ChatML. Las mayúsculas no importan.
| Rol resultante | Lo que escribes en tu CSV |
|---|---|
system | system, sistema, system_prompt |
tool | tool, function, herramienta, tool_response, function_response |
user | user, usuario, cliente, customer, human, humano, pregunta, question, contact, lead |
assistant | assistant, asistente, agente, agent, bot, respuesta, answer, ai, chatbot, operator |
Si el valor no se reconoce o la celda está vacía, la fila se trata como mensaje del usuario.
Separadores, comillas y saltos de línea
El separador se detecta solo
Se mira solo la fila de encabezados, con esta prioridad: tabulación, luego |, luego ; y por último la coma.
Si un nombre de columna contiene una barra vertical, se va a leer como separador: renómbrala.
Las comillas funcionan de verdad
El lector sigue el estándar RFC 4180: acepta campos entre comillas dobles, comillas escapadas duplicándolas ("") y saltos de línea dentro de un campo entrecomillado.
Un system prompt de veinte líneas cabe en una sola celda sin romper el archivo.
conversation_id,role,content
c1,system,"Eres el asistente de una tienda en línea.
Responde siempre en español.
Nunca inventes precios: si no los sabes, dilo."
c1,user,¿Cuánto cuesta el envío?
c1,assistant,"El envío ""estándar"" cuesta $99 MXN."Errores típicos
| Qué ves | Por qué pasa y cómo arreglarlo |
|---|---|
| Todo el archivo quedó como una conversación | No hay columna de id de conversación ni filas system que marquen dónde empieza cada una. Agrega una columna de id desde el origen: es el único arreglo fiable. |
| Los mensajes salieron desordenados | Sin columna de orden se respeta el orden del archivo. Si tu export salió de una consulta sin ordenar, agrega una columna msg_index o turno. |
| No se reconoció ninguna columna | Tus encabezados no coinciden con ningún nombre aceptado, así que no hay modo A ni modo B. Renombra las columnas: es más rápido que reformatear el archivo. |
| Faltan filas | En el modo A se descartan las filas sin contenido; en el modo B, las que no tienen usuario o asistente. Si el conteo no cuadra con tu hoja, empieza por ahí. |
Cómo te enteras según dónde importes
- Todo en una conversación: el diálogo Crear dataset te lo avisa; en Importar datos lo ves porque la vista previa muestra una sola conversación.
- Ninguna columna reconocida: Importar datos no encuentra conversaciones y no importa nada; Crear dataset guarda las filas tal cual, con un aviso de que no sirven para entrenar.
Dónde aplica
La agrupación en conversaciones es la misma en los tres caminos, porque comparten la misma función.
Importar datos
Datasets › Importar datos. El camino recomendado: vista previa, duplicados fuera y costo visible.
Crear dataset
Datasets › Ver todos (clásico), botón Crear dataset, opción Subir archivo. El CSV se procesa en tu navegador.
Por la API, si mandas filas planas en items en lugar de conversaciones con messages, se agrupan igual:
Los campos del request están en la referencia de Datasets.