AstrApp
Docs

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 .csv o .tsv se 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, como role o content.

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.

mensajes.csv
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.

preguntas.csv
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

Cuando un archivo trae a la vez columnas de rol y contenido y de usuario y asistente, se usa el modo A. Si querías el modo B, quita o renombra la columna de rol.

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é sirveModoNombres aceptados
Rol del mensajeArole, rol, sender, remitente, from, de, type, tipo
Contenido del mensajeAcontent, contenido, message, mensaje, text, texto, body, cuerpo
Id de conversaciónAconversation_id, conv_id, conversation, conversacion, conversación, id_conversacion, thread_id, session_id, chat_id, dialog_id, dialogue_id
Orden dentro de la conversaciónAmsg_index, message_index, turn, turno, index, indice, índice, orden, position, posicion, posición, seq, sequence
Mensaje del usuarioBuser, usuario, input, pregunta, question, prompt, instruction, instruccion
Respuesta del asistenteBassistant, asistente, output, respuesta, answer, response, completion
System promptBsystem, 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 resultanteLo que escribes en tu CSV
systemsystem, sistema, system_prompt
tooltool, function, herramienta, tool_response, function_response
useruser, usuario, cliente, customer, human, humano, pregunta, question, contact, lead
assistantassistant, 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.

csv
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é vesPor qué pasa y cómo arreglarlo
Todo el archivo quedó como una conversaciónNo 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 desordenadosSin 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 columnaTus 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 filasEn 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:

POST/api/v1/datasets
Crea un dataset; las filas planas se agrupan en conversaciones

Los campos del request están en la referencia de Datasets.