graph TD
%%{init: {'theme': 'mc','layout': 'elk'}}%%
ChatInput-larrt[<div><img alt="logo" src="/_astro/messages-square.BaSDmT6g.svg" style="height: 20px !important;width: 20px !important"/></div>Chat Input]
style ChatInput-larrt stroke:#a170ff
GoogleGenerativeAIModel-hrflu[Gemini]
style GoogleGenerativeAIModel-hrflu stroke:#a170ff
GoogleGenerativeAIEmbeddings-fnjt0[Google Generative AI Embeddings]
style GoogleGenerativeAIEmbeddings-fnjt0 stroke:#a170ff
APIRequest-78xr1[API Request]
style APIRequest-78xr1 stroke:#a170ff
TelegramMessage-zvrp9[Telegram Message]
style TelegramMessage-zvrp9 stroke:#a170ff
ChatOutput-16z2g[<div><img alt="logo" src="/_astro/messages-square.BaSDmT6g.svg" style="height: 20px !important;width: 20px !important"/></div>Chat Output]
style ChatOutput-16z2g stroke:#a170ff
ChatOutput-0vfib[<div><img alt="logo" src="/_astro/messages-square.BaSDmT6g.svg" style="height: 20px !important;width: 20px !important"/></div>Chat Output2]
style ChatOutput-0vfib stroke:#a170ff
ChatOutput-7h910[<div><img alt="logo" src="/_astro/messages-square.BaSDmT6g.svg" style="height: 20px !important;width: 20px !important"/></div>Chat Output3]
style ChatOutput-7h910 stroke:#a170ff
GoogleGenerativeAIEmbeddings-mn2ew[Google Generative AI Embeddings2]
style GoogleGenerativeAIEmbeddings-mn2ew stroke:#a170ff
SplitText-xm92m[<div><img alt="logo" src="/_astro/scissors-line-dashed.CajsPhTx.svg" style="height: 20px !important;width: 20px !important"/></div>Split Text]
style SplitText-xm92m stroke:#a170ff
GDriveFilesComponent-q2n9y[<div><img alt="logo" src="/_astro/google_drive.wKmDsV2c.svg" style="height: 20px !important;width: 20px !important"/></div>Google Drive File Manager]
style GDriveFilesComponent-q2n9y stroke:#a170ff
ParseData-dpd2k[<div><img alt="logo" src="/_astro/braces.Djq0PW4_.svg" style="height: 20px !important;width: 20px !important"/></div>Parse Data]
style ParseData-dpd2k stroke:#a170ff
AdvancedAgent-zbpzj[Agent4]
style AdvancedAgent-zbpzj stroke:#a170ff
AdvancedAgent-aazz1[Agent]
style AdvancedAgent-aazz1 stroke:#a170ff
AdvancedAgent-hs2r4[Agent5]
style AdvancedAgent-hs2r4 stroke:#a170ff
ParseData-2g4fn[<div><img alt="logo" src="/_astro/braces.Djq0PW4_.svg" style="height: 20px !important;width: 20px !important"/></div>Parse Data2]
style ParseData-2g4fn stroke:#a170ff
ParseData-mrvuk[<div><img alt="logo" src="/_astro/braces.Djq0PW4_.svg" style="height: 20px !important;width: 20px !important"/></div>Parse Data3]
style ParseData-mrvuk stroke:#a170ff
ParseData-z8755[<div><img alt="logo" src="/_astro/braces.Djq0PW4_.svg" style="height: 20px !important;width: 20px !important"/></div>Parse Data4]
style ParseData-z8755 stroke:#a170ff
DeepseekModel-7c7w4[Deepseek2]
style DeepseekModel-7c7w4 stroke:#a170ff
DeepseekModel-juyng[Deepseek3]
style DeepseekModel-juyng stroke:#a170ff
DeepseekModel-ova3h[Deepseek4]
style DeepseekModel-ova3h stroke:#a170ff
SmartRouter-kldld[Agent Router]
style SmartRouter-kldld stroke:#a170ff
RetrieverTool-65vrx[<div><img alt="logo" src="/_astro/langchain-icon.BXtvU_nA.svg" style="height: 20px !important;width: 20px !important"/></div>RetrieverTool]
style RetrieverTool-65vrx stroke:#a170ff
AstraDB-bdkzn[Astra DB]
style AstraDB-bdkzn stroke:#a170ff
AstraDB-xlv27[Astra DB2]
style AstraDB-xlv27 stroke:#a170ff
ParseData-dpd2k -.- SplitText-xm92m
linkStyle 0 stroke:#a170ff
GDriveFilesComponent-q2n9y -.- ParseData-dpd2k
linkStyle 1 stroke:#a170ff
AdvancedAgent-zbpzj -.- ChatOutput-16z2g
linkStyle 2 stroke:#a170ff
AdvancedAgent-aazz1 -.- ChatOutput-7h910
linkStyle 3 stroke:#a170ff
APIRequest-78xr1 -.- AdvancedAgent-aazz1
linkStyle 4 stroke:#a170ff
AdvancedAgent-hs2r4 -.- ChatOutput-0vfib
linkStyle 5 stroke:#a170ff
TelegramMessage-zvrp9 -.- AdvancedAgent-hs2r4
linkStyle 6 stroke:#a170ff
ParseData-2g4fn -.- AdvancedAgent-zbpzj
linkStyle 7 stroke:#a170ff
ParseData-mrvuk -.- AdvancedAgent-aazz1
linkStyle 8 stroke:#a170ff
ParseData-z8755 -.- AdvancedAgent-hs2r4
linkStyle 9 stroke:#a170ff
DeepseekModel-7c7w4 -.- AdvancedAgent-zbpzj
linkStyle 10 stroke:#a170ff
DeepseekModel-juyng -.- AdvancedAgent-aazz1
linkStyle 11 stroke:#a170ff
DeepseekModel-ova3h -.- AdvancedAgent-hs2r4
linkStyle 12 stroke:#a170ff
ChatInput-larrt -.- SmartRouter-kldld
linkStyle 13 stroke:#a170ff
GoogleGenerativeAIModel-hrflu -.- SmartRouter-kldld
linkStyle 14 stroke:#a170ff
SmartRouter-kldld -.- ParseData-2g4fn
linkStyle 15 stroke:#a170ff
SmartRouter-kldld -.- ParseData-mrvuk
linkStyle 16 stroke:#a170ff
SmartRouter-kldld -.- ParseData-z8755
linkStyle 17 stroke:#a170ff
RetrieverTool-65vrx -.- AdvancedAgent-zbpzj
linkStyle 18 stroke:#a170ff
SplitText-xm92m -.- AstraDB-bdkzn
linkStyle 19 stroke:#a170ff
GoogleGenerativeAIEmbeddings-mn2ew -.- AstraDB-bdkzn
linkStyle 20 stroke:#a170ff
AstraDB-xlv27 -.- RetrieverTool-65vrx
linkStyle 21 stroke:#a170ff
GoogleGenerativeAIEmbeddings-fnjt0 -.- AstraDB-xlv27
linkStyle 22 stroke:#a170ff
🧩 Descripción general
El flujo “Atención al Cliente Ecommerce” automatiza la gestión de consultas de clientes a través de un chatbot inteligente. El sistema clasifica la intención de cada mensaje en tres niveles (información general, estado de pedidos y solicitud de intervención humana), recupera la información necesaria (archivos de Google Drive, datos de la API interna o documentos vectorizados en Astra DB), la procesa y genera respuestas con un modelo de lenguaje avanzado, y finalmente devuelve la respuesta al canal de origen (chat o Telegram).
⚙️ Funcionalidades principales
- Recibir y encapsular la entrada del usuario en el chat.
- Clasificar la intención del mensaje en nivel 1, 2 o 3.
- Obtener datos relevantes según el nivel: archivos de Google Drive, datos de la API o consultas vectoriales.
- Extraer y dividir el contenido en fragmentos, generar embeddings y construir un vector store en Astra DB.
- Usar un agente RAG (Retrieval‑Augmented Generation) para recuperar y combinar la información con el modelo de lenguaje.
- Enviar la respuesta al canal de chat, o, para nivel 3, pasarla a Telegram para atención humana.
🔄 Pasos del flujo de trabajo
| Nombre del componente |
Rol en el flujo |
Entradas clave |
Salidas clave |
| Chat Input |
Punto de entrada del usuario. |
Mensaje de texto (input_value) |
Mensaje estructurado |
| Smart Router |
Clasifica la intención en nivel 1, 2 o 3. |
Mensaje del usuario, modelo LLM |
Datos para cada nivel (intention_1_output, intention_2_output, intention_3_output) |
| GDrive Files Component |
Recupera archivos de Google Drive (nivel 1). |
Parámetros de búsqueda (id, folder, file_type) |
Datos de archivo (Data) |
| Parse Data (nivel 1) |
Convierte datos en texto y extrae metadata. |
Datos de archivo |
Texto procesado |
| Split Text |
Divide el texto en chunks para vectorización. |
Texto procesado |
Fragments (chunks) |
| Google Generative AI Embeddings |
Genera embeddings de los fragments. |
Fragments |
Vectores de embedding |
| Astra DB (Add Documents) |
Indexa los embeddings en la colección. |
Embeddings, Fragments |
Confirmación de ingestión |
| Retriever Tool |
Expose un retriever para el agente. |
BaseRetriever |
Herramienta de búsqueda |
| Advanced Agent (Nivel 1) |
RAG con acceso a la base de datos. |
Texto de consulta, retriever, modelo LLM |
Respuesta al usuario |
| API Request (Nivel 2) |
Realiza llamada a API interna para datos de pedido. |
Parámetros de consulta (URL, headers) |
Datos de la API |
| Advanced Agent (Nivel 2) |
Procesa la respuesta de la API y genera la respuesta final. |
Datos de la API, modelo LLM |
Respuesta al usuario |
| Advanced Agent (Nivel 3) |
Determina la necesidad de intervención humana. |
Texto de consulta, modelo LLM |
Decisión de envío a Telegram |
| Telegram Message |
Envía la respuesta al chat de Telegram (nivel 3). |
Mensaje de texto, chat_id |
Confirmación de envío |
| Chat Output |
Muestra la respuesta final al cliente. |
Respuesta del agente (texto) |
Mensaje visible en el chat |
Nota:
- Los componentes “Advanced Agent” están configurados con modelos Gemini 2.5‑Flash y DeepSeek Chat según el nivel de servicio.
- Los agentes pueden usar memoria opcional para mantener contexto a través de la conversación.
- La configuración de “confidence_threshold” en el Smart Router asegura que solo se clasifiquen con suficiente certeza.
🧠 Notas
- Gestión de intención: El Smart Router utiliza un modelo LLM y un umbral de confianza de 0.7 para decidir entre las tres categorías.
- Recuperación vectorial: Los documentos de Google Drive se segmentan en fragmentos de 1000 caracteres con una superposición de 200 caracteres para preservar contexto semántico.
- Embeddings: Se emplea el modelo
text-embedding-004 de Google Generative AI, que devuelve vectores de alta dimensión para cada fragmento.
- Astra DB: La colección se crea de forma sincrónica (
setup_mode: Sync). Los documentos se insertan en lotes de 3 con concurrencia de inserción controlada.
- Retrieval Tool: Se construye a partir del retriever base y se expone como herramienta que el agente puede invocar para búsquedas de similitud.
- Niveles de servicio:
- Nivel 1: Consulta de información general – respuesta generada con RAG.
- Nivel 2: Consulta de estado de pedido – datos se obtienen a través de una API interna (
API Request).
- Nivel 3: Intervención humana – respuesta se envía a Telegram para que un operador la revise.
- Memoria y streaming: Los agentes están configurados con memoria opcional (
use_checkpointer) y no activan streaming (use_stream: false), garantizando respuestas rápidas y consistentes.
Este documento resume de forma clara y concisa el flujo completo, los componentes clave, su interacción y las principales consideraciones técnicas para su operación.