最近我把Odoo19 企业版的AI模块在社区版实现了一下,顺便整理了本文章,共同学习、共同进步,需要代码的可以私信我。
引言
Odoo 19 的 ai 模块把“自然语言”变成“可执行的业务动作”,让用户在讨论区或业务界面直接提问并获得可落地的结果。它不仅是一个对话窗口,更是一个连接业务数据、流程与工具调用的编排层。本文围绕整体功能、架构、问题到查询的转换流程,以及一个“本月主营业务收入是多少”的执行示例进行剖析。
一、整体功能概览
ai 模块提供三类核心能力:
对话式问答:在 Discuss 或业务场景中直接提问,系统生成可读的自然语言回答。
业务检索与上下文理解:通过 RAG(检索增强生成)从知识源、附件、记录中提取关键信息。
工具调用与执行:把问题转化为可执行的“工具动作”,例如读取报表、调用服务器动作、生成邮件等。
这些能力被统一封装在 AIAgent 的编排逻辑中,再由 LLMApiService 适配不同模型提供商,最终完成回答。
二、ai 模块整体架构

架构上,模块分为“入口控制器 + 编排核心 + RAG检索 + 工具与配置 + 邮件/讨论集成”五层:
入口层:AIController、AgentController 提供 AI 对话与 Agent 入口。
编排层:AIAgent 负责模型选择、提示词构建、工具列表生成、上下文拼装、以及多轮工具调用。
RAG 层:AIAgentSource 定义知识来源,AIEmbedding 负责向量检索,Vector 字段落地到 pgvector。
工具与配置层: IrActionsServer把 Odoo 业务动作变成 AI 工具,ResConfigSettings管理模型与 Key。
应用集成层:DiscussChannel 与 MailThread 把 AI 能力融入讨论与业务消息流。
三、问题如何转成“可执行查询”
核心流程由 AIAgent 触发,逻辑可以分成四步:
1.识别语义与意图
AIAgent 依据当前对话、用户输入、系统提示构造 system_prompts 与 user_prompts。这一步决定“AI 是要回答还是要做事”。
2. 构建上下文
AIAgent 调用 _get_context_from_sources(),用 AIAgentSource 和 AIEmbedding 检索可能相关的知识、业务说明、附件摘要,拼接成可参考的上下文。
3. 生成工具调用方案
AIAgent 通过 _get_tools() 从 IrActionsServer 与内置动作中构建工具列表,并把工具 schema 交给 LLMApiService。LLM 输出的不是最终答案,而是“调用哪些工具、带什么参数”。
4. 工具执行与结果整合
LLMApiService 负责多轮工具调用,AIAgent 把工具返回值再次喂给模型,最终合成可读答案。
因此,“问题 → 具体查询”的关键就在“工具化”:把自然语言转成可执行的业务动作,而不是简单文本生成。
四、应用示例:本月主营业务收入是多少
用户提问:“本月主营业务收入是多少?”
系统执行过程可拆解为:
1.语义解析
AIAgent 识别问题涉及会计/收入口径、时间范围为“本月”,目标是金额汇总。
2. 工具选择
从 IrActionsServer 中选择财务报表或会计汇总相关工具(例如利润表或主营业务收入科目汇总)。模型通常会输出一个工具调用:报表类型 + 时间过滤。
3. 工具执行
工具调用触发 Odoo 内部报表计算,返回本月主营业务收入金额以及口径说明。
4. 结果组织
AIAgent 将工具返回值交给模型组织自然语言回答,并补充说明:如币种、统计口径、是否含税。
最终用户看到的回答可能是:
“本月主营业务收入为 2,350,000 元,统计口径为利润表主营业务收入科目汇总,时间范围为 2 月 1 日至 2 月 17 日。”
五、结论
Odoo 19 的 ai 模块并不是“把问题直接丢给模型”,而是通过 AIAgent 将问题拆解为“上下文 + 工具调用 + 结果整合”。这让 AI 能可靠地对接业务数据与流程,回答更可用、更可执行。对企业而言,ai 模块的价值在于“将复杂业务动作变成自然语言入口”,这比单纯的聊天机器人更接近生产力工具。未来如果结合更多自定义工具与专属知识库,ai 模块会成为 Odoo 业务系统的智能中枢。
附:企业中的实际执行效果图

