Añade herramientas ai_tool para permitir que un agente de IA lea cualquier modelo y campo a los que tenga permiso de acceso, manteniendo los campos personales o sensibles fuera de los resultados.
Se añade un indicador AI Read Forbidden (ai_no_read) a los campos. Las herramientas nunca devuelven ni describen un campo prohibido, ni ningún campo que exponga su valor: campos relacionados, incluidos los delegados mediante _inherits, y campos calculados que dependan de él. Marcar res.partner.email oculta por tanto también email_formatted, email_normalized y res.users.email.
Se proporcionan tres herramientas:
- list_models: lista los modelos que el usuario actual tiene permiso para leer.
- get_fields: describe los campos legibles de un modelo (etiqueta, tipo, ayuda, opciones de selección y modelo destino de la relación), y lista los prohibidos bajo hidden.
- search_read: busca y lee registros de un modelo. Devuelve los campos almacenados a menos que se proporcione una lista de campos, los campos relacionales como IDs de registro, y las fechas en UTC. Los resultados se paginan con limit y offset, y has_more indica si hay más registros coincidentes. Un campo cuya computación se rechaza para el usuario se omite y se lista en inaccessible_fields, y un registro que la búsqueda encuentra pero que el usuario no puede leer (como permite ir.attachment) se omite sin aviso, como harían las reglas de registro.
Las herramientas se ejecutan con los propios derechos de acceso del usuario que las invoca (sin sudo), por lo que las ACL de Odoo, las reglas de registro y los grupos de campos siguen aplicándose. Conecta el agente como un usuario sin más derechos de los que necesite: un administrador ve todos los campos restringidos por grupos.
Además de los campos prohibidos, los resultados omiten los campos binarios, los campos que apuntan a un modelo que el usuario no puede leer (leerlos fallaría) y los nombres mostrados calculados al vuelo, incluido el que Odoo añade a los valores many2one: se construyen a partir de campos de otros registros, que pueden estar prohibidos allí.
El indicador mantiene los valores fuera de los resultados, no fuera de las búsquedas: consulta Known issues.
Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.
auto_awesome Qué hace este módulo
Generado por IA a partir del código · Odoo 16.0Añade un indicador "AI Read Forbidden" por campo y tres herramientas de IA (list_models, get_fields, search_read) que permiten a un agente de IA listar, describir y leer datos de Odoo con los propios derechos de acceso del usuario, manteniendo los campos sensibles marcados fuera de los resultados.
Este módulo amplía el marco de herramientas de IA para que un agente de IA pueda explorar y leer datos de Odoo de forma segura, y ofrece a los administradores una forma de ocultarle campos sensibles.
Dónde aparece: - Se añade una nueva casilla "AI Read Forbidden" a las pantallas de definición de campos (vistas de formulario, lista y búsqueda de campos), para que un administrador pueda marcarla en cualquier campo, por ejemplo, en el email de un contacto. - Se instalan tres herramientas de IA listas para usar: list_models (enumera los modelos que el usuario actual puede leer), get_fields (describe los campos legibles de un modelo: etiqueta, tipo, ayuda, opciones de selección y modelo relacionado) y search_read (busca y devuelve registros).
Reglas de negocio y comportamientos automáticos: - Las herramientas siempre funcionan con los propios derechos de acceso del llamante, nunca como administrador, por lo que los usuarios solo ven lo que se les permite ver. - Un campo marcado nunca se devuelve ni se describe. Los campos que exponen su valor también se ocultan: los campos relacionados (incluidos los heredados por delegación) y los campos calculados que dependen de él, de forma transitiva. Por lo tanto, marcar el email de un contacto también oculta su email formateado y normalizado y el email del usuario. - También se excluyen los campos binarios, los campos restringidos a determinados grupos de usuarios, los campos que apuntan a modelos que el usuario no puede leer y los nombres mostrados no almacenados. - search_read devuelve por defecto los campos almacenados, como máximo 200 registros por llamada, con paginación (offset y un indicador "has_more"), e informa de los campos que no se pudieron leer en "inaccessible_fields".
Afecta a los metadatos de modelos y campos (ir.model, ir.model.fields) y a los registros de herramientas de IA.
Depende de
Modelos y campos (1)
- ir.model.fields · amplía un modelo existenteai_no_read (AI Read Forbidden)
Texto generado por IA (DeepSeek) al leer el código de la versión 16.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. Ver el código en GitHub
Disponibilidad por versión
Revisado: 2026-11-03Estado de confirmación: 1 confirmada, 8 sin información de 9 versiones.
Fuentes · Odoo 16.0
Confirmado el 2026-11-03 en la rama 16.0 de OCA/ai.
terminal Instalación y uso
Documentación de OCA · Odoo 16.0Configuración
Fuente · Odoo 16.0Para prohibir un campo, marque AI Read Forbidden en él. Como administrador, puede:
- Ir a Settings > Technical > Database Structure > Fields, buscar el campo y marcar la casilla (el filtro AI Read Forbidden y la columna de la lista le ayudan a revisar lo que ya está marcado), o
- Abrir el modelo en Settings > Technical > Database Structure > Models y marcar la casilla en la línea del campo, en la pestaña Fields.
La marca se aplica tanto a los campos base como a los personalizados, y surte efecto de inmediato. Una marca establecida en el campo de un mixin, como email_normalized en mail.thread.blacklist, se aplica a todos los modelos que heredan de él.
Un campo prohibido arrastra consigo los campos que exponen su valor a través de su definición, en cualquier modelo: campos relacionados, los campos que un modelo delega mediante _inherits y los campos calculados que dependen de él. La lista hidden devuelta por la herramienta get_fields muestra el resultado en un modelo. Un valor copiado a otro registro cuando se escribe ese registro no se sigue (véase Known issues): marque también esos campos.
Esto peca de prudente: un campo calculado se oculta en cuanto depende de un campo prohibido, incluso cuando su valor no lo contiene. Prohibir res.partner.email también oculta is_blacklisted, un sí/no calculado a partir de la dirección, y hr.employee.mobile_phone, calculado por el mismo método que el correo electrónico del trabajo. Por la misma razón, marque los campos que contienen los valores sensibles en sí (correo electrónico, teléfono, dirección), no los campos a partir de los cuales se calculan muchos otros, como parent_id o company_id: esos ocultarían mucho más de lo previsto.
Los campos restringidos a un grupo de usuarios (groups= en su definición) ya quedan fuera de los resultados para un usuario ajeno a ese grupo, sin necesidad de ninguna marca, y tampoco se notifican en la lista hidden. AI Read Forbidden solo es necesario para los campos que el usuario tiene permiso de leer en caso contrario.
Las herramientas se registran como registros ai.tool y se pueden invocar a través de cualquier integración ai_tool: ai_oca_mcp, por ejemplo, las expone a clientes MCP como Claude Desktop. Este módulo proporciona las herramientas en sí; cómo se accede a ellas depende del módulo de transporte instalado.
Un flujo de trabajo típico de un agente:
- Llama a
list_modelspara descubrir los modelos que el usuario vinculado puede leer. Cada entrada proporciona el nombre técnicomodel(p. ej.res.partner) que se pasa a las demás herramientas. - Llama a
get_fieldsconmodelpara conocer qué significa cada campo legible (etiqueta, tipo, ayuda, opciones de selección, destino de la relación) y qué campos se listan enhidden. - Llama a
search_readpara obtener registros: model(obligatorio): el nombre técnico del modelo.domain(opcional): un dominio de Odoo como lista, p. ej.[["is_company", "=", true]].fields(opcional): una lista explícita de campos; en caso contrario se devuelven los campos legibles almacenados. Una lista vacía devuelve solo los ids.limit(opcional): tamaño de página, 200 por defecto y como máximo; un valor de 0 o inferior, o que supere el límite, se trata como el máximo.offset(opcional): omite esa cantidad de registros coincidentes.order(opcional): p. ej."name asc". Los campos relacionales se devuelven como ids de registro, las fechas y fechas y horas como cadenas ISO-8601 en UTC.has_moreindica si existe otra página con el mismo dominio y orden; los campos que la llamada no pudo leer se listan eninaccessible_fields, mientras que los campos prohibidos o restringidos simplemente están ausentes de los registros.
Ejemplo de argumentos de search_read:
{
"model": "res.partner",
"domain": [["is_company", "=", true]],
"fields": ["name", "email", "country_id"],
"limit": 20,
"order": "name asc"
}Cada llamada se ejecuta con los derechos de acceso del usuario que llama —el propietario de la clave de API cuando se accede a través de ai_oca_mcp—, por lo que las ACL de Odoo, las reglas de registro y los groups de campo se aplican como de costumbre. Conecta el agente como un usuario dedicado que solo tenga los derechos que necesita.
Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen. Sin información verificada en OCA: Instalación.
Las instrucciones de instalación, el paquete de distribución, las dependencias y los pasos de configuración no se muestran porque todavía no se han verificado en la documentación del módulo para ninguna versión.
Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.