Chatbot inteligente con RAG, búsqueda híbrida y integración de APIs externas
Diagrama interactivo de todos los flujos conversacionales y estados del sistema
Guía completa de todos los campos para integrar APIs externas
Documentación de Hybrid Search y conexión a bases de datos
Endpoints estables basados en GPT-4o para operaciones principales y GPT-4o mini para tareas rápidas (detección de idioma, clasificación inicial). Incluye herramientas de texto, traducción y detección de idioma exclusivas de v1.
Modelos soportados v1: gpt-4o (principal, configurable vía OPENAI_MODEL) · gpt-4o-mini (mini). Acepta temperaturas 0-2.
Endpoints con GPT-5.4 para operaciones principales y GPT-5.4 mini para operaciones rápidas (traducción de templates, SQL). Los parámetros opcionales model y model_mini permiten personalizar el modelo en cada request.
Modelos soportados v2: gpt-5.4 (principal) · gpt-5.4-mini (rápido). Compatibles también: gpt-5, gpt-5.1, gpt-5-mini (via override por parámetro).
Verifica el estado del servicio.
Endpoint principal del chatbot conversacional con RAG y búsqueda híbrida.
Pregunta o consulta del usuario
Identificador del modelo (ej: "modelo1")
Identificador del cliente
Idioma: "es" o "en" (default: "es")
Zona horaria (default: "America/Panama")
Token para API externa configurada
Si true, elimina el historial previo del cliente (default: false)
Override de temperatura OpenAI (0.0 - 2.0)
Modelo principal (default: GPT-5.4)
Modelo para operaciones rápidas (default: GPT-5.4 mini)
Chatbot especializado en operaciones MySQL (SELECT / INSERT / UPDATE / DELETE). Elimina 2-3 llamadas OpenAI respecto al chatbot completo porque asume que toda operación va a base de datos — sin clasificación de fuente.
Requisito previo: el sufijo debe tener database_config.json configurado (se envía en /add_data o /sql_config).
Consulta del usuario sobre la base de datos
Identificador del modelo
Identificador del cliente
Idioma: "es" o "en" (default: "es")
Zona horaria (default: "America/Panama")
Modelo principal (default: GPT-5.4)
Modelo para operaciones rápidas (default: GPT-5.4 mini)
Analiza el historial de conversación y el estado de un cliente para determinar si se debe enviar un mensaje proactivo. No genera respuesta para el usuario — retorna un análisis interno. Útil para automatizaciones y reportes.
Identificador del modelo
Identificador del cliente a analizar
Idioma: "es" o "en" (default: "es")
Temperatura OpenAI entre 0.0 y 2.0 (default: 0.7)
Zona horaria (default: "America/Panama")
Modelo principal para el análisis (default: GPT-5.4)
Modelo para operaciones rápidas (default: GPT-5.4 mini)
Configura la conexión MySQL para el servicio Text-to-SQL conversacional. No requiere archivos ni FAISS — solo guarda la configuración de base de datos y las reglas de negocio opcionales.
b_template usa GPT-5.4 mini para mayor velocidad.Identificador del modelo
Configuración MySQL: host, username, password, database, port (default 3306), allowed_tables (ver docs)
Reglas de negocio para generación de SQL (ej: "La tabla clientes usa el campo id_cliente como PK")
Chatbot Text-to-SQL puro — convierte lenguaje natural en consultas SELECT y devuelve los datos con una respuesta conversacional. Mantiene historial multi-turno por session_id. No usa FAISS ni vectorstore. Requiere haber configurado la BD con sql_config previamente.
Solo consultas SELECT. INSERT / UPDATE / DELETE son bloqueados por seguridad.
Pregunta en lenguaje natural sobre los datos
Identificador del modelo (debe tener BD configurada con sql_config)
ID de sesión para mantener contexto entre turnos (ej: ID de usuario o conversación)
Idioma de la respuesta: "es" o "en" (default: "es")
Modelo para SQL (default: GPT-5.4 mini)
Modelo mini (default: GPT-5.4 mini)
Elimina el historial de una sesión de /v1/sql_chat. Útil para iniciar una conversación desde cero sin contexto previo.
Identificador del modelo
ID de sesión a eliminar
Carga documentos y configuraciones para el chatbot. Al menos un campo es obligatorio (archivo, templates, configuración de BD o APIs).
b_template al idioma secundario usa GPT-5.4 mini para mayor velocidad y menor costo.Identificador del modelo
Archivos (pdf, docx, txt, csv, json, md, html, xml, xlsx)
Contexto del negocio (Template A)
Instrucciones del chatbot (Template B). Se traduce automáticamente al idioma secundario.
Configuración MySQL (ver docs)
Configuración de APIs externas (ver docs)
API key de OpenAI específica para este suffix
Si true, elimina el contenido previo antes de cargar (default: false)
Genera texto con OpenAI GPT-4o a partir de un prompt libre. Sin historial ni RAG.
Texto de entrada para el modelo
Traduce texto entre idiomas usando GPT-4o.
Texto a traducir
Idioma destino (ej: "en", "es", "fr")
Detecta el idioma de un texto usando OpenAI.
Texto cuyo idioma se quiere detectar
Genera automáticamente reglas de negocio (b_template) para SQL Chat a partir del esquema de la base de datos conectada.
Identificador del modelo (debe tener BD configurada)
Endpoints que invocan modelos corriendo localmente via Ollama. Sin costos por token, sin enviar datos a OpenAI. Modelo default: phi4-mini:latest (configurable via OLLAMA_DEFAULT_MODEL). Otros modelos probados: phi4:latest, qwen3.5:9b, qwen2.5-coder:7b, deepseek-coder:6.7b, llama3:8b.
Verifica si el servidor Ollama local esta corriendo. No requiere token.
Lista todos los modelos que Ollama tiene descargados localmente (los que salieron en ollama list).
Conversacion multi-turno con un modelo Ollama. Acepta el parametro model para elegir uno especifico (default phi4-mini:latest).
Generacion single-shot con un prompt simple (sin historial). Util para OCR, resumen, o extraccion puntual.
Envia los logs de las ultimas N horas al modelo y devuelve un analisis estructurado: errores frecuentes, causas probables, acciones recomendadas. Util para operacion autonoma del servidor.
Sube un PDF/txt/md y lo procesa con el modelo local: extraccion, resumen, QA. Job async con webhook de progreso.
Toma archivos y los vectoriza en un store FAISS local con embeddings del modelo elegido. Ideal para construir bases de conocimiento privadas sin enviar datos a OpenAI.
| Modelo | Tamano | Caso de uso recomendado |
|---|---|---|
phi4-mini:latest | ~2.5 GB | Default. Clasificacion, mantenimiento, Q&A ligero |
phi4:latest | 9.1 GB | Phi-4 full, mejor razonamiento |
qwen3.5:9b-q4_K_M | 6.6 GB | Multilingue rapido, buena calidad general |
qwen2.5:7b | 4.7 GB | Generico balanceado |
qwen2.5-coder:7b | 4.7 GB | Sugerir fixes de codigo, SQL |
deepseek-coder:6.7b | 3.8 GB | Code review, refactoring |
llama3:8b | 4.7 GB | Chat conversacional general |
nomic-embed-text | ~0.3 GB | Embeddings para RAG/vectorizacion |
Catalogo completo de modelos GPT que el sistema puede invocar. Cada version de la API (/v1/ y /v2/) tiene un modelo por defecto, pero cualquier modelo de la lista puede inyectarse por parametro sin tocar el codigo.
| Modelo | Variable en config.py |
Default para | Temperatura |
|---|---|---|---|
gpt-4o | OPENAI_MODEL (env-override) | v1 principal (chatbot, chatbotdb, sql_chat, analyze_conversation) | 0-2 libre |
gpt-4o-mini | OPENAI_MODEL_MINI | v1 mini (sql_chat, deteccion de idioma, query classifier) | 0-2 libre |
gpt-5 | OPENAI_MODEL_GPT5 | v2 alternativo (no es default) | solo 1 |
gpt-5.1 | OPENAI_MODEL_GPT5_1 | v2 alternativo (no es default) | solo 1 |
gpt-5.4 | OPENAI_MODEL_GPT5_4 | v2 principal (chatbot, chatbotdb, analyze_conversation) | solo 1 |
gpt-5-mini | OPENAI_MODEL_GPT5_MINI | v2 alternativo mini (no default) | solo 1 |
gpt-5.4-mini | OPENAI_MODEL_GPT5_4_MINI | v2 mini (sql_chat, traduccion de templates, operaciones rapidas) | solo 1 |
El modelo principal de v1 es el unico que se puede sobreescribir via variable de entorno (no requiere recompilar).
Reiniciar el servicio despues de cambiar el .env.
/v2/)Los endpoints v2 aceptan model y model_mini como parametros form-data para usar un modelo distinto en una llamada especifica sin cambiar el default del sistema.
Nota: los modelos GPT-5.x imponen temperature=1. El servicio detecta esto automaticamente y ajusta la temperatura.
| Endpoint | v1 default | v2 principal | v2 mini |
|---|---|---|---|
chatbot | gpt-4o | gpt-5.4 | gpt-5.4-mini |
chatbotdb | gpt-4o | gpt-5.4 | gpt-5.4-mini |
analyze_conversation | gpt-4o | gpt-5.4 | gpt-5.4-mini |
sql_chat | gpt-4o-mini | gpt-5.4-mini | gpt-5.4-mini |
sql_generate_template | gpt-4o-mini | gpt-5.4-mini | gpt-5.4-mini |
generate_text / translate_text / detect_language | gpt-4o | - | - |
Detecta el tipo de documento electronico segun el catalogo oficial de la Direccion General de Ingresos (Ficha Tecnica v1.00, campo B06). Reconoce 9 tipos: 01 Factura Op. Interna, 02 Importacion, 03 Exportacion, 04 NC referente a FE, 05 ND referente a FE, 06 NC Generica, 07 ND Generica, 08 Zona Franca, 09 Reembolso. Estrategia: CUFE (mas confiable), regex, Phi-4 mini como ultimo fallback.
Devuelve el catalogo completo de tipos DGI (codigo, nombre en espanol/ingles y categoria).
Clasifica el texto en el momento. Regex primero (~1ms); si no hay match fuerte, llama a Phi-4 mini (puede tardar 5-60s). Ideal para integraciones pequenas o cuando el caller puede esperar.
Texto del documento (CAFE, factura impresa, JSON equivalente, etc.)
Modelo Ollama a usar como fallback. Default: phi4-mini:latest
Si true y regex no alcanza umbral, consulta Phi-4. Default: true
Encola el job, responde 202 inmediatamente con el job_id, y dispara el webhook cuando Phi-4 termina. Evita que el request HTTP se cuelgue esperando al LLM.
Texto a clasificar
Contexto del chatbot, viajara en el webhook payload
Contexto del cliente, viajara en el webhook payload
Consulta el estado de un job async. Alternativa al webhook para quien no quiera exponer endpoint HTTP.
Lista los jobs persistidos. Query params: status (pending/running/completed/failed), limit (default 50).
document_classification_started, document_classification_completed, document_classification_failed.POST /v1/documents/classify/async. Recibiras un job_id en milisegundos.document_classification_completed con data.result.code (codigo oficial DGI 01-09) listo para enrutar por categoria.document_classification_failed con el error original en data.error.Sistema de notificaciones HTTP en tiempo real. WeirdBot dispara un POST a tu URL cuando ocurren eventos importantes.
Suscribe una URL a uno o varios eventos. Cada vez que el evento ocurra, WeirdBot enviará un POST con el payload del evento. Reintentos automáticos: hasta 3 intentos con timeout de 10 segundos.
| Evento | Cuándo se dispara |
|---|---|
lead_created | Después de POST exitoso a API externa |
lead_updated | Después de PUT/PATCH exitoso a API externa |
lead_deleted | Después de DELETE exitoso a API externa |
lead_confirmed | Cuando el usuario confirma los datos capturados |
lead_queried | Después de GET exitoso a API externa |
| Evento | Cuándo se dispara |
|---|---|
model_config_started | Al iniciar proceso en /v1/add_data, /v1/sql_config, /v1/sql_generate_template o /v2/generate_chatbot_template. En el caso de generate_chatbot_template incluye job_id en el payload. |
model_config_completed | Al finalizar exitosamente la configuracion del modelo. En /v2/generate_chatbot_template se dispara desde el background job (puede tardar 30-90s) e incluye job_id, flow_type y table_names en el payload. El template completo se obtiene via GET /v2/generate_chatbot_template/status?job_id=... |
model_config_translation_completed | Al finalizar la traduccion automatica del b_template en background. Incluye target_language y translated_chars en el payload |
model_config_error | Cuando ocurre una excepcion durante la configuracion. En /v2/generate_chatbot_template se dispara desde el background job e incluye job_id en el payload. |
| Evento | Cuándo se dispara |
|---|---|
limit_exceeded | Cuando se supera el límite diario configurado |
error_429 | Cuando OpenAI retorna rate limit (quota excedida) |
error_general | Error general no específico durante el procesamiento |
daily_report | Reporte diario de uso (manual o programado) |
proactive_message | Seguimiento proactivo recomendado por IA. Se dispara desde scripts/proactive_followup.py (cron) cuando GPT detecta que se debe enviar un mensaje al cliente (registro incompleto, conversacion abandonada, cita pendiente, etc.). Payload incluye suggested_message, message_type, urgency, recommended_timing e idle_minutes. |
Emitidos por POST /v1/documents/classify/async. El catalogo oficial usa el codigo B06 del CUFE (Ficha Tecnica DGI v1.00, tipos 01-09).
| Evento | Cuando se dispara |
|---|---|
document_classification_started | Al encolar el job en POST /v1/documents/classify/async. Payload incluye job_id, model y text_chars. |
document_classification_completed | Cuando Phi-4 termina y devuelve el doc_type. data.result.code trae el codigo oficial DGI ("01"-"09") y data.result.method indica si la deteccion vino del CUFE, regex o LLM. |
document_classification_failed | Cuando Phi-4 lanza excepcion (Ollama caido, timeout, etc.). data.error contiene el mensaje original. |
El archivo apis_config.json define la estructura de datos y comportamiento de cada API integrada. Se almacena en resources/vectorstore/{suffix}/apis_config.json
| Propiedad | Descripción | Ejemplo |
|---|---|---|
type |
Tipo de dato del campo. Soporta: string, number, date, boolean, array, object | "string" o "array" |
required |
Si true, el campo es obligatorio y la validación fallará si no está presente |
true |
auto_generated |
Si true, el campo es generado automáticamente por GPT-4o/GPT-5.4 basado en b_template (instrucciones). Ejemplos: InvoiceNumber, timestamps, IDs únicos. OpenAI extrae ejemplos de formato de las instrucciones. |
true |
calculated_from |
Array de nombres de campos usados para calcular este campo. Se resuelven mediante fuzzy matching (tolerante a variaciones de nombre) | ["Quantity", "Unit_Price"] |
calculation_formula |
Fórmula Python para calcular el valor. Solo se ejecuta si calculated_from está definido. Variables disponibles: campo = valor mapeado. Ejemplo: Quantity * Unit_Price |
"Quantity * Unit_Price" |
Los campos calculados se regeneran automáticamente cuando se actualizan sus dependencias. Útil para recalcular subtotales, impuestos, totales cuando los items cambian.
calculation_formula con contexto de variables disponiblesInvoiceNumber auto (FAC-fecha-seq), Subtotal, Tax, Total con recálculo automático
PO_Number, Quantity * Unit_Cost por línea, Total con impuestos
IDs automáticos, dates, totalizaciones complejas de múltiples fuentes
⚠️ Nota Importante: Las fórmulas de cálculo se extraen del formato de instrucciones (b_template). El sistema es 100% instruction-driven: no hay hardcoding de formatos. Si cambias el formato en las instrucciones, OpenAI automáticamente lo seguirá en próximas generaciones.
Búsqueda semántica en documentos estáticos con embeddings de OpenAI
Text-to-SQL con GPT-4o / GPT-5.4 para consultas MySQL en tiempo real
Sistema genérico para llamadas automáticas a APIs externas
v1: gpt-4o + gpt-4o-mini. v2: gpt-5.4 + gpt-5.4-mini con selección dinámica por endpoint y override por request.
Detecta tipo de documento electronico DGI (codigo B06 del CUFE: 01-09). Regex primero; Phi-4 mini local como fallback. Modo async con webhook al terminar.
Endpoints /ollama/* para invocar modelos locales sin costo por token. Default phi4-mini:latest. Soporta mantenimiento autonomo, soporte al developer, procesamiento de documentos y el clasificador DGI.