Chatea con tus documentos
De un documento puedes hacerle preguntas a la IA sobre el mismo como si fuera una conversación
Ir a la plantilla📄 Documentación del Flujo “Chatea con tus documentos”
🧩 Descripción general
El flujo permite consultar documentos almacenados en Google Drive como si se estuviera conversando con ellos.
Un documento se ingresa, se procesa en fragmentos y se guarda en un vectorstore; posteriormente el usuario plantea una pregunta y el sistema devuelve una respuesta generada por un modelo de IA, enriquecida con los fragmentos relevantes del documento.
⚙️ Funcionalidades principales
- Ingestión de documentos: se recuperan archivos de Google Drive y se persisten en una base de datos vectorial.
- Separación de textos: el contenido se divide en fragmentos coherentes según el idioma.
- Generación de embeddings: se calculan representaciones vectoriales de los fragmentos con OpenAI.
- Búsqueda contextual: se recuperan los fragmentos más relevantes para la pregunta del usuario.
- Transformación a texto: los datos recuperados se convierten a texto plano para la generación del prompt.
- Construcción dinámica de prompts: se integra el contexto recuperado con la pregunta.
- Generación de respuesta: un modelo LLM genera la respuesta basada en el prompt.
- Salida en formato chat: la respuesta se muestra en la interfaz como un mensaje de la IA.
🔄 Pasos del flujo de trabajo
| Nombre del componente | Rol en el flujo | Entradas clave | Salidas clave |
|---|---|---|---|
| Obtener documento (GDriveFilesComponent) | Recupera archivos de Google Drive y los convierte en datos. | Selección de archivo en Drive. | Datos de documento (contenido binario). |
| Separador de texto (LanguageRecursiveTextSplitter) | Divide el contenido en fragmentos de longitud razonable. | Datos de documento. | Fragmentos de texto (Data). |
| Subir a DB (Chroma) | Calcula embeddings de los fragmentos y los almacena en el vectorstore. | Fragmentos de texto, embeddings. | Vectorstore persistente (no visible directamente). |
| Obtener documento (GDriveFilesComponent) – segunda instancia | (Opcional) Selección de archivos para la búsqueda. | Selección de archivo en Drive. | Datos de documento (para búsqueda). |
| Separador de texto – segunda instancia | Divide los archivos seleccionados para búsqueda en fragmentos. | Datos de documento. | Fragmentos de texto (Data). |
| OpenAI Embeddings – segunda instancia | Genera embeddings de los fragmentos de búsqueda. | Fragmentos de texto. | Embeddings. |
| Obtener de DB (Chroma) | Busca fragmentos relevantes usando el query proporcionado. | Embeddings, query de búsqueda. | Resultados de búsqueda (Data). |
| Obtener texto (ParseData) | Convierte los resultados de búsqueda en texto plano. | Resultados de búsqueda (Data). | Texto procesado (Message). |
| Pregunta (ChatInput) | Captura la pregunta del usuario y la convierte en mensaje. | Texto de la pregunta, archivos opcionales. | Mensaje de pregunta (Message). |
| Instrucciones (Prompt) | Construye el prompt incorporando el contexto y la pregunta. | Texto de contexto (del ParseData), pregunta. | Prompt completo (Message). |
| OpenAI (OpenAIModel) | Genera la respuesta a partir del prompt. | Prompt. | Mensaje de respuesta (Message). |
| Salida de chat (ChatOutput) | Muestra la respuesta en la interfaz de chat. | Mensaje de respuesta. | Mensaje mostrado al usuario. |
Nota: Los pasos “Obtener documento” y “Separador de texto” pueden reutilizarse en distintas partes del flujo. En el ejemplo, una instancia se usa para la ingesta inicial y otra para la búsqueda de fragmentos en tiempo real.
🧠 Notas
- El flujo necesita una cuenta de Google Drive con los permisos adecuados para leer los archivos.
- La base de datos vectorial (Chroma) se almacena de forma persistente en la carpeta
chat_wiht_documents. - Se emplean modelos de embeddings de OpenAI (
text-embedding-3-small), y el modelo generativo es gpt‑4.1. - El tamaño del chunk para el splitter es 1000 caracteres con 200 de superposición.
- Se permite la búsqueda basada en similitud (
similarity) con un umbral de puntuación mínimo de 0.1. - La respuesta se genera en modo no streaming (
stream=false). - El flujo no incluye la gestión de tokens ni límites de cuota; estos parámetros deben configurarse a nivel de modelo si es necesario.
graph TD
%%{init: {'theme': 'mc','layout': 'elk'}}%%
ChatOutput-s3yx9[<div><img src="/_astro/messages-square.BaSDmT6g.svg" style="height: 20px !important;width: 20px !important"/></div>Chat Output]
style ChatOutput-s3yx9 stroke:#a170ff
ChatInput-nbeu2[<div><img src="/_astro/messages-square.BaSDmT6g.svg" style="height: 20px !important;width: 20px !important"/></div>Pregunta]
style ChatInput-nbeu2 stroke:#a170ff
GDriveFilesComponent-ield1[<div><img src="/_astro/google_drive.Cutj2ebY.svg" style="height: 20px !important;width: 20px !important"/></div>Obtener documento]
style GDriveFilesComponent-ield1 stroke:#a170ff
Prompt-bqb7h[<div><img src="/_astro/square-terminal.BMOXc-nZ.svg" style="height: 20px !important;width: 20px !important"/></div>Instrucciones]
style Prompt-bqb7h stroke:#a170ff
ParseData-u86r4[<div><img src="/_astro/braces.Djq0PW4_.svg" style="height: 20px !important;width: 20px !important"/></div>Obtener texto]
style ParseData-u86r4 stroke:#a170ff
Chroma-rr0og[<div><img src="/_astro/chroma.Ctr3VfNN.svg" style="height: 20px !important;width: 20px !important"/></div>Subir a DB]
style Chroma-rr0og stroke:#a170ff
OpenAIEmbeddings-8lgaa[<div><img src="/_astro/openAI.CA91HhVI.svg" style="height: 20px !important;width: 20px !important"/></div>OpenAI Embeddings]
style OpenAIEmbeddings-8lgaa stroke:#a170ff
LanguageRecursiveTextSplitter-60k4u[Separador de texto]
style LanguageRecursiveTextSplitter-60k4u stroke:#a170ff
Chroma-v9w2i[<div><img src="/_astro/chroma.Ctr3VfNN.svg" style="height: 20px !important;width: 20px !important"/></div>Obtener de DB]
style Chroma-v9w2i stroke:#a170ff
OpenAIEmbeddings-3cp2j[<div><img src="/_astro/openAI.CA91HhVI.svg" style="height: 20px !important;width: 20px !important"/></div>OpenAI Embeddings2]
style OpenAIEmbeddings-3cp2j stroke:#a170ff
OpenAIModel-h9hjf[<div><img src="/_astro/openAI.CA91HhVI.svg" style="height: 20px !important;width: 20px !important"/></div>OpenAI]
style OpenAIModel-h9hjf stroke:#a170ff
ParseData-u86r4 -.- Prompt-bqb7h
linkStyle 0 stroke:#a170ff
ChatInput-nbeu2 -.- Prompt-bqb7h
linkStyle 1 stroke:#a170ff
GDriveFilesComponent-ield1 -.- LanguageRecursiveTextSplitter-60k4u
linkStyle 2 stroke:#a170ff
LanguageRecursiveTextSplitter-60k4u -.- Chroma-rr0og
linkStyle 3 stroke:#a170ff
OpenAIEmbeddings-8lgaa -.- Chroma-rr0og
linkStyle 4 stroke:#a170ff
Chroma-v9w2i -.- ParseData-u86r4
linkStyle 5 stroke:#a170ff
OpenAIEmbeddings-3cp2j -.- Chroma-v9w2i
linkStyle 6 stroke:#a170ff
Prompt-bqb7h -.- OpenAIModel-h9hjf
linkStyle 7 stroke:#a170ff
OpenAIModel-h9hjf -.- ChatOutput-s3yx9
linkStyle 8 stroke:#a170ff