Manual de usuario · Inteligencia artificial en Odoo
Asistente de Inteligencia Artificial para Odoo 19
Cómo configurar y usar el módulo MRDC AI Base: agentes conectados a OpenAI, Google Gemini y Anthropic que consultan y modifican los datos de Odoo con herramientas, generan reportes y documentos, envían correos, ejecutan tareas programadas y misiones autónomas, aprenden de una base de conocimiento y se mantienen bajo gobernanza y presupuesto.
1.Cómo usar este manual
Una guía completa para quien va a configurar el asistente, para quien lo va a usar a diario y para quien tiene que responder por lo que la inteligencia artificial hace dentro del ERP.
Este manual documenta el módulo MRDC AI Base (mrdc_ai_base), que integra
modelos de lenguaje de OpenAI, Google, Anthropic y otros proveedores dentro de Odoo 19. No es un
chat decorativo: el asistente tiene herramientas con las que lee y escribe datos reales de
la base de datos, genera reportes y archivos, envía correos, programa trabajos recurrentes y
ejecuta misiones largas de varios pasos. Por eso el manual le dedica el mismo espacio a lo que el
asistente puede hacer que a cómo se limita, se aprueba y se mide lo que hace.
Está escrito para tres lectores distintos:
- El administrador de Odoo, que instala el módulo, registra las claves de los proveedores, crea los agentes y define la gobernanza y los presupuestos (capítulos 3 a 9, 33 a 36).
- El usuario de negocio —gerencia, ventas, contabilidad, compras—, que conversa con sus datos, pide reportes, crea registros desde el chat y recibe los correos automáticos (capítulos 10 a 20 y 26 a 31).
- El responsable de mejorar al asistente, que cura las pistas de modelo, las recetas, la memoria y la base de conocimiento para que las respuestas sean exactas y baratas (capítulos 21 a 25 y 37 a 39).
Todas las capturas provienen de un ambiente de demostración real —la empresa ficticia
Distribuidora El Quetzal, S.A., con ventas, compras, inventario, CRM y contabilidad de
2026— y todas las respuestas del asistente que aparecen son respuestas reales del modelo
configurado (GPT-5.4 de OpenAI para el agente principal), obtenidas con las herramientas del
módulo sobre esos datos. Los nombres técnicos de campos, herramientas y modelos aparecen en
este formato.
search_records, send_email, render_report…); «una
tarea» es un trabajo que el agente ejecuta solo, según un horario o un evento; y «una
misión» es un objetivo grande que el agente planifica y ejecuta paso a paso.
Qué encontrará en cada bloque
Puesta en marcha
Instalación, claves de proveedores, ajustes generales, modelos disponibles y la configuración de los agentes (capítulos 3 a 9).
Uso diario
El panel de chat, las consultas en lenguaje natural, reportes, documentos, registros, correos, navegación y la consulta rápida (capítulos 10 a 20).
Inteligencia curada
Pistas de modelo, recetas, memoria, base de conocimiento y el Centro de hallazgos (capítulos 21 a 25).
Automatización
Tareas programadas, aprobaciones, tareas por evento, KPIs, el caso práctico del reporte semanal y las misiones (capítulos 26 a 32).
Control
Seguridad, costos, automatizaciones internas, resolución de problemas, buenas prácticas y la referencia de herramientas (capítulos 33 a 39).
2.Qué es MRDC AI Base y cómo funciona
Un modelo de lenguaje no sabe nada de su empresa. El módulo le presta ojos y manos dentro de Odoo —con permisos, límites y registro de todo lo que hace.
Un modelo de lenguaje (GPT, Gemini, Claude…) solo sabe conversar. Lo que convierte esa conversación en trabajo útil dentro del ERP es el ciclo de herramientas: el usuario pide algo, el modelo decide qué herramienta necesita, el módulo la ejecuta dentro de Odoo con los permisos del usuario que pregunta, le devuelve el resultado al modelo, y así hasta que el modelo tiene lo suficiente para responder. Una pregunta como «¿cuánto vendimos en julio y a quién?» termina en tres o cuatro llamadas: una para recuperar una receta validada de ventas por período, otra para agrupar pedidos por cliente, y la respuesta final con los números reales y la explicación de cómo se obtuvieron.
Las piezas, en una frase cada una
| Pieza | Qué es | Dónde se administra |
|---|---|---|
| Agente | La personalidad y los permisos de la IA: modelo, prompt del sistema, estilo, capacidades habilitadas, modelos de respaldo, presupuesto y gobernanza. Vienen tres de fábrica: MRDC Assistant, Ask AI y Report Generator. | MRDC AI → Configuración → Agentes de IA |
| Herramienta | Una función concreta que el agente puede invocar: buscar registros, agrupar, crear, actualizar, generar un reporte, enviar un correo… Se habilitan por bloques con las casillas de capacidades del agente. | Capacidades del agente (capítulo 7) y referencia (capítulo 39) |
| Conversación | El hilo entre un usuario y un agente, con sus mensajes, adjuntos, llamadas a herramientas, tokens, costo y retroalimentación. | Panel de chat · MRDC AI → Historial |
| Tarea programada | Un trabajo que el agente ejecuta sin nadie delante: cada N horas/días/semanas/meses o cuando ocurre un evento sobre un modelo. Puede ejecutarse en modo autónomo o dejar sus escrituras y correos en una cola de aprobación. | MRDC AI → Tareas programadas · Acciones pendientes |
| Misión | Un objetivo grande que el agente descompone en un plan de pasos, ejecuta paso a paso con reintentos y notas de trabajo, y cuyas escrituras pueden requerir aprobación. | MRDC AI → Misiones |
| Pista de modelo | Conocimiento curado sobre un modelo de Odoo: qué campos importan, cuáles no están almacenados, qué trampas hay (IVA incluido, fechas en UTC…). | Configuración → Pistas de modelo |
| Receta | Una consulta SQL u ORM parametrizada, probada y validada por una persona, que el agente prefiere sobre consultas improvisadas. | Configuración → Recetas |
| Memoria | Hechos duraderos por usuario, por agente o por conversación: preferencias, decisiones, mapeos. También la memoria y los KPIs de cada tarea. | Configuración → Memorias · pestaña Memoria de la tarea |
| Base de conocimiento | Textos, adjuntos (PDF, Word, Excel) y registros de Odoo indexados con embeddings para que el agente cite políticas y procedimientos reales. | MRDC AI → Base de conocimiento |
| Hallazgo | Una anomalía, riesgo u oportunidad que el agente detecta y registra con números, responsable y fecha límite. | MRDC AI → Centro de hallazgos |
| Precio de modelo | Costo por millón de tokens de entrada y salida de cada modelo; con él se calcula el costo de cada mensaje, ejecución y paso, y se vigilan los presupuestos. | Configuración → Precios de modelos |
El menú de la aplicación
Al instalar el módulo aparece la aplicación MRDC AI con los menús de la figura siguiente. El orden refleja el uso: lo conversacional primero (Chat de IA, Consulta rápida), después la automatización (Misiones, Tareas programadas, Acciones pendientes), el Historial, los dos repositorios de inteligencia (Centro de hallazgos, Base de conocimiento) y, al final, la Configuración.
3.Instalación y requisitos
El módulo se instala como cualquier otro de Odoo 19; lo que hay que preparar antes son las claves de los proveedores y, si se quieren todas las funciones, tres paquetes de Python.
Requisitos
| Requisito | Detalle |
|---|---|
| Odoo 19 (Community o Enterprise) | El módulo depende de base, web, mail y bus (notificaciones en tiempo real). Funciona en cualquier base con esas aplicaciones; aprovecha Ventas, Contabilidad, Inventario, CRM, etc. si están instaladas, pero no las exige. |
| Al menos una clave de proveedor | Una clave de API de OpenAI, Google Gemini o Anthropic (o de DeepSeek, xAI, Groq, Kimi, Perplexity) o un servidor Ollama local. Sin clave el módulo se instala, pero el agente responde con un error al primer mensaje. |
| Salida a internet desde el servidor | Las llamadas a los proveedores salen del servidor de Odoo (no del navegador) hacia api.openai.com, generativelanguage.googleapis.com, api.anthropic.com, etc. Si hay proxy o cortafuegos, hay que permitir esos destinos. |
| wkhtmltopdf | El mismo que usa Odoo para sus reportes PDF. Lo necesita la herramienta render_report para producir reportes oficiales en PDF (capítulo 13). |
| Paquetes de Python opcionales | pypdf (indexar PDF en la base de conocimiento), openpyxl (leer Excel) y python-docx (leer Word). Sin ellos el módulo funciona y solo esas indexaciones quedan en estado de error con un mensaje claro. Se instalan con pip install pypdf openpyxl python-docx en el entorno de Odoo. |
| Micrófono y HTTPS (opcional) | Para dictar por voz desde el panel, el navegador exige un origen seguro (HTTPS o localhost). La transcripción usa la API de audio del proveedor de OpenAI. |
Instalación
- Copie la carpeta
mrdc_ai_basea una ruta incluida en eladdons_pathdel servidor y reinicie Odoo (o actualice la lista de aplicaciones en modo desarrollador). - En Aplicaciones, busque MRDC - AI Base e instálelo. La instalación crea la aplicación MRDC AI, los tres agentes de fábrica, los temas, las pistas de modelo, las recetas de ventas y cobranza, la tabla de precios de modelos y tres acciones planificadas (capítulo 36).
- Vaya a Ajustes → MRDC AI, pegue la clave del proveedor que va a usar y guarde (capítulo 4).
- Abra MRDC AI → Configuración → Agentes de IA, elija el modelo de cada agente (el valor de fábrica es
gemini-2.5-flash; cámbielo a un modelo del proveedor cuya clave registró) y active las capacidades que necesite (capítulos 6 y 7). - Pulse el icono de la varita mágica en la barra superior y escriba su primera pregunta.
Actualizar a una versión nueva
Reemplace la carpeta y actualice el módulo (Aplicaciones → MRDC - AI Base → Actualizar,
o -u mrdc_ai_base desde la línea de comandos). Los datos marcados como
noupdate —los agentes, las pistas y las recetas de fábrica que usted haya modificado— se
respetan. Las nuevas funciones suelen añadir campos a los agentes (por ejemplo los modelos de
respaldo o los reportes permitidos); tras actualizar conviene revisar el formulario de cada agente
y activar lo que corresponda.
4.Configuración general: Ajustes → MRDC AI
Una sola pantalla concentra las claves de los proveedores, el agente por defecto, el modelo de embeddings, el presupuesto global y los límites de seguridad del ciclo de herramientas.
Vaya a Ajustes → MRDC AI. La sección está dividida en tres bloques: Proveedores, Valores predeterminados y Avanzado.
Proveedores
| Campo | Qué poner | Parámetro del sistema |
|---|---|---|
| Google Gemini | Clave de API de Google AI Studio. | mrdc_ai.gemini_api_key |
| OpenAI | Clave sk-… de la plataforma de OpenAI. También se usa para embeddings, imágenes y transcripción de voz. | mrdc_ai.openai_api_key |
| Anthropic | Clave de la consola de Anthropic (modelos Claude). | mrdc_ai.anthropic_api_key |
| DeepSeek · Kimi (Moonshot AI) · xAI (Grok) · Perplexity · Groq | Claves de esos proveedores; todos exponen una API compatible con la de OpenAI. | mrdc_ai.deepseek_api_key, …kimi…, …xai…, …perplexity…, …groq… |
| Ollama | URL base de un servidor Ollama propio (por ejemplo http://localhost:11434) para correr modelos abiertos sin salir de la red. | mrdc_ai.ollama_base_url |
Valores predeterminados
- Agente de IA predeterminado (
mrdc_ai.default_agent_id): el agente que se selecciona al abrir el panel de chat por primera vez. Si no se define, se usa el primero por secuencia (de fábrica, MRDC Assistant). - Embeddings de la base de conocimiento (
mrdc_ai.embedding_model): modelo que convierte los textos indexados en vectores. Las opciones sontext-embedding-3-smallytext-embedding-3-largede OpenAI ytext-embedding-004de Gemini. Si lo cambia, reindexe las fuentes (capítulo 24), porque los vectores de modelos distintos no son comparables. - Presupuesto mensual de IA (
mrdc_ai.monthly_budget_usd): tope global en dólares para todos los agentes, conversaciones, tareas y misiones del mes. Cuando se alcanza, cualquier llamada nueva se rechaza con un mensaje claro. 0 = sin tope (capítulo 35). - Calidad de generación de imágenes (
mrdc_ai.image_model_quality): calidad que usagenerate_image/generate_and_set_image.
Avanzado: los frenos del ciclo de herramientas
- Máximo de iteraciones de herramientas (
mrdc_ai.max_successive_calls): cuántas rondas «modelo pide herramienta → Odoo responde» se permiten por mensaje. Evita bucles en los que el modelo insiste en una consulta que falla. El valor del agente (Máx. iteraciones de herramientas, capítulo 8) tiene prioridad si está definido. - Máximo de herramientas por iteración (
mrdc_ai.max_tool_calls_per_call): cuántas herramientas puede pedir el modelo en una sola ronda. - Tiempo de espera de la petición (
mrdc_ai.request_timeout): segundos máximos por llamada al proveedor. Las llamadas que fallan con errores transitorios (429, 5xx) se reintentan con espera creciente hastamrdc_ai.max_retriesveces (3 por defecto).
mrdc_ai.mission_steps_per_cycle (pasos de misión por ciclo del cron, 3),
mrdc_ai.max_retries (reintentos por llamada, 3). Los demás comportamientos se
configuran en el propio agente.
5.Proveedores y modelos soportados
Nueve proveedores y unos sesenta modelos, seleccionables por agente. Lo que cambia entre ellos es el precio, la calidad del razonamiento con herramientas y si aceptan o no el parámetro de temperatura.
El desplegable Modelo del agente lista todos los modelos conocidos por el módulo, agrupados por proveedor. Cualquiera puede seleccionarse; solo funcionará si la clave del proveedor correspondiente está registrada en Ajustes. Esta es la familia soportada en la versión documentada:
| Proveedor | Modelos | Notas |
|---|---|---|
| OpenAI | gpt-5.4, gpt-5.4-mini, gpt-5.1, gpt-5.1-mini, gpt-5.1-nano, gpt-5, gpt-5-mini, o3, o3-mini, o4-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, gpt-4o, gpt-4o-mini | El mejor equilibrio calidad/herramientas en las pruebas de este manual es gpt-5.4 como principal y gpt-4.1-mini como rápido/de respaldo. La misma clave sirve para embeddings, imágenes y transcripción de voz. |
| Google Gemini | gemini-3.1-pro-preview, gemini-3-flash-preview, gemini-3.1-flash-lite-preview, gemini-2.5-pro, gemini-2.5-flash, gemini-2.0-flash, gemini-2.0-flash-lite, gemini-1.5-pro, gemini-1.5-flash, gemini-1.5-flash-8b | Los agentes de fábrica vienen con gemini-2.5-flash, muy económico. Embeddings con text-embedding-004. |
| Anthropic | claude-opus-4-6, claude-sonnet-4-6, claude-sonnet-4-5, claude-haiku-4-5, claude-3-5-sonnet, claude-3-5-haiku | Excelentes siguiendo instrucciones largas (tareas programadas con muchas reglas). |
| DeepSeek | deepseek-chat, deepseek-reasoner | API compatible con OpenAI; muy bajo costo. |
| xAI | Familia grok-4 y grok-3 (5 modelos) | API compatible con OpenAI. |
| Groq | 6 modelos abiertos (Llama, Mixtral, Gemma…) servidos a gran velocidad | Útiles como modelo rápido para resúmenes. |
| Kimi (Moonshot AI) | 4 modelos | API compatible con OpenAI. |
| Perplexity | Familia sonar (5 modelos, incluidos los de razonamiento e investigación) | Orientados a búsqueda; los de razonamiento no aceptan temperatura. |
| Ollama | 7 modelos abiertos locales (Llama 3, Qwen, Mistral…) | Todo ocurre dentro de su red: ideal cuando los datos no pueden salir, a cambio de menos capacidad con herramientas. |
Temperatura y modelos de razonamiento
El estilo de respuesta del agente (capítulo 6) se traduce en un valor de temperatura.
Algunos modelos de razonamiento —gpt-5, gpt-5-mini, o1,
o3, o4-mini, deepseek-reasoner, los sonar de
razonamiento— rechazan ese parámetro. El módulo lo sabe y simplemente no lo envía para
ellos, de modo que puede cambiar de modelo sin tocar nada más.
Precios de modelos
En Configuración → Precios de modelos está la tabla de costo por millón de tokens de entrada y de salida de cada modelo (27 precios de fábrica, editables). Con ella el módulo calcula el costo en dólares de cada mensaje, de cada ejecución de tarea y de cada paso de misión, y controla los presupuestos. Si un modelo no tiene precio, su costo se registra como cero: añada una fila si incorpora un modelo nuevo.
6.Los agentes: crear y configurar
Un agente es una configuración completa de la IA: el modelo que piensa, las instrucciones que lo gobiernan, las capacidades que tiene y los límites que no puede cruzar. Puede haber tantos como roles necesite la empresa.
Vaya a MRDC AI → Configuración → Agentes de IA. La vista kanban muestra los agentes con su avatar, descripción y modelo; de fábrica existen tres, todos marcados como agentes del sistema (no se pueden borrar, sí modificar o archivar):
- MRDC Assistant: asistente general; consulta, analiza, navega y genera reportes. Es el candidato natural a agente predeterminado y el que más capacidades recibe.
- Ask AI: especialista en consultas en lenguaje natural; descubre modelos y campos y responde con datos, conciso y tabular.
- Report Generator: especialista en reportes de negocio con análisis y recomendaciones.
El formulario del agente
El formulario tiene cinco grupos en la cabecera y un cuaderno con dos pestañas. Los grupos Enrutamiento de modelos, Costo y presupuesto y Gobernanza se explican en los capítulos 8 y 9; aquí van los dos primeros.
Configuración de IA
| Campo | Significado |
|---|---|
| Nombre y Descripción | Como se muestran en el selector del panel de chat. La descripción (subtítulo) ayuda al usuario a elegir el agente correcto. |
| Avatar | Imagen que acompaña a los mensajes del agente en el chat. |
| Modelo | El modelo principal del proveedor (capítulo 5). |
| Estilo de respuesta | Analítico (preciso), Equilibrado o Creativo. Se traduce en la temperatura que se envía al modelo (baja, media, alta); en los modelos que no aceptan temperatura no tiene efecto. |
| Límite de historial | Cuántos mensajes anteriores de la conversación se envían al modelo en cada turno. Lo anterior a ese límite no se pierde: se condensa en un resumen automático que el agente recibe como contexto (capítulo 20). |
| Agente del sistema | Marca los agentes de fábrica; impide borrarlos. |
| Activo y Secuencia | Archivar un agente lo oculta del selector sin perder sus conversaciones ni sus tareas (las tareas de un agente archivado no se ejecutan y lo dicen en su ejecución). La secuencia ordena el selector. |
Capacidades
Siete casillas que habilitan bloques de herramientas. Se detallan en el capítulo 7; la regla general es dar a cada agente solo lo que su función exige.
La pestaña Prompt del sistema
Es la instrucción base que define la personalidad, el método de trabajo y los límites del agente. El módulo la completa automáticamente en cada petición con secciones que usted no tiene que escribir: la fecha y hora actuales en UTC, el usuario y la compañía, la memoria confirmada, el resumen de la conversación, el conocimiento curado disponible (pistas y recetas), las reglas de escritura cuando las escrituras están habilitadas, las pautas de las respuestas rápidas y, si el usuario está mirando un registro, el contexto de ese registro.
La pestaña Temas y herramientas
Los temas (capítulo 33) agrupan instrucciones especializadas —consultas en lenguaje natural, generación de reportes, navegación— que se añaden al agente. Los tres agentes de fábrica ya tienen los suyos; al crear un agente nuevo puede arrastrar los que correspondan.
Crear un agente nuevo
- En Agentes de IA pulse Nuevo, póngale nombre, descripción y avatar.
- Elija el modelo principal y, en Enrutamiento de modelos, un modelo rápido y uno de respaldo (capítulo 8).
- Escriba el prompt del sistema: rol, tono, formato y reglas del negocio.
- Marque las capacidades mínimas. Para un agente de solo consulta: Herramientas de Odoo y Generación de reportes.
- En Gobernanza, restrinja los modelos (
sale.*, account.move, res.partner) y los dominios de correo si el agente va a enviar correos (capítulo 9). - Defina un presupuesto mensual y guarde. El agente aparece de inmediato en el selector del panel de chat.
7.Capacidades: qué puede hacer cada agente
Siete casillas deciden qué herramientas recibe el modelo. Cada una abre un bloque concreto; lo que no está marcado ni siquiera se le describe al modelo, así que no puede pedirlo.
| Capacidad | Herramientas que habilita | Recomendación |
|---|---|---|
Habilitar herramientas de Odooenable_odoo_tools | Lectura y descubrimiento: get_available_models, get_fields, search_records, read_group, count_records, get_menus, get_record_link; conocimiento: get_model_hint, list_recipes, run_recipe, search_knowledge (si hay fuentes indexadas), create_insight; memoria: remember_fact, forget_fact; automatización: schedule_ai_task, list_ai_tasks, update_ai_task, start_ai_mission, list_ai_missions. | La base de todo. Sin ella el agente es un chat sin acceso a datos. |
Generación de reportesenable_report_generation | generate_report (tabla HTML desde una agrupación), generate_chart (gráfica interactiva), generate_document (PDF, XLSX, CSV, TXT, HTML descargables), generate_image (imagen por IA), list_reports y render_report (reportes oficiales de Odoo en PDF, XLSX o HTML). | Activar en los agentes que entregan salidas a personas. |
Operaciones de escrituraenable_write_operations | create_record, update_record, update_field, get_record_actions, execute_action (botones de la vista, p. ej. confirmar un pedido), generate_and_set_image. Añade al prompt las reglas de cómo crear registros correctamente (consultar campos requeridos, líneas de documentos, verificación posterior). | Solo en agentes de usuarios que ya tienen permiso de escribir en Odoo; combinar con Gobernanza (modelos permitidos, límite de registros). |
Notificacionesenable_notifications | send_notification (mensaje en la bandeja de Odoo) y send_system_notification (aviso emergente en tiempo real en la sesión del destinatario). | Útil para tareas programadas que avisan a personas. |
Enviar correoenable_send_email | send_email con asunto, cuerpo HTML y adjuntos generados (documentos, reportes oficiales). | Limitar los dominios de destino en Gobernanza. |
SQL de solo lecturaenable_sql_queries | run_sql_query: consultas SELECT/WITH directas sobre PostgreSQL dentro de una transacción de solo lectura (capítulo 16). | Para analistas. Acelera agregaciones complejas, pero no pasa por las reglas de registro de Odoo: combinar con la lista de modelos permitidos. |
Métodos y acciones de servidorenable_method_calls | get_model_methods, call_method (cualquier método público de un modelo, con argumentos), list_server_actions, run_server_action. | El mayor alcance. Solo para administradores o procesos muy acotados con Métodos permitidos y Acciones de servidor permitidas. |
Cómo se combinan con las tareas y las misiones
Las capacidades del agente son el techo. Cada tarea programada y cada misión tiene además sus propios permisos (Permitir operaciones de escritura, Permitir enviar correo, Permitir notificaciones) que solo pueden restringir: una tarea no puede escribir si su agente no tiene escrituras, aunque la casilla de la tarea esté marcada. Además, las tareas en modo aprobación y las misiones con aprobación de escrituras no ejecutan las herramientas de escritura ni el correo: las encolan como acciones pendientes (capítulo 28).
schedule_ai_task,
update_ai_task, start_ai_mission, remember_fact y
similares: un trabajo automático no puede crear más trabajos automáticos ni reescribir la
memoria del usuario. Las tareas tienen en su lugar su propia memoria (remember,
forget, save_kpis, capítulo 30).
8.Enrutamiento de modelos, costo y presupuesto del agente
Tres modelos por agente —principal, rápido y de respaldo—, un modo de selección de herramientas que ahorra tokens y un presupuesto mensual que frena el gasto antes de que duela.
Enrutamiento de modelos
| Campo | Qué hace |
|---|---|
| Modelo rápido | Modelo barato para trabajo auxiliar: el resumen automático de la conversación (cada 10 mensajes el módulo condensa lo anterior para no reenviar todo el historial) y otras tareas de apoyo. Si se deja vacío se usa el principal. |
| Modelo de respaldo | Modelo que se usa automáticamente cuando el principal falla por una causa del proveedor: límite de velocidad (429), error 5xx, sobrecarga, tiempo de espera agotado. El módulo registra en el log «gpt-5.4 failed …; falling back to gemini-2.5-flash» y el mensaje, ejecución o paso queda marcado con el modelo realmente usado, y su costo se calcula con el precio de ese modelo. |
| Selección de herramientas | Enviar todas las herramientas en cada petición (por defecto) o Herramientas básicas + grupos bajo demanda. En el segundo modo el modelo recibe solo el núcleo de lectura y una meta-herramienta enable_tools(grupo) con la que pide los grupos write, reports, communication o automation cuando los necesita. Ahorra miles de tokens por mensaje en agentes con muchas herramientas, a cambio de una ronda extra cuando el modelo decide que necesita escribir o enviar. |
Costo y presupuesto
- Presupuesto mensual (USD): gasto estimado permitido para este agente en el mes calendario, sumando conversaciones, ejecuciones de tareas y pasos de misión. Al llegar al 80 % el módulo notifica una sola vez al usuario y al administrador; al 100 % rechaza las llamadas nuevas con «El agente … agotó su presupuesto mensual». 0 = sin tope.
- Este mes (USD): el gasto real acumulado, calculado con la tabla de precios de modelos. Es un campo de solo lectura que se recalcula al abrir el formulario.
- Máx. iteraciones de herramientas por ejecución: tope de rondas modelo↔herramientas por petición para este agente (0 = el valor global de Ajustes). Una tarea compleja con recetas suele resolverse en 8–15 rondas; un valor de 25–30 es un buen techo.
El presupuesto global de Ajustes (capítulo 4) se comprueba antes que el del agente y suma lo de todos los agentes. Los dos se evalúan al inicio de cada mensaje, ejecución o paso; una respuesta en curso nunca se corta a mitad por presupuesto.
9.Gobernanza: hasta dónde llega cada agente
Las capacidades dicen qué tipo de cosas puede hacer el agente; la gobernanza dice sobre qué y cuánto. Las políticas se evalúan en un solo lugar, tanto cuando el modelo llama a una herramienta como cuando alguien aprueba una acción pendiente.
| Política | Cómo se escribe | A qué se aplica |
|---|---|---|
| Modelos permitidos | Lista separada por comas de modelos técnicos; admite comodín final: sale.*, account.move, res.partner. Vacío = cualquier modelo al que el usuario tenga acceso. | A todas las herramientas que reciben model_name (búsquedas, agrupaciones, escrituras, métodos, reportes oficiales…). En run_sql_query se traduce a tablas: si la consulta toca una tabla cuyo modelo no está permitido, se rechaza. |
| Métodos permitidos | Entradas modelo.metodo o solo metodo: sale.order.action_confirm, message_post. Vacío = comportamiento por defecto (botones de la vista y lista segura interna; call_method usa además su lista de bloqueo). | execute_action y call_method. |
| Acciones de servidor permitidas | Selección de registros de ir.actions.server. Vacío = cualquiera que el usuario pueda ejecutar. | run_server_action. |
| Reportes permitidos | Selección de reportes (ir.actions.report). Vacío = cualquier reporte que el usuario pueda imprimir. | list_reports y render_report. |
| Dominios de correo permitidos | Dominios separados por comas: elquetzal.com.gt, mrdc.tech. Vacío = cualquier destinatario. | send_email, incluidos los correos encolados para aprobación. |
| Máximo de registros por operación | Un número. 0 = sin límite. | Escrituras y métodos masivos (execute_action, call_method, run_server_action, render_report sobre registros): una llamada que afecte a más registros se rechaza. |
Lo que la gobernanza no sustituye
Las políticas se suman a la seguridad de Odoo, no la reemplazan. El agente ejecuta cada
herramienta con el usuario que conversa (o el usuario dueño de la tarea o misión), de modo
que los grupos de acceso, las reglas de registro y las compañías permitidas del usuario siguen
mandando. Hay además listas de bloqueo internas que no se pueden desactivar: call_method
nunca llama a métodos privados, a unlink, write, create
directos ni a modelos sensibles (usuarios, claves, parámetros, reglas, módulos); el SQL de solo
lectura rechaza cualquier verbo que no sea de lectura y las tablas de credenciales.
10.El panel de chat
La varita mágica de la barra superior abre un panel flotante que acompaña al usuario por todo Odoo; también existe como pantalla completa en MRDC AI → Chat de IA.
Anatomía del panel
| Zona | Qué contiene |
|---|---|
| Cabecera | Avatar y nombre del agente activo; botones Historial, Nuevo chat, Maximizar/Restaurar, Minimizar y Cerrar. El panel se puede redimensionar arrastrando sus bordes y recuerda tamaño, posición y si estaba plegado. |
| Barra de agente | Píldoras con los agentes disponibles; un clic cambia de agente y abre una conversación nueva con él. |
| Barra de contexto | Aparece cuando el usuario está en una vista de un modelo: «Puedo ver lo que estás viendo» con el modelo y el registro actuales. Un clic en el icono de la mira captura los datos visibles (capítulo 17). |
| Mensajes | Burbujas del usuario y del agente, en orden cronológico. Las del agente muestran HTML enriquecido (tablas, negritas, enlaces), gráficas interactivas, imágenes, los adjuntos generados con botón de descarga y, al pie, los pulgares de retroalimentación. Arriba del todo, el botón Cargar anteriores trae mensajes más antiguos de a 30. |
| Línea de tiempo de progreso | Mientras el agente trabaja, una lista en vivo muestra cada herramienta que está llamando («Buscando en sale.order», «Ejecutando receta …», «Generando documento», «Enviando correo») con su estado, y el botón Cancelar. |
| Respuestas rápidas | Sugerencias de seguimiento que el agente propone al final de algunas respuestas; un clic las envía. |
| Entrada | Caja de texto multilínea (Enter envía, Mayús+Enter salta de línea), clip para adjuntar archivos, cámara para capturar la pantalla actual y micrófono para dictar. |
Historial y búsqueda
El botón Historial despliega las conversaciones recientes del usuario con el agente, con un buscador por título; al seleccionar una, se cargan sus mensajes. Cada fila tiene un icono de papelera para borrarla. Las conversaciones son privadas de cada usuario: nadie más las ve en el panel, y en el menú Historial de la aplicación solo el administrador ve las de todos (capítulo 34).
Maximizar
El botón de maximizar amplía el panel a casi toda la ventana, cómodo para leer reportes y tablas largas. El menú MRDC AI → Chat de IA ofrece además una pantalla completa con la lista de conversaciones a la izquierda y la conversación a la derecha.
Adjuntar archivos
Con el clip se adjuntan hasta 10 archivos por mensaje, de máximo 15 MB cada uno y 40 MB en total. Se aceptan imágenes (PNG, JPG, GIF, WebP), PDF, Word, Excel, CSV y texto; el módulo comprueba el tipo real del archivo, no solo la extensión, y rechaza lo demás con un mensaje en español. Las imágenes se envían al modelo como imágenes (los modelos con visión las interpretan); los documentos de texto se transcriben al contexto; los demás se describen. El agente puede, por ejemplo, leer una factura en PDF adjunta y crear el proveedor y la factura de compra.
Capturar la pantalla
El botón de la cámara toma una captura de la vista actual de Odoo y la adjunta al mensaje: sirve para preguntar «¿qué significa este error?» o «¿por qué esta factura está en este estado?» sin copiar nada. En las vistas que no son formulario, lista ni kanban —tableros, informes dinámicos, pantallas especiales— el panel la toma automáticamente al enviar, porque ahí no hay registros que capturar como datos.
Dictar por voz
El micrófono graba audio en el navegador (requiere HTTPS o localhost y permiso del usuario) y al detenerlo lo transcribe con el servicio de audio de OpenAI; el texto aparece en la caja de entrada para revisarlo antes de enviar. El idioma por defecto de la transcripción es español.
Cancelar una respuesta
Si el agente se está tardando —una cadena larga de herramientas, una consulta pesada— el botón Cancelar de la línea de tiempo pide la cancelación. El módulo la atiende en la siguiente frontera de herramienta: el ciclo se detiene, la conversación recibe el mensaje «⏹️ Respuesta cancelada por el usuario» y nada de lo que estaba por escribirse se escribe.
Retroalimentación
Debajo de cada respuesta del agente hay dos pulgares. Marcar 👍 o 👎 guarda la retroalimentación en el mensaje (solo el dueño de la conversación puede hacerlo), y con 👎 el panel pide opcionalmente un comentario. Esa señal queda en el Historial para que el responsable del asistente revise las respuestas malas y mejore prompts, pistas y recetas (capítulo 38).
11.Conversar con los datos: consultas en lenguaje natural
Pregunte como le preguntaría a un analista. El agente descubre el modelo, elige la receta o la agrupación correcta, ejecuta la consulta con sus permisos y explica de dónde salió cada número.
Las respuestas de este capítulo son reales, obtenidas en el ambiente de demostración con el agente MRDC Assistant (GPT-5.4) sobre los datos de 2026 de Distribuidora El Quetzal. Cada figura muestra la pregunta tal como se escribió y la respuesta tal como llegó.
Ventas del mes y clientes principales
sales_orders_in_period para el total y
una agrupación por cliente para el ranking, y advierte que una cifra es sin IVA y la otra con IVA,
ofreciendo unificar la base.Vale la pena detenerse en ese último detalle: el agente no solo responde, declara la base de
cálculo (pedidos confirmados, sin impuestos) y señala la inconsistencia entre dos
fuentes. Eso sale de las pistas de modelo (capítulo 21), que le enseñan que
amount_total incluye impuestos y amount_untaxed no.
Cuentas por cobrar vencidas
Existencias y rotación
stock.quant) con líneas de pedido
agrupadas por mes y calcula la cobertura.Oportunidades del CRM con Ask AI
Cómo razona el agente una consulta
- Entender qué se pide y en qué modelo vive: si duda, llama a
get_available_modelso lee la pista del modelo conget_model_hint. - Preferir una receta. Si existe una receta validada que responde la pregunta
(
list_recipes/run_recipe), la usa: es más barata y está aprobada por una persona. - Si no hay receta, construye la consulta con
read_group(totales, promedios, conteos por grupo),search_records(listas con campos concretos) ocount_records; y si tiene SQL habilitado y la agrupación es compleja,run_sql_query. - Responder con contexto: cuántos registros encontró, qué filtros aplicó, qué base de
cálculo usó, y un enlace directo (
get_record_link) cuando nombra un documento.
12.Reportes, gráficas, documentos e imágenes
Con la capacidad de generación de reportes el agente devuelve tablas formateadas, gráficas interactivas y archivos descargables —PDF, Excel, CSV, texto, HTML— construidos a partir de los datos que acaba de consultar.
Reportes en tabla y gráficas
generate_report ejecuta una agrupación sobre un modelo (dominio, campos a sumar,
agrupar por, ordenar, límite) y la devuelve como tabla HTML con título; generate_chart
hace lo mismo pero dibuja una gráfica de barras, líneas, pastel o dona que se renderiza dentro del
chat con Chart.js y se puede abrir a pantalla completa con un clic.
Documentos descargables
generate_document crea un archivo y lo adjunta al mensaje con un botón de
descarga: PDF a partir de HTML (tablas, encabezados, estilos), XLSX a partir de una
matriz de filas (la primera fila son los encabezados), CSV, TXT y HTML. El
adjunto queda en el mensaje de la conversación y su identificador puede pasarse a
send_email o send_notification para enviarlo.
Imágenes
generate_image crea una imagen a partir de una descripción (relación de aspecto y
calidad configurables) y la muestra en el chat; generate_and_set_image hace lo mismo
y la guarda en el campo de imagen de un registro —por ejemplo la foto de un producto que
no la tiene—, lo que requiere la capacidad de escritura. Ambas usan el proveedor de OpenAI.
Tres maneras de obtener un reporte: cuál usar
| Necesidad | Herramienta | Resultado |
|---|---|---|
| Ver una tabla o gráfica rápida en el chat | generate_report / generate_chart | HTML y gráfica en la conversación; sin archivo. |
| Un archivo a medida para enviar o archivar | generate_document | PDF, XLSX, CSV, TXT o HTML con el diseño que el agente decida. |
| El reporte oficial de Odoo (factura, libro de ventas, estado de cuenta…) | render_report (capítulo 13) | El mismo PDF o Excel que imprime Odoo, con el formato y el papel de la empresa. |
13.Reportes oficiales de Odoo: facturas, libros y estados de cuenta
Cualquier reporte que Odoo sepa imprimir —la factura, el libro de ventas de la SAT, un estado de cuenta, una orden de compra— el agente puede generarlo en PDF, Excel o HTML, adjuntarlo y enviarlo por correo, sin que nadie abra el asistente del reporte.
Los reportes de Odoo son registros de ir.actions.report. Hay dos familias: los que se
imprimen sobre registros (la factura, el pedido, la orden de compra) y los que se piden a
través de un asistente con parámetros (los libros de la SAT de l10n_gt_extra,
los reportes contables con fechas, el libro mayor). El agente maneja las dos con dos
herramientas:
list_reports: lista los reportes disponibles (nombre, identificador XML, modelo, formatos) filtrando por modelo o por texto; para los reportes de asistente muestra además los campos del asistente y cuáles son obligatorios.render_report: genera el reporte en pdf, xlsx (cuando el reporte tiene versión Excel) o html (que además devuelve el contenido para incrustarlo en un correo). Para reportes sobre registros se pasan los ids; para los de asistente, los valores del asistente —y los campos relacionales aceptan nombres, no solo ids: «Facturas de Cliente (FEL)», «IVA por ventas 12%».
El libro de ventas de la SAT por correo
l10n_gt_extra, crea el asistente
con el diario, el impuesto, las fechas y el folio, lo genera en los dos formatos y envía el correo
con ambos adjuntos y el total del libro en el cuerpo.
.pdf y .xlsx) generados por el reporte oficial.Cómo lo hace por dentro
- Resuelve el reporte por id, por identificador XML (
l10n_gt_extra.action_reporte_ventas) o por nombre exacto, y comprueba las políticas: Reportes permitidos y Modelos permitidos del agente. - Si el modelo del reporte es un asistente, lo crea con los valores recibidos (resolviendo nombres a ids y avisando si un nombre es ambiguo o no existe), llama a su método de impresión (
print_report,export_xls… detectados automáticamente o indicados enwizard_method) y usa los datos y el contexto que ese método devuelve —exactamente lo que haría el botón en pantalla. - Renderiza con el motor de reportes de Odoo (
_render_qweb_pdf/_render_qweb_html) o captura la exportación Excel del asistente. Para reportes sobre registros verifica que el usuario pueda leerlos y respeta el máximo de registros por operación. - Guarda el resultado como adjunto y devuelve su id; el agente lo pasa a
send_emailo lo deja descargable en el chat.
wkhtmltopdf operativo en el servidor (igual que
los reportes normales de Odoo). Los asistentes con folio —como el libro de ventas— no
llevan cuenta de los folios usados: indique el folio inicial en la instrucción o en la tarea
programada, o deje que el agente lo guarde en su memoria entre corridas.
14.Crear y modificar registros desde el chat
Con la capacidad de escritura el agente crea contactos, pedidos, facturas y cualquier registro, actualiza campos y pulsa los botones de la vista. Lo hace con su usuario, con verificación posterior y, si así se configura, con aprobación humana.
Un contacto nuevo en dos turnos
update_field.
Las herramientas de escritura
| Herramienta | Para qué | Protecciones |
|---|---|---|
create_record | Crear un registro con un diccionario de valores; las líneas (pedido, factura) se pasan como lista de diccionarios. | Convierte tipos según el campo, ignora el campo name cuando lo asigna una secuencia (no rompe la numeración de documentos), devuelve los valores guardados y pide al agente verificarlos. |
update_field | Cambiar un solo campo: es la herramienta preferida. | Valida tipo y existencia del campo; explica errores del ORM en lenguaje claro (p. ej. un campo no almacenado). |
update_record | Cambiar varios campos a la vez, incluidas líneas. | Igual que la anterior; las líneas aceptan comandos de creación, actualización y borrado. |
get_record_actions + execute_action | Descubrir los botones de la vista (Confirmar, Validar, Registrar pago…) y ejecutarlos sobre uno o varios registros. | Solo métodos que aparecen como botones o en la lista segura, o en Métodos permitidos; respeta el máximo de registros por operación. |
generate_and_set_image | Generar una imagen por IA y guardarla en el campo de imagen de un registro. | Requiere escritura y la clave de OpenAI. |
Las reglas que el agente recibe
Cuando la escritura está habilitada, el prompt del sistema incorpora automáticamente una
sección de operaciones de escritura que el modelo debe seguir: consultar siempre
get_fields antes de crear (campos requeridos, solo lectura, relaciones); resolver
clientes y productos por nombre y confirmar el correcto antes de usarlos; crear las líneas de un
documento junto con el documento; verificar lo guardado y corregir con
update_record si algo no coincide con la intención; no inventar campos ni valores;
no ejecutar un botón sin antes descubrirlo con get_record_actions; y reportar
siempre qué cambió, con el enlace al registro.
Confirmaciones y aprobación
En el chat, el agente pregunta antes de actos con consecuencias (confirmar un pedido, validar una factura, cambiar muchos registros) salvo que el usuario ya lo haya pedido explícitamente. En tareas programadas en modo aprobación y en misiones con aprobación de escrituras las herramientas de escritura no se ejecutan: cada llamada se convierte en una acción pendiente con una vista previa «valor actual → valor propuesto», que una persona aprueba o rechaza (capítulo 28).
15.Métodos y acciones de servidor: el mayor alcance
Cuando ninguna herramienta dedicada encaja, la capacidad de métodos y acciones de servidor deja al agente llamar a cualquier método público de un modelo y ejecutar las acciones de servidor del menú «Acción», con listas de bloqueo que no se pueden apagar.
Las cuatro herramientas
| Herramienta | Qué hace |
|---|---|
get_model_methods | Lista los métodos públicos de un modelo con su firma (parámetros), filtrando por un texto. El agente la usa antes de llamar a un método para no adivinar nombres ni argumentos. |
call_method | Llama a un método público sobre uno o varios registros (o sobre el modelo) con argumentos posicionales y con nombre. El resultado se serializa con criterio: recordsets como listas de id/nombre, acciones de ventana como «devolvió una acción», valores simples tal cual. |
list_server_actions | Lista las acciones de servidor (ir.actions.server) ejecutables: automatizaciones, entradas del menú Acción, acciones de correo, actividad o código, con su modelo. |
run_server_action | Ejecuta una acción de servidor por id sobre los registros indicados, igual que el menú Acción de la interfaz. |
Ejemplo real: una nota interna en la oportunidad
La tarea por evento del capítulo 29 califica cada oportunidad nueva del CRM y publica su
análisis como nota interna. No existe una herramienta «publicar nota», así que el agente
usa call_method sobre crm.lead.message_post con el cuerpo en HTML y el
subtipo de nota. La figura muestra las llamadas registradas en la ejecución.
call_method con
message_post, con su duración y el tamaño del resultado.Lo que nunca se permite
- Métodos privados (que empiezan por
_) ni los métodos de bajo nivelcreate,write,unlink,read,searchy similares: para eso están las herramientas dedicadas, que validan y registran. - Modelos sensibles: usuarios, grupos, reglas de acceso, claves de API, parámetros del sistema, módulos, adjuntos de sistema, el propio módulo de IA.
- Lo que no esté en Métodos permitidos o Acciones de servidor permitidas cuando esas listas están definidas, ni más registros que el máximo por operación.
crm.lead.message_post y sale.order.action_confirm»). En
las tareas en modo aprobación, call_method y run_server_action también
pasan por la cola de acciones pendientes.
16.SQL de solo lectura
Para agregaciones complejas, uniones y cubos por fecha que el ORM hace pesados, el agente puede consultar PostgreSQL directamente —solo leer, dentro de una transacción de solo lectura y con las tablas sensibles vetadas.
res_users y
res_partner, la ejecuta con run_sql_query y presenta ventas, número de
pedidos y ticket promedio.Cómo se protege
- La consulta debe empezar por
SELECToWITH; cualquier otro verbo se rechaza antes de tocar la base. - Una lista de palabras prohibidas bloquea modificaciones y funciones peligrosas
(
insert,update,delete,drop,alter,copy,pg_sleep,pg_read_file,dblink,set…) y las tablas de credenciales (res_users_apikeys,auth_totp,ir_config_parameter, cualquier cosa conpassword). - Se ejecuta dentro de un punto de guardado con
SET LOCAL transaction_read_only = on: aunque algo se colara, PostgreSQL impide escribir; al terminar se revierte el punto de guardado, así que no deja rastro en la transacción. - Se aplica un límite de filas (200 por defecto, ajustable en la llamada) y las políticas del agente: si Modelos permitidos está definido, las tablas de la consulta deben corresponder a modelos permitidos.
- Se registran la consulta, la duración y el tamaño del resultado en las llamadas a herramientas de la conversación o de la ejecución.
Cuándo prefiere SQL y cuándo no
El agente recurre a SQL cuando la pregunta exige agrupar por semanas o trimestres, cruzar varios
modelos, calcular percentiles o promedios móviles, o cuando una agrupación del ORM devolvió
demasiadas filas. Para consultas sencillas sigue usando read_group y
search_records, que conocen etiquetas, monedas y traducciones. Las pistas de modelo
le indican en qué tabla vive cada cosa (sale_order, account_move,
account_partial_reconcile…) y qué trampas evitar.
17.Contexto de pantalla y navegación
El panel sabe dónde está el usuario. Puede leer el registro o la lista que tiene delante, responder sobre «esta factura» sin que nadie copie el número y devolver enlaces que abren directamente el menú o el documento correcto.
«Puedo ver lo que estás viendo»
Cuando el usuario está en una vista de un modelo, el panel muestra la barra de contexto con el modelo y, si es un formulario, el registro abierto. Al enviar un mensaje, el módulo captura el contexto —modelo, tipo de vista, id del registro o ids visibles y dominio de la lista— y lo entrega al agente como texto: «El usuario está viendo el pedido S00042 de Hotel Vista al Lago…». Con el icono de la mira el usuario fuerza una captura de los datos visibles antes de preguntar. Así funcionan preguntas como «¿por qué este pedido no se puede facturar?» o «resume las oportunidades de esta lista».
Enlaces que abren Odoo
Dos herramientas hacen que el agente no solo hable sino que lleve al usuario al lugar correcto:
get_menus: busca entre los menús a los que el usuario tiene acceso (por palabras: «facturas cliente») y devuelve el id y la ruta completa; el agente responde con un enlace/odoo/ir.ui.menu/que abre ese menú.get_record_link: devuelve la URL directa de un registro (/odoo/). El agente la usa cada vez que nombra un documento que acaba de crear o modificar./
18.Correo y notificaciones
El agente envía correos con cuerpo HTML y adjuntos, mensajes a la bandeja de Odoo y avisos emergentes en tiempo real. Todo queda registrado y, en las tareas en modo aprobación, todo pasa primero por una persona.
| Herramienta | Qué hace | Capacidad |
|---|---|---|
send_email | Envía un correo (destinatarios, asunto, cuerpo HTML, adjuntos por id) a nombre del usuario a través del servidor de correo saliente de Odoo. Crea un registro mail.mail que queda en Ajustes → Técnico → Correos electrónicos con su estado. | Enviar correo |
send_notification | Publica un mensaje en la bandeja de entrada de Odoo de usuarios internos (por login), con adjuntos opcionales. Si no se indica destinatario, al propio usuario. | Notificaciones |
send_system_notification | Muestra un aviso emergente (toast) en la sesión web de los destinatarios al instante, con nivel (info, éxito, aviso, peligro) y opción de que no se cierre solo. | Notificaciones |
Reglas y límites
- Los destinatarios se limpian (espacios, separadores, duplicados) y, si el agente tiene Dominios de correo permitidos, cualquier dirección fuera de esos dominios se rechaza con el motivo.
- Los adjuntos solo pueden ser los generados en la misma conversación o ejecución (documentos, reportes oficiales, gráficas exportadas): el agente no puede adjuntar archivos arbitrarios de la base.
- En el chat, la regla por defecto es confirmar destinatario y contenido con el usuario salvo que ya los haya dado explícitamente; las instrucciones de una tarea pueden indicar «envía sin confirmar» porque ahí no hay nadie a quien preguntar.
- En tareas en modo aprobación y en misiones con aprobación de escrituras,
send_emailse encola como acción pendiente con el asunto y el cuerpo completos visibles en la vista previa; se envía al aprobar. - El envío real depende del servidor de correo saliente de Odoo. Si no hay ninguno o falla, el correo queda en estado de error en la lista técnica y la herramienta devuelve el aviso; la tarea lo refleja en su respuesta.
19.Consulta rápida
Una pregunta, una respuesta, sin abrir una conversación: el asistente de Consulta rápida es la vía más corta para un dato puntual, y si la respuesta vale la pena se guarda como conversación.
En MRDC AI → Consulta rápida se abre un asistente con el selector de agente y una caja para la pregunta. Preguntar a la IA ejecuta el mismo ciclo de herramientas del chat y muestra la respuesta formateada, los adjuntos generados, las herramientas que se usaron y los tokens consumidos. Nueva pregunta limpia el formulario y Guardar en conversación crea una conversación con ese intercambio para seguirla después en el panel.
20.Historial de conversaciones
Cada conversación queda guardada con sus mensajes, adjuntos, llamadas a herramientas, tokens, costo y retroalimentación. Es la materia prima para auditar y para mejorar al asistente.
MRDC AI → Historial lista las conversaciones: nombre (el agente lo deduce del primer mensaje), agente, usuario, número de mensajes y última actividad. Un usuario normal ve solo las suyas; el administrador ve todas.
La conversación por dentro
El formulario muestra la pestaña Mensajes con cada turno: fecha, rol (usuario, asistente, sistema), contenido y tokens de entrada y salida. Al abrir un mensaje del asistente se ve su contenido renderizado en HTML, el texto original y, en Llamadas a herramientas, cada herramienta invocada con sus argumentos, su resultado (recortado), la duración en milisegundos y el tamaño del resultado; además el costo estimado en dólares, el modelo realmente usado y la retroalimentación 👍/👎 con su nota.
Resumen automático
Para que una conversación larga no cueste más a cada turno, el módulo genera cada 10 mensajes un resumen de lo anterior con el modelo rápido del agente y lo guarda en la conversación. Al siguiente mensaje, el agente recibe el resumen más los últimos mensajes (según el límite de historial del agente), no todo el hilo. Los datos confirmados —«el cliente es X», «la fecha acordada es Y»— sobreviven así aunque el mensaje original ya no se reenvíe.
Qué hacer con el Historial
- Auditar: qué preguntó quién, qué herramientas se ejecutaron, qué registros se tocaron y cuánto costó.
- Mejorar: filtrar las respuestas con 👎, leer la llamada que falló o el número que salió mal, y convertir la lección en una pista de modelo, una receta o una línea del prompt (capítulo 38).
- Reutilizar: abrir una conversación antigua desde el panel y continuarla; el agente recupera el resumen y el contexto.
21.Conocimiento curado I: pistas de modelo
Una pista de modelo es lo que un consultor experimentado le contaría a un analista nuevo sobre un modelo de Odoo: qué campos importan, cuáles engañan y dónde está el dato correcto. El agente la recibe justo cuando va a usar ese modelo.
Los modelos de lenguaje conocen Odoo en general, pero no los detalles que deciden si un número
es correcto: que amount_invoiced de un pedido no está almacenado y además
incluye IVA, que los cobros conciliados desde el extracto no crean account.payment,
que date_order está en UTC y un día de Guatemala va de las 06:00 a las 05:59 UTC del
siguiente. Las pistas de modelo (Configuración → Pistas de modelo) guardan ese
conocimiento por modelo técnico.
sale.order,
sale.order.line, account.move, account.move.line,
account.partial.reconcile y res.partner.Cómo llegan al agente
- Cuando el agente llama a
get_fieldso a una herramienta sobre un modelo que tiene pista, el módulo adjunta la pista al resultado. El agente la lee en el momento exacto en que la necesita, sin gastar tokens en los modelos que no toca. - El agente también puede pedirla directamente con
get_model_hint; el prompt del sistema le recomienda hacerlo antes deget_fieldscuando una receta falla. - La sección «Conocimiento curado» del prompt le dice qué modelos tienen pista y qué recetas existen, para que sepa que están ahí.
account.move: tipos de documento, estados,
fechas, montos con y sin impuestos y la trampa de los cobros conciliados desde el banco.Escribir una buena pista
- Empiece por la tabla y los estados que cuentan («solo
posted»). - Liste los campos que importan y diga de cada uno si está almacenado, en qué moneda y si incluye impuestos.
- Escriba las TRAMPAS en mayúsculas: lo que parece correcto y no lo es, con la alternativa correcta.
- Añada las convenciones locales: zona horaria, cómo se llama al cliente
(
commercial_partner_id), qué excluir (anticipos, secciones). - Pruebe: haga la pregunta que antes salía mal y compruebe que ahora el agente cita la pista.
22.Conocimiento curado II: recetas
Una receta es una consulta parametrizada que una persona probó y validó. El agente la prefiere sobre cualquier consulta improvisada: es más exacta, más barata y repetible.
En Configuración → Recetas viven las consultas validadas. Cada una tiene un nombre
técnico (sales_confirmed_by_week), una descripción de lo que devuelve, un tipo
(SQL o ORM), la consulta, sus parámetros y el último resultado de prueba. El
módulo trae diez recetas de ventas, facturación, cobranza y cartera:
| Receta | Qué devuelve | Parámetros |
|---|---|---|
sales_confirmed_by_week | Ventas confirmadas (sin IVA) por semana ISO, con número de pedidos. | date_from, date_to |
sales_orders_in_period | Pedidos confirmados en el período: orden, cliente, monto sin IVA, fecha. | date_from, date_to |
invoiced_by_period | Facturación emitida (facturas menos notas de crédito, sin IVA) en el período. | date_from, date_to |
invoices_in_period | Detalle de facturas y notas de crédito publicadas en el período. | date_from, date_to |
collections_in_period | Cobros aplicados a facturas de cliente en el período (con IVA), por conciliación parcial. | date_from, date_to |
collections_by_week | Cobrado por semana ISO. | date_from, date_to |
invoice_backlog_by_order | Pedidos confirmados con saldo por facturar: total, facturado, saldo y días desde la confirmación. | — |
receivable_open_invoices | Facturas de cliente con saldo pendiente: cliente, número, fechas, días vencida, saldo. | — |
receivable_aging_buckets | Cartera por antigüedad (al día, 1-30, 31-60, 61-90, más de 90), monto y número de facturas. | — |
top_debtors | Principales deudores con saldo, factura más antigua y máximo de días vencidos. | limit |
Anatomía de una receta
sales_confirmed_by_week: consulta SQL con los
marcadores %(date_from)s y %(date_to)s, definición de parámetros en JSON
y botones Probar y Validar.- Tipo SQL: una consulta de solo lectura con marcadores con nombre
(
%(date_from)s). Se ejecuta con la misma protección de solo lectura del capítulo 16 (sin la comprobación de palabras prohibidas, porque la validó una persona). - Tipo ORM: un JSON con modelo, dominio, campos y agrupación que se ejecuta con
formatted_read_group; respeta reglas de registro y multiempresa, ideal para usuarios con acceso parcial. - Parámetros (JSON): nombre, tipo (
date,datetime,int,float,str,bool), si es obligatorio y valor por defecto; los valorestodayynowse resuelven al ejecutar. - Probar ejecuta con parámetros de muestra y guarda el resultado; Validar la marca como validada (solo entonces el agente la ve); Volver a borrador la retira del catálogo sin borrarla.
Cómo las usa el agente
El prompt del sistema le muestra el catálogo de recetas validadas (nombre, descripción y
parámetros). Ante una pregunta, el agente llama a run_recipe con el nombre y los
parámetros en JSON y recibe las filas; si necesita explorar, list_recipes con un
texto. En las instrucciones de una tarea programada se puede obligar a usar recetas («usa
SIEMPRE las recetas validadas con run_recipe»), como en el caso práctico del
capítulo 31: eso convierte un reporte que antes costaba veinte llamadas exploratorias en seis
llamadas exactas.
Crear recetas a partir de una ejecución
En la ejecución de una tarea (capítulo 27) el botón Extraer recetas recorre las consultas SQL y las agrupaciones que el agente hizo en esa corrida y las propone como recetas en borrador, con sus parámetros detectados. Es la forma más rápida de capitalizar una consulta que salió bien: se revisa, se prueba, se valida y a partir de ahí el agente la reutiliza.
23.Memoria: lo que el agente no vuelve a preguntar
Preferencias del usuario, decisiones confirmadas, hechos de la empresa. La memoria guarda lo que debe sobrevivir a la conversación y lo inyecta en el contexto de las siguientes —con ámbitos, caducidad y un filtro que rechaza secretos.
Tres ámbitos
| Ámbito | Qué guarda | Quién lo ve y quién lo escribe |
|---|---|---|
| Usuario | Preferencias y hechos del usuario: «prefiere montos sin IVA», «su zona es Occidente», «el comparativo siempre contra el año anterior». | Solo ese usuario; lo escribe él (o el agente en su nombre con remember_fact). |
| Agente | Hechos compartidos por todos los usuarios de un agente: «la empresa se llama…», «los montos van en quetzales», «el corte semanal es el lunes 07:00». | Todos los usuarios del agente lo leen; solo los administradores pueden crearlo o borrarlo (para que nadie envenene el contexto común). |
| Conversación | Hechos válidos solo en ese hilo: «en esta conversación 'el cliente' es Hotel Vista al Lago». | El dueño de la conversación. |
remember_fact en el ámbito del usuario.
Cómo funciona
- Al inicio de cada petición el módulo añade al prompt la sección «Memoria (hechos confirmados antes; no volver a preguntar)» con las memorias vigentes del usuario, del agente y de la conversación.
- El agente guarda con
remember_fact(clave, valor, ámbito)y borra conforget_fact(clave); la clave hace de identificador: guardar de nuevo la misma clave actualiza el valor. - Un filtro de secretos rechaza valores que parezcan claves de API, contraseñas o tokens, y lo dice.
- La caducidad (Expira el) permite hechos temporales: «durante agosto la promoción es…»; las memorias vencidas se ignoran.
- El origen indica quién la creó: el usuario, el agente o el resumen automático.
remember_fact no está disponible.
24.Base de conocimiento (RAG): políticas, manuales y registros
Textos, documentos adjuntos y registros de Odoo indexados con embeddings para que el agente responda «según la política de crédito…» citando lo que la empresa escribió, no lo que el modelo supone.
MRDC AI → Base de conocimiento administra las fuentes. Cada fuente se trocea en
fragmentos, cada fragmento se convierte en un vector con el modelo de embeddings de Ajustes
y se guarda con su texto. Cuando el agente llama a search_knowledge, el módulo
combina dos búsquedas —semántica (coseno entre vectores) y léxica (texto completo en español)—
y devuelve los pasajes más relevantes con su fuente, para que el agente los cite.
Tipos de fuente
| Tipo | Qué indexa | Notas |
|---|---|---|
| Texto | Un texto pegado en la propia fuente: políticas, procedimientos, preguntas frecuentes, glosarios. | Lo más directo; se reindexa al guardar cambios. |
| Adjunto | Un archivo de Odoo: PDF (pypdf), Word (python-docx), Excel (openpyxl), CSV o texto. | El texto extraído se trocea; si falta el paquete de Python la fuente queda en error con el aviso. |
| Registros | Registros de un modelo (dominio + campos a incluir, con límite): productos con su descripción, artículos de conocimiento, plantillas de correo, contratos… | Con Actualización automática el cron diario los reindexa; respeta la compañía. |
El agente citando la política
Permisos y multiempresa
- Cada fuente tiene compañía; una regla de registro hace que los usuarios solo vean y busquen en las fuentes de sus compañías (o las globales).
- Al devolver un pasaje de un adjunto, el módulo comprueba que el usuario pueda leer ese adjunto; al devolver uno de un registro, que pueda leer ese registro. Lo que no puede ver, no se le muestra ni al agente que le responde.
- La herramienta
search_knowledgesolo se ofrece al agente cuando existe al menos una fuente indexada: así no gasta tokens describiéndola en bases sin conocimiento.
25.Centro de hallazgos
Cuando el agente detecta algo que merece atención —un cliente que cruza los 30 días de mora, un producto que se agota, una semana atípica— no solo lo menciona en un correo: lo registra como hallazgo con números, responsable, fecha límite y estado.
MRDC AI → Centro de hallazgos es una bandeja de trabajo. Cada hallazgo tiene severidad (información, aviso, crítico), categoría (ventas, cobranza, facturación, inventario, compras, otros), una explicación con los datos que lo sustentan, una acción recomendada, el monto involucrado, el registro relacionado (cliente, producto, documento), el responsable, una fecha límite y el estado (nuevo, visto, hecho, descartado).
Quién los crea
- El agente, con la herramienta
create_insight, desde una conversación o —sobre todo— desde una tarea programada: «si algún cliente supera 30 días de mora, registra un hallazgo crítico». El hallazgo guarda el agente, la tarea y la ejecución que lo generaron. - Una persona, a mano, para usarlo como bandeja de pendientes del negocio.
Deduplicación
Si el agente vuelve a detectar el mismo hallazgo (mismo nombre y mismo registro) dentro de 14 días, no crea otro: incrementa el contador de ocurrencias y actualiza la fecha de última vez visto. Una tarea diaria de cobranza no llena la bandeja de duplicados; muestra cuántos días seguidos un cliente aparece en mora.
Flujo de trabajo
Al asignar un responsable, el módulo le envía una notificación interna («Te asignaron…»). Los filtros Abiertos, Críticos y Mis hallazgos, y las agrupaciones por severidad, categoría y estado, sirven para repartir el trabajo. Los hallazgos respetan la compañía.
26.Tareas programadas: el agente trabaja solo
Un reporte cada lunes a las 07:00, un seguimiento de cobranza diario, una calificación de cada oportunidad nueva. La tarea programada le da al agente instrucciones, un horario o un disparador, permisos propios y una memoria, y deja constancia de cada corrida.
MRDC AI → Tareas programadas lista las tareas con su agente, dueño, modo, disparador,
intervalo, próxima y última ejecución, último estado y acciones pendientes. Una tarea puede
crearse a mano desde este menú o desde el chat, pidiéndoselo al agente (herramienta
schedule_ai_task).
El formulario
| Grupo / campo | Significado |
|---|---|
| Agente y Usuario | El agente que ejecuta y el usuario con cuyos permisos corre la tarea y a quien se notifica. Una tarea de cobranza debe pertenecer a alguien de contabilidad; una de gerencia, a gerencia. |
| Modo de ejecución | Autónomo: las escrituras y correos permitidos se ejecutan de inmediato. Aprobación: las escrituras, los métodos, las acciones de servidor y los correos se encolan como acciones pendientes y la tarea queda en pendiente de aprobación (capítulo 28). |
| Tipo de disparador | Programación (cada N horas, días, semanas o meses a partir de Próxima ejecución) o Evento (se ejecuta sobre registros de un modelo cuando una acción de servidor la dispara; capítulo 29). |
| Intervalo y Próxima ejecución | La próxima ejecución se guarda en UTC y la interfaz la muestra en la zona del usuario; el agente recibe además la hora local en el contexto. Tras cada corrida se suma el intervalo. |
| Permisos | Permitir notificaciones, Permitir enviar correo, Permitir operaciones de escritura: recortan las capacidades del agente para esta tarea. Notificar al completar envía un mensaje interno al dueño con el resumen de cada corrida. Límite de historial de KPIs: cuántas instantáneas de corridas anteriores se inyectan (capítulo 30). |
| Pestaña Instrucciones | El texto que recibe el agente en cada corrida (más el contexto automático de la tarea). Para tareas por evento, aquí van también el modelo disparador, los minutos de deduplicación y la acción de servidor generada. |
| Pestaña Memoria y Pestaña Ejecuciones | Los hechos que la tarea guardó para sí misma y la lista de corridas con fecha, estado, tokens y costo. |
Lo que el agente recibe además de las instrucciones
En cada corrida el módulo antepone un contexto de tarea: nombre, fecha y hora local del
inicio (en la zona del dueño), programación, modo de ejecución, permisos, la memoria de la tarea
y las últimas instantáneas de KPIs, y unas reglas fijas —un error de herramienta no es una
«inconsistencia de datos», no hay que revisar crons ni la cola de correo, las reglas se aplican
literalmente, los correos no llevan destinatarios de relleno como «
Programar desde el chat
schedule_ai_task y confirma la próxima ejecución en hora
local.La herramienta acepta nombre, instrucciones, intervalo, primera ejecución (fecha, día de la
semana, día del mes y hora local), modo y permisos. Tiene sus propias salvaguardas: rechaza
instrucciones con marcadores sin rellenar (,
), una tarea semanal sin día de la semana toma el día de hoy, una
mensual el día de hoy, y la hora por defecto es las 08:00 local. list_ai_tasks y
update_ai_task permiten pausar, reanudar o reprogramar desde la conversación.
Ejecutar ahora y desactivar
El botón Ejecutar ahora lanza una corrida inmediata (sin mover la programación) y abre la ejecución resultante: es la forma de probar una tarea nueva. Desmarcar Activo la pausa sin borrar su historial; archivar el agente también la detiene.
27.Ejecuciones: qué pasó en cada corrida
Cada corrida de una tarea deja una ejecución con la respuesta completa del agente, cada herramienta que llamó, los tokens, el costo, el instantánea de KPI, las acciones encoladas y el error si lo hubo.
Estados
- En cola: corridas por evento esperando a que el cron las tome.
- En ejecución: con una reserva (lease) de tiempo; si el servidor muere a mitad, otro trabajador la retoma cuando la reserva vence, hasta un máximo de dos intentos; después queda en error con el motivo.
- Éxito: el agente terminó y, si corresponde, envió lo que debía.
- Pendiente de aprobación: terminó dejando acciones en la cola (modo aprobación).
- Error: el agente no pudo terminar (proveedor caído sin respaldo, presupuesto agotado, agente archivado, excepción interna); el detalle está en la pestaña Error.
Las pestañas
| Pestaña | Contenido |
|---|---|
| Respuesta | El texto final del agente, renderizado. |
| Acciones en cola | Las acciones pendientes que dejó esta corrida, con tipo, resumen y estado; botones Aprobar todo y Rechazar todo en la cabecera. |
| Instantánea de KPI | El JSON que el agente guardó con save_kpis (capítulo 30). |
| Llamadas a herramientas | La traza completa: herramienta, argumentos, resultado (hasta 6.000 caracteres), duración en ms y tamaño del resultado. Es lo primero que hay que leer cuando un número sale mal. |
| Error | El mensaje de error, si lo hubo. |
Retroalimentación y recetas
La ejecución admite retroalimentación (👍/👎 y nota) del dueño, igual que los mensajes del chat, y el botón Extraer recetas propone como recetas en borrador las consultas SQL y agrupaciones de la corrida (capítulo 22). Una corrida buena se convierte así en un activo reutilizable; una mala, en una pista de modelo o una corrección de las instrucciones.
get_fields y read_group, necesitaba
más del doble de llamadas. El costo exacto está en cada ejecución.
28.Modo aprobación y acciones pendientes
El agente propone, una persona decide. En modo aprobación cada escritura, método, acción de servidor o correo se convierte en una acción pendiente con vista previa, que se aprueba o rechaza desde Odoo —de forma idempotente y sin saltarse las políticas.
La tarea «Seguimiento de cobranza» del ambiente de demostración corre en modo aprobación: revisa la cartera, y para cada cliente con saldo vencido propone una nota de seguimiento en el contacto y un correo a contabilidad. Nada de eso se ejecuta solo: queda en MRDC AI → Acciones pendientes.
Qué se encola
| Tipo de acción | Origen |
|---|---|
| Crear registro · Actualizar registro · Actualizar campo | create_record, update_record, update_field |
| Ejecutar acción · Llamar método · Acción de servidor | execute_action, call_method, run_server_action |
| Generar y asignar imagen | generate_and_set_image |
| Enviar correo · Enviar notificación | send_email, send_notification |
Las herramientas de lectura, los reportes y los documentos se ejecutan normalmente: lo que se encola es solo lo que cambia datos o sale de Odoo. El agente recibe como resultado de la herramienta «quedó en cola como acción pendiente #N» y sigue trabajando; su resumen final lista lo propuesto.
Aprobar y rechazar
- Aprobar ejecuta la acción en ese momento como el dueño de la tarea, vuelve a evaluar las políticas del agente (modelos, métodos, dominios de correo, límite de registros) y guarda el resultado o el error en la propia acción.
- Antes de ejecutar, comprueba que el registro no cambió desde que el agente lo propuso (compara la fecha de modificación guardada al encolar): si alguien lo editó entretanto, la acción falla con «el registro cambió» para no pisar trabajo ajeno.
- La aprobación es idempotente y con bloqueo: dos personas pulsando Aprobar a la vez no ejecutan dos veces; la segunda recibe «ya no está pendiente».
- Rechazar la descarta con su estado. Aprobar todo / Rechazar todo en la tarea o en la ejecución resuelven todas las pendientes de una vez.
- Al encolar, el módulo deduplica: la misma acción con los mismos argumentos en la misma corrida no se encola dos veces (clave de idempotencia con índice único), aunque el modelo la repita.
29.Tareas por evento: reaccionar a lo que pasa en Odoo
En lugar de un horario, un disparador: cuando se crea una oportunidad, cuando se confirma un pedido, cuando llega una factura. La tarea recibe los registros que la dispararon, se deduplica y se procesa en cola con reintentos.
crm.lead, minutos de deduplicación y la acción de servidor generada
con el botón Crear acción de servidor.Cómo se arma
- Cree la tarea con Tipo de disparador = Evento, elija el modelo (por ejemplo
crm.lead) y los minutos de deduplicación: el mismo registro no vuelve a disparar la tarea dentro de esa ventana aunque se guarde varias veces. - Pulse Crear acción de servidor. El módulo genera una acción de servidor de código
sobre ese modelo que llama a
run_for_records(records)de la tarea. Esa acción aparece en el menú Acción de la lista del modelo (para dispararla a mano sobre una selección) y puede engancharse a una automatización de Odoo (al crear, al actualizar, al cambiar de etapa) si la aplicación de automatizaciones está instalada. - Escriba las instrucciones pensando en que «los registros disparadores vienen en el contexto del evento»: el agente recibe el modelo, los ids y los nombres de los registros.
Qué pasa al dispararse
run_for_recordsdescarta los registros ya procesados dentro de la ventana de deduplicación, crea una ejecución en cola con los ids y despierta el cron.- El cron toma la ejecución con bloqueo, la marca en ejecución con una reserva de tiempo y la corre con el agente y el dueño de la tarea. Si el trabajador muere, la reserva vence y otro la retoma (máximo dos intentos).
- El agente trabaja con el contexto del evento y sus herramientas; en la demostración, lee la
oportunidad, el historial del cliente y publica una nota interna con
call_method→message_post.
30.Memoria y KPIs de las tareas
Una tarea que corre cada semana debe recordar los criterios que fijó y los números de la semana pasada. Tiene su propia memoria y guarda una instantánea de KPI en cada corrida; ambos se le inyectan en la siguiente.
Memoria de la tarea
En la pestaña Memoria de la tarea hay pares clave/valor con su origen. Los crea el
agente con la herramienta remember(clave, valor) durante una corrida («criterio de
ventas: pedidos confirmados sin IVA; las cotizaciones no cuentan») o una persona a mano, y se
borran con forget. En cada corrida el contexto de la tarea los lista bajo «Memoria de
la tarea», de modo que una decisión de criterio tomada en agosto sigue aplicándose en
noviembre.
Instantáneas de KPI
La herramienta save_kpis recibe un objeto plano de indicadores —en el caso
práctico: period, sales_untaxed, invoiced_untaxed,
collected, backlog_untaxed, receivable_total,
receivable_60_plus, orders_count, invoices_count— y lo
guarda en la ejecución (pestaña Instantánea de KPI). El campo Límite de historial de
KPIs de la tarea define cuántos instantáneas anteriores se inyectan en la siguiente corrida
(por defecto los últimos 8).
Para qué sirven juntos
- Comparativos baratos y coherentes: «vs. semana anterior» sale dla instantánea, no de una consulta nueva que podría usar un criterio distinto; las instrucciones del caso práctico dicen «usa las instantáneas cuando existan y la receta cuando no».
- Validaciones entre corridas: el agente puede detectar que la cartera subió 40 % en una semana y señalarlo como incidencia o hallazgo.
- Continuidad de criterio: si en una corrida se decidió excluir anticipos, la memoria lo conserva y la instrucción no tiene que reescribirse.
31.Caso práctico: el reporte semanal de ventas por correo
De principio a fin: una tarea que cada lunes a las 07:00 envía a gerencia un correo HTML con ventas, facturación, cobranza, backlog y cartera, validaciones y acciones recomendadas, usando solo recetas validadas y guardando sus KPIs para la semana siguiente.
1. El objetivo
Gerencia quiere, cada lunes a primera hora, un solo correo que responda: ¿cuánto vendimos la semana pasada y cómo se compara?, ¿cuánto facturamos y cobramos?, ¿qué pedidos llevan dos semanas sin facturar?, ¿cómo está la cartera y quién debe?, ¿qué cinco cosas hay que hacer esta semana? Y que nunca deje de llegar: si un dato falta, que lo diga en el correo en vez de no enviarlo.
2. Las piezas que hacen falta
- Un agente con herramientas de Odoo, reportes y envío de correo; en la demostración, MRDC Assistant con GPT-5.4 y respaldo GPT-4.1 mini.
- Las recetas de ventas, facturación, cobranza, backlog y cartera, validadas (capítulo 22). Son las que hacen que la corrida sea exacta y barata.
- Las pistas de modelo de
sale.order,account.moveyaccount.partial.reconcile, por si una receta falla y el agente tiene que consultar por su cuenta. - La tarea: semanal, lunes 07:00 hora de Guatemala, modo autónomo, con permiso de correo, sin escrituras, dueño el gerente comercial, con Límite de historial de KPIs 8 y una memoria inicial con el criterio de ventas.
3. Las instrucciones
Las instrucciones completas están en la figura del capítulo 26. Su estructura es la que recomendamos para cualquier reporte recurrente:
- Qué enviar, a quién y la regla de oro: «el correo SIEMPRE se envía; si una fuente falla, la sección lleva ⚠️ SIN DATO y la incidencia va al anexo».
- Parámetros: compañía, moneda y formato de números, la definición exacta de la ventana (semana ISO anterior, con la conversión UTC/hora local para campos datetime).
- Fuentes: receta por receta, con qué parámetros y para qué sección; «usa SIEMPRE
run_recipe; si una falla,get_model_hintantes queget_fields». - Memoria: leer la memoria y las instantáneas; al final,
save_kpiscon la lista exacta de indicadores. - Validaciones numeradas (V1 subtotales, V2 la semana no supera al rango que la contiene para la misma métrica, V3 fórmula de la variación) con la aclaración de que van al anexo y no bloquean.
- Formato del correo: asunto con cifras, secciones numeradas, semáforo de KPIs con la regla de colores, tablas con sus columnas, acciones recomendadas con responsable y fecha, anexo, firma.
- Reglas de redacción y el cierre: «envía una sola vez con
send_email; no busques crons ni revisesmail.mail; termina con un resumen de 3 líneas».
4. La corrida
Con Ejecutar ahora la tarea corre y abre su ejecución: 14 llamadas a herramientas (11
recetas, save_kpis, un documento y send_email), unos 71.000 tokens de
entrada y 0,22 USD. La respuesta final del agente es el resumen de tres líneas; el correo ya está
en la bandeja del gerente.
5. Lo que aprendimos poniéndolo en producción
| Síntoma | Causa | Corrección |
|---|---|---|
| El correo llegaba a las 23:08 en vez de a las 07:00 del lunes. | La tarea se había creado «cada 1 día» con la próxima ejecución igual a la hora de creación. | Las herramientas de programación ahora fijan hora por defecto (08:00 local) y día de la semana; el contexto de la tarea muestra la hora local. |
| Un correo decía «NO enviado · inconsistencia de datos» porque cobrado ≠ CxC. | El agente interpretó una validación entre métricas distintas como contradicción y decidió no enviar. | V2 se limitó explícitamente a «la misma métrica»; regla de oro «siempre se envía»; el contexto fijo aclara que un error de herramienta no es una inconsistencia. |
| El destinatario era literalmente « | Instrucciones generadas con marcadores sin rellenar. | schedule_ai_task rechaza marcadores; send_email limpia destinatarios. |
| El backlog mostraba solo la suma del top 10. | Ambigüedad en la instrucción. | «KPI = suma de TODAS las órdenes con saldo; top 10 en tabla». |
| Veinte llamadas exploratorias y cifras que cambiaban de semana a semana. | Sin recetas, el agente reconstruía las consultas cada vez. | Recetas validadas y obligatorias; pistas de modelo para las trampas de IVA y UTC. |
32.Misiones: trabajo largo y autónomo
Para objetivos que no caben en una respuesta —revisar todo un catálogo, depurar una cartera de contactos, preparar un cierre— el agente planifica, ejecuta paso a paso con notas de trabajo y reintentos, y deja las escrituras a la aprobación de una persona.
Una misión (MRDC AI → Misiones) tiene un objetivo en lenguaje natural,
un agente, un dueño y permisos. Al iniciarla, el agente produce un plan de pasos; si la
misión exige aprobación del plan, espera a que el dueño lo revise; después ejecuta los
pasos uno a uno, cada uno con su propio presupuesto de herramientas, guardando notas de
trabajo que los pasos siguientes leen, y termina con un resumen. Puede crearse desde el menú o
desde el chat con start_ai_mission.
El formulario
| Campo | Significado |
|---|---|
| Requiere aprobación del plan | Tras planificar, la misión se detiene en Revisión del plan hasta que el dueño pulsa Aprobar plan (o Replanificar, con comentarios). |
| Permitir operaciones de escritura / Requiere aprobación de escrituras | Si la misión puede escribir y si cada escritura (y cada correo) se encola como acción pendiente en vez de ejecutarse. Con aprobación de escrituras, update_field y compañía devuelven «quedó en cola #N» y el paso continúa. |
| Permitir notificaciones / correo | Recortes sobre las capacidades del agente, como en las tareas. |
| Presupuesto de herramientas por paso | Máximo de llamadas a herramientas por paso; al agotarse, el paso debe cerrar con lo que tenga. |
| Uso | Tokens de entrada y salida acumulados; el costo por paso está en cada paso. |
Ciclo de vida
- Iniciar pasa a Planificando; el cron «Process Missions» (cada 5 minutos) o el botón Procesar ahora ejecutan la planificación. El plan aparece en la pestaña Plan como pasos numerados con descripción.
- En En ejecución, cada ciclo del cron procesa hasta
mrdc_ai.mission_steps_per_cyclepasos (3 por defecto); cada paso se confirma por separado, así que un fallo nunca pierde el trabajo ya hecho. Un paso que falla se reintenta; a la tercera, la misión queda en Error con el motivo y puede reanudarse (los pasos fallidos vuelven a pendientes). - Pausar detiene entre pasos; Reanudar continúa; Cancelar la cierra. Marcar como hecha la cierra sin más pasos.
- Mientras corre, la misión tiene una reserva de 30 minutos que se renueva en cada paso (latido); si un servidor muere, otro la retoma al vencer la reserva.
Las herramientas propias de la misión
Además de las del agente, en una misión el modelo dispone de complete_step
(cerrar el paso con un resumen factual), update_working_notes (añadir o reemplazar
las notas de trabajo que leerán los siguientes pasos) y, en la planificación,
propose_plan. Las herramientas de chat (programar tareas, recordar) se retiran.
description_sale
por producto, cada una con su paso de origen, lista para aprobar una a una o con Aprobar todo.
update_field; quedará pendiente de aprobación, eso es lo esperado»), y qué entregar
al final. En la primera versión de la misión del ejemplo, el objetivo decía «proponer la
actualización» y el agente entregó las propuestas en texto sin llamar a la herramienta;
al reescribirlo con la instrucción explícita, cada propuesta quedó como acción pendiente
aprobable.
33.Temas y herramientas especializadas
Los temas agrupan instrucciones y herramientas por especialidad y se asignan a los agentes. Son la forma de que dos agentes compartan un método de trabajo sin duplicar prompts.
En Configuración → Temas hay tres de fábrica: Consultas en lenguaje natural (descubrimiento automático de modelos y campos), Generación de reportes (tablas y análisis) y Navegación de datos (llevar al usuario a registros y vistas). Cada tema tiene nombre, descripción, secuencia y un bloque de instrucciones que se anexa al prompt del agente que lo tenga.
Cuándo crear un tema
- Cuando dos o más agentes necesitan la misma especialidad («cómo analizamos la cartera en esta empresa», «cómo se redactan las notas al cliente»).
- Cuando quiere poder activar o desactivar un bloque de instrucciones sin editar el prompt de cada agente.
- Cuando una integración añade herramientas propias (por ejemplo un módulo de mensajería o de comercio electrónico): el tema es el lugar natural para describir cómo y cuándo usarlas.
_get_odoo_tools y añadir sus propios temas; así funcionan, por ejemplo, las
integraciones omnicanal de mrdc.tech sobre este mismo módulo base. Las herramientas añadidas
pasan por las mismas políticas, registro de llamadas y cola de aprobación.
34.Seguridad y permisos
El módulo no inventa un sistema de permisos: usa los de Odoo. Cada usuario ve sus conversaciones, tareas y misiones; los administradores ven todo; y el agente nunca puede más que la persona en cuyo nombre actúa.
Dos niveles de usuario
| Quién | Qué puede |
|---|---|
Usuario interno (Usuario de Odoo, base.group_user) | Usar el panel y la consulta rápida con cualquier agente activo; ver, crear y borrar sus conversaciones, tareas, ejecuciones, acciones pendientes y misiones; aprobar las acciones de sus propias tareas y misiones; leer las memorias propias y las compartidas del agente; crear memorias propias; leer pistas, recetas validadas, precios, fuentes de conocimiento e insights de sus compañías. |
Administrador (Ajustes / Administración, base.group_system) | Todo lo anterior sobre los registros de todos; crear y editar agentes, temas, pistas, recetas, precios, fuentes de conocimiento; crear y borrar memorias de ámbito agente; ver las claves en Ajustes. |
Reglas de registro
- Conversaciones y mensajes: solo el dueño (y el administrador).
- Tareas, ejecuciones y acciones pendientes: el dueño de la tarea; las acciones pendientes de una misión, el dueño de la misión.
- Misiones y pasos: el dueño.
- Memorias: lectura de las propias, las de sus conversaciones y las compartidas del agente; escritura solo de las propias y de conversación; las de agente, solo administradores.
- Fuentes de conocimiento e insights: por compañía (globales o de las compañías permitidas del usuario).
El agente actúa como el usuario
Todas las herramientas se ejecutan con el usuario de la conversación, o con el dueño de la tarea o misión en las corridas desatendidas. Las búsquedas devuelven lo que ese usuario puede leer; las escrituras fallan con el mismo error de acceso que tendría en la interfaz; los reportes oficiales verifican la lectura de los registros; las aprobaciones se ejecutan como el dueño de la tarea. La única excepción deliberada es la escritura de la retroalimentación 👍/👎, que se hace con privilegios elevados después de comprobar que quien vota es el dueño de la conversación.
Protecciones adicionales
- Adjuntos: tipos y tamaños limitados, verificación del tipo real; los adjuntos generados por el agente se ligan a su mensaje; la base de conocimiento comprueba el permiso del adjunto o registro original antes de mostrar un pasaje.
- Secretos: la memoria rechaza claves y contraseñas; el SQL de solo lectura bloquea las tablas de credenciales y parámetros; las claves de proveedores no se leen desde herramientas.
- Listas de bloqueo fijas en métodos y modelos sensibles (capítulo 15) y las políticas por agente (capítulo 9).
- Cancelación y topes de iteraciones, de herramientas por ronda y de tiempo por petición: ningún mensaje puede girar indefinidamente.
- Transacciones: cada herramienta corre en un punto de guardado; si falla, se revierte solo ella y el agente recibe el error; la respuesta sigue. El SQL es de solo lectura por construcción.
- Concurrencia: las tareas, las corridas por evento y las misiones se toman con bloqueo y reserva; las aprobaciones son idempotentes; el encolado deduplica con índice único.
35.Costos y presupuesto
Cada token cuesta. El módulo lo cuenta por mensaje, por corrida y por paso, lo convierte a dólares con la tabla de precios y lo frena con dos presupuestos: el global y el de cada agente.
Dónde se ve el costo
| Nivel | Dónde |
|---|---|
| Mensaje del asistente | Historial → conversación → mensaje: tokens de entrada/salida, costo estimado, modelo usado. |
| Ejecución de tarea | Tareas programadas → Ejecuciones: tokens y costo por corrida; la lista permite sumar por tarea. |
| Paso de misión | Misión → Plan → paso: tokens y costo; la misión acumula tokens en Uso. |
| Agente, mes en curso | Formulario del agente → Este mes (USD): suma de los tres anteriores en el mes calendario. |
| Global | Se compara contra Presupuesto mensual de IA de Ajustes; no hay campo visible, pero la suma es la de todos los agentes. |
Qué hace subir el costo y cómo bajarlo
| Factor | Medida |
|---|---|
| Prompts del sistema largos que viajan en cada mensaje | Mover el conocimiento a pistas (solo se inyectan cuando se usa el modelo) y a la base de conocimiento (solo los pasajes pertinentes). |
| Muchas herramientas descritas en cada petición | Selección de herramientas = bajo demanda en agentes con escritura, reportes y comunicación. |
Exploración: get_fields + varias read_group para llegar a un número | Recetas validadas y obligatorias en las tareas; get_model_hint antes que get_fields. |
| Historiales largos | El resumen automático ya lo recorta; ajuste el límite de historial del agente (10–20 mensajes suele bastar). |
| Resultados de herramientas enormes | Pedir límites en las instrucciones («top 10», «máximo 50 filas»); las herramientas ya recortan a un máximo de caracteres. |
| Modelo grande para trabajo trivial | Modelo rápido para resúmenes; agentes específicos con modelos mini para tareas masivas. |
| Reintentos por bucles | Topes de iteraciones por agente y global; leer la traza de la ejecución y corregir la instrucción que provoca el bucle. |
Los presupuestos
- Global (Ajustes): al alcanzarse, toda llamada nueva de cualquier agente se rechaza con «El presupuesto mensual global de IA se agotó».
- Por agente: aviso único al 80 % (notificación interna al usuario y al administrador) y rechazo al 100 %.
- Ambos se reinician con el mes calendario y se evalúan al inicio de cada petición; las tareas programadas que se rechazan quedan en error con ese motivo y vuelven a intentarlo en su siguiente programación.
36.Automatizaciones internas y observabilidad
Tres acciones planificadas mueven el módulo por detrás, y todo lo que el agente hace deja rastro: en la interfaz, en los registros y en el log del servidor.
Las acciones planificadas
| Cron | Frecuencia | Qué hace |
|---|---|---|
| MRDC AI: Run Scheduled Agent Tasks | Cada 10 minutos | Toma, de una en una y con bloqueo, las tareas programadas vencidas y las corridas por evento en cola (o con reserva vencida), las ejecuta y confirma cada resultado por separado. Las tareas por evento además lo despiertan al encolar. |
| MRDC AI: Process Missions (Deep Work) | Cada 5 minutos | Toma las misiones activas sin reserva viva, planifica o ejecuta hasta N pasos (parámetro mrdc_ai.mission_steps_per_cycle), renovando la reserva en cada paso. |
| MRDC AI: Re-index Knowledge Sources | Diario | Reindexa las fuentes de conocimiento con Actualización automática (registros que cambian) y reintenta las que quedaron en error. |
Qué se registra y dónde mirarlo
- En la interfaz: cada mensaje y cada paso conservan las llamadas a herramientas con argumentos, resultado recortado, duración en milisegundos y tamaño del resultado; las ejecuciones y misiones guardan estado, error, tokens y costo; las acciones pendientes, su resultado o error al aprobarse.
- En tiempo real: la línea de tiempo del panel recibe por el bus de Odoo cada herramienta que empieza y termina, con su etiqueta en español («Ejecutando receta sales_orders_in_period», «Generando reporte Libro de ventas»).
- En el log del servidor: las llamadas a proveedores con su modelo, los reintentos y los cambios a modelo de respaldo, cada herramienta ejecutada (nivel INFO), los errores de herramienta con traza (ERROR) y los avisos de transacciones recuperadas.
Salud del sistema en tres preguntas
- ¿Corren las tareas cuando deben? Tareas programadas → Próxima ejecución en el pasado con Última ejecución antigua significa que el cron no está corriendo o que la tarea está fallando: mire la última ejecución.
- ¿Se está gastando lo esperado? Agentes → Este mes; Ejecuciones ordenadas por costo; mensajes con 👎.
- ¿Hay trabajo atascado? Ejecuciones en En ejecución con reserva vencida (se retoman solas), misiones en Error (reanudar tras corregir), acciones pendientes antiguas (aprobar o rechazar).
37.Resolución de problemas
Los mensajes de error del módulo están pensados para decir qué pasó y qué hacer. Esta tabla reúne los más frecuentes, su causa y la salida.
| Síntoma | Causa probable | Qué hacer |
|---|---|---|
| «No hay clave de API configurada para …» al primer mensaje. | Falta la clave del proveedor del modelo del agente. | Ajustes → MRDC AI, pegar la clave; o cambiar el modelo del agente a un proveedor con clave. |
| Error 401/403 del proveedor. | Clave inválida, rotada o sin saldo. | Generar una clave nueva en el proveedor; revisar el saldo de la cuenta. |
| Respuestas lentas o «429 rate limit»; el log dice falling back to …. | Límite de velocidad del proveedor; el módulo reintentó y usó el modelo de respaldo. | Normal. Si es frecuente, subir el nivel de la cuenta o repartir agentes entre proveedores. |
| «Unsupported parameter: temperature». | Modelo de razonamiento que no acepta temperatura. | El módulo ya la omite para los modelos conocidos; si es un modelo nuevo, añadirlo a la lista o cambiar de modelo. |
| «El agente … agotó su presupuesto mensual» / «El presupuesto mensual global de IA se agotó». | Presupuesto alcanzado. | Subir el presupuesto (agente o Ajustes) o esperar al mes siguiente; revisar qué lo consumió (capítulo 35). |
| «Error: model 'x' is outside this agent's allowed models». | Política de modelos permitidos. | Añadir el modelo a Modelos permitidos del agente si corresponde. |
| «Error: recipient domain … is not allowed». | Política de dominios de correo. | Añadir el dominio o corregir el destinatario. |
| El agente dice que el campo «no está almacenado» y no puede filtrar/agrupar por él. | Campo calculado no almacenado (p. ej. amount_invoiced del pedido). | Es correcto; la pista del modelo indica la fuente almacenada equivalente. Si falta, escribir la pista. |
| Números distintos para «la misma» métrica. | Bases de cálculo distintas (con/sin IVA, fecha de pedido vs. de factura, UTC). | Pedir la base de cálculo; fijarla en una receta y en las instrucciones; añadir la trampa a la pista. |
| Una tarea no corre a la hora esperada. | Próxima ejecución mal fijada (creada «cada 1 día» a la hora de creación) o cron detenido. | Corregir la próxima ejecución (en hora local del usuario); comprobar la acción planificada y los trabajadores de cron del servidor. |
| Ejecución en En ejecución durante horas. | El trabajador murió a mitad. | Se retoma sola al vencer la reserva (hasta 2 intentos); después queda en error. Revisar el log del servidor. |
| Misión en Error. | Un paso falló tres veces (herramienta, presupuesto, proveedor). | Leer el paso fallido y sus llamadas; corregir (permisos, instrucción) y Reanudar. |
| Acción pendiente falla al aprobar con «el registro cambió». | Alguien editó el registro después de la propuesta. | Revisar el registro; rechazar la acción y volver a correr la tarea si procede. |
| «Estos registros están restringidos» al proponer una escritura desde una misión. | Versiones anteriores a 19.0.2.1: la regla de acceso de acciones pendientes no contemplaba misiones. | Actualizar el módulo (la migración corrige la regla). |
El PDF de render_report no se genera. | wkhtmltopdf ausente o sin acceso al servidor para cargar estilos. | Igual que para cualquier reporte de Odoo: instalar wkhtmltopdf y revisar web.base.url/report.url. |
| Fuente de conocimiento en error «No module named docx/pypdf/openpyxl». | Paquete de Python opcional ausente. | pip install python-docx pypdf openpyxl en el entorno y reindexar. |
| El micrófono no aparece o no graba. | Origen no seguro (HTTP) o permiso denegado en el navegador. | Servir Odoo por HTTPS; permitir el micrófono para el sitio. |
| Adjunto rechazado. | Tipo no permitido, tamaño > 15 MB, más de 10 archivos o más de 40 MB en total. | Convertir a PDF/imagen/Excel, comprimir o dividir. |
| El agente pregunta en vez de ejecutar en una tarea. | Instrucción ambigua; en una corrida no hay nadie que responda. | Escribir la instrucción completa (destinatarios, criterios, formato) y la regla «no pidas confirmación; si falta un dato, indícalo en el resultado». |
38.Buenas prácticas: instrucciones, prompts y mejora continua
Lo que separa un asistente que impresiona el primer día de uno que sigue siendo útil en el mes seis es la disciplina con que se escriben las instrucciones y se capitalizan los errores.
Escribir instrucciones para tareas y misiones
- Una sola salida y una regla de oro. «Envía UN correo a X» y «el correo SIEMPRE se envía; si falta un dato, dilo dentro». Un agente sin salida obligatoria encuentra razones para no entregar.
- Defina los términos. «Ventas = pedidos confirmados (state = sale), sin IVA, por date_order en la zona America/Guatemala». Cada palabra ambigua («ventas», «cobrado», «vencida») es una base de cálculo distinta en manos del modelo.
- Nombre las fuentes. Recetas por nombre y con qué parámetros; si no hay receta, el
modelo y los campos. «Usa SIEMPRE
run_recipe» ahorra la mitad del costo. - Numere las validaciones y diga qué pasa si fallan. «V1…, V2…; si falla, va al anexo como incidencia; no bloquea el envío.» Y limite cada validación a lo que compara: «la misma métrica».
- Describa el formato con precisión: asunto con cifras, secciones, columnas de cada tabla, fila de totales, reglas de redacción (nombres cortos, sin tablas repetidas, números junto a cada afirmación), firma.
- Cierre el bucle: «envía una sola vez; la respuesta de la herramienta es la confirmación; no revises crons ni correos; termina con un resumen de 3 líneas».
- Pruebe con Ejecutar ahora, lea la traza de herramientas y el resultado, corrija la instrucción —no el resultado— y repita hasta que dos corridas seguidas salgan bien.
Escribir el prompt del sistema
- Rol, tono, idioma, formato de números y moneda, y las 5–10 reglas del negocio que nunca cambian. Nada más.
- Todo lo que empiece con «cuando consultes el modelo X…» va a una pista de modelo.
- Toda consulta que se repite va a una receta.
- Todo dato que cambia (responsables, políticas, promociones) va a la memoria del agente o a la base de conocimiento.
Capitalizar los errores
| Lo que pasó | Dónde va la lección |
|---|---|
| El agente usó un campo equivocado o una base de cálculo errónea. | Pista de modelo (la «TRAMPA» y la fuente correcta). |
| La consulta correcta costó muchas llamadas. | Receta (Extraer recetas desde la ejecución, probar, validar). |
| El agente volvió a preguntar algo ya decidido. | Memoria (usuario o agente) o memoria de la tarea. |
| Respondió sin conocer una política interna. | Fuente de conocimiento. |
| Interpretó una regla de forma creativa. | Reescribir la regla en las instrucciones de la tarea, literal y con ejemplo. |
| Hizo algo que no debía poder hacer. | Gobernanza del agente (modelos, métodos, dominios, límite) o quitar la capacidad. |
Operación
- Un agente por rol (gerencia, ventas, cobranza) con capacidades mínimas; no un superagente para todos.
- Empezar las tareas con escritura en modo aprobación; pasar a autónomo tras varias corridas aprobadas sin cambios.
- Revisar semanalmente: 👎 del historial, ejecuciones en error, acciones pendientes viejas, hallazgos abiertos, gasto por agente.
- Revisar trimestralmente: precios de modelos, modelos nuevos más baratos, recetas que ya nadie usa.
39.Referencia rápida de herramientas
Las 40 herramientas que el agente puede recibir, con sus parámetros principales, la capacidad que las habilita y el grupo al que pertenecen en el modo de selección bajo demanda.
| Herramienta | Parámetros | Qué hace | Capacidad · grupo |
|---|---|---|---|
| Descubrimiento y lectura | |||
get_available_models | search_term | Lista los modelos de Odoo consultables (nombre técnico, descripción, módulo). | Herramientas de Odoo · núcleo |
get_fields | model_name | Campos de un modelo: nombre, etiqueta, tipo, si es filtrable/agrupable; adjunta la pista del modelo si existe; oculta los campos de ruido (actividades, mensajes). | Herramientas de Odoo · núcleo |
search_records | model_name, domain, fields, limit, order | Busca registros con un dominio de Odoo y devuelve los campos pedidos. | Herramientas de Odoo · núcleo |
read_group | model_name, domain, fields, groupby, orderby, limit | Agrupa y suma/cuenta/promedia (GROUP BY), incluidas agrupaciones por fecha (:day, :week, :month…). | Herramientas de Odoo · núcleo |
count_records | model_name, domain | Cuenta registros que cumplen un dominio. | Herramientas de Odoo · núcleo |
get_menus | search_term | Menús accesibles por el usuario, para devolver enlaces de navegación. | Herramientas de Odoo · núcleo |
get_record_link | model_name, record_id | URL directa que abre un registro. | Herramientas de Odoo · núcleo |
run_sql_query | query, limit | SELECT/WITH de solo lectura sobre PostgreSQL, con protecciones y límite de filas. | SQL de solo lectura · núcleo |
| Conocimiento curado y memoria | |||
get_model_hint | model_name | Pista curada de un modelo. | Herramientas de Odoo · núcleo |
list_recipes | search_term | Catálogo de recetas validadas con sus parámetros. | Herramientas de Odoo · núcleo |
run_recipe | name, params, limit | Ejecuta una receta validada con parámetros JSON. | Herramientas de Odoo · núcleo |
search_knowledge | query, limit | Pasajes relevantes de la base de conocimiento (búsqueda híbrida). Solo aparece si hay fuentes indexadas. | Herramientas de Odoo · núcleo |
create_insight | name, explanation, severity, category, recommended_action, amount, model_name, record_id, responsible_login, deadline | Registra un hallazgo en el Centro de hallazgos (deduplica 14 días). | Herramientas de Odoo · núcleo |
remember_fact | key, value, scope | Guarda un hecho duradero (usuario, agente, conversación). No disponible en corridas desatendidas. | Herramientas de Odoo · núcleo |
forget_fact | key, scope | Borra una memoria por clave. | Herramientas de Odoo · núcleo |
| Reportes, documentos e imágenes | |||
generate_report | title, model_name, domain, fields, groupby, orderby, limit | Tabla HTML formateada a partir de una agrupación. | Generación de reportes · reports |
generate_chart | title, chart_type, model_name, measure, groupby, domain, orderby, limit | Gráfica interactiva (barras, líneas, pastel, dona). | Generación de reportes · reports |
generate_document | filename, format, content, title | Archivo descargable PDF/XLSX/CSV/TXT/HTML adjunto al mensaje. | Generación de reportes · reports |
generate_image | prompt, aspect_ratio, quality | Imagen por IA mostrada en el chat. | Generación de reportes · reports |
list_reports | model_name, name | Reportes oficiales disponibles, con campos de asistente y formatos. | Generación de reportes · reports |
render_report | report, format, record_ids, wizard_values, wizard_method, filename | Genera un reporte oficial en PDF/XLSX/HTML y lo adjunta. | Generación de reportes · reports |
| Escritura | |||
create_record | model_name, values | Crea un registro (con líneas) y devuelve lo guardado para verificar. | Operaciones de escritura · write |
update_field | model_name, record_id, field_name, new_value | Cambia un campo (preferida). | Operaciones de escritura · write |
update_record | model_name, record_id, values | Cambia varios campos, incluidas líneas. | Operaciones de escritura · write |
get_record_actions | model_name | Botones/métodos ejecutables de un modelo con su etiqueta. | Operaciones de escritura · write |
execute_action | model_name, record_ids, method_name | Ejecuta un botón/método sobre registros (confirmar, validar…). | Operaciones de escritura · write |
generate_and_set_image | model_name, record_id, image_field, prompt, quality | Genera una imagen por IA y la guarda en un registro. | Operaciones de escritura · write |
get_model_methods | model_name, search_term | Métodos públicos de un modelo con su firma. | Métodos y acciones · write |
call_method | model_name, method_name, record_ids, args, kwargs | Llama a cualquier método público permitido. | Métodos y acciones · write |
list_server_actions | model_name | Acciones de servidor ejecutables. | Métodos y acciones · write |
run_server_action | action_id, record_ids | Ejecuta una acción de servidor sobre registros. | Métodos y acciones · write |
| Comunicación | |||
send_email | to, subject, body_html, attachment_ids | Correo con HTML y adjuntos generados. | Enviar correo · communication |
send_notification | message, subject, recipient_logins, attachment_ids | Mensaje a la bandeja de Odoo de usuarios internos. | Notificaciones · communication |
send_system_notification | message, title, level, sticky, recipient_logins | Aviso emergente en tiempo real. | Notificaciones · communication |
| Automatización (solo en chat) | |||
schedule_ai_task | name, instructions, interval_number, interval_type, first_run, first_run_weekday, first_run_day, first_run_time, execution_mode, allow_send_email, allow_write_operations | Crea una tarea programada; rechaza marcadores sin rellenar; hora por defecto 08:00 local. | Herramientas de Odoo · automation |
list_ai_tasks | — | Tareas del usuario con horario, modo y estado. | Herramientas de Odoo · automation |
update_ai_task | task_id, active, instructions, interval_number, interval_type, next_run, next_run_weekday, next_run_day, next_run_time, execution_mode | Pausa, reanuda o reprograma una tarea. | Herramientas de Odoo · automation |
start_ai_mission | name, goal, allow_write_operations, allow_send_email, require_plan_approval | Inicia una misión. | Herramientas de Odoo · automation |
list_ai_missions | — | Misiones del usuario con estado y progreso. | Herramientas de Odoo · automation |
| Solo en tareas y misiones | |||
remember / forget / save_kpis | key, value · key · kpis (objeto) | Memoria y instantánea de KPI de la tarea. | Tareas programadas |
complete_step / update_working_notes / propose_plan | result_summary · content, mode · steps | Cerrar un paso, editar las notas de trabajo, proponer el plan. | Misiones |
enable_tools | group | Meta-herramienta del modo bajo demanda: activa un grupo (write, reports, communication, automation). | Selección bajo demanda |