AI 服务器动作
AI(人工智能) 服务器动作通过允许人工智能在工作流中做出决策,扩展了 Odoo 的自动化框架。
它们适用于逻辑无法完全通过固定条件表达,但仍需通过标准服务器动作进行受控执行的场景。
AI 服务器动作的工作方式
Odoo 中的 AI 驱动工作流围绕 AI(人工智能)服务器动作(即 管理者)和工具(即 工作者)之间的明确职责划分构建。
AI 服务器动作:管理者
AI(人工智能) 服务器动作充当决策者或管理者。它读取记录及其上下文,解释 AI(人工智能) Prompt,并决定调用哪个工具以及使用哪些参数。
服务器动作不强制业务规则、不会直接修改记录,也不保证操作的正确性。其角色仅限于做出决策。
AI 工具:工作者
工具是启用了 在 AI 中使用 选项的标准服务器动作(在 使用 选项卡中勾选)。工具包含所有执行逻辑,负责记录的更新、移动或写入。工具 必须 在 Python 代码中显式实现业务规则。
如果工具被 AI(人工智能) 服务器动作调用,它将无条件执行,除非代码本身阻止执行。
AI 服务器动作工作流
AI(人工智能) 服务器动作的工作流遵循以下顺序:
- 记录触发
AI(人工智能)服务器动作。 - 使用记录作为上下文评估
AI(人工智能)Prompt。 - 在可用工具中选择一个。
- 提供工具所需的参数。
- 所选工具执行其 Python 代码。
:::: important
::: title
重要提示
:::
只有当底层行为已经在 Odoo 中实现(如将文档移动到文件夹)时,AI(人工智能) 服务器动作才能在无需自定义逻辑的情况下工作。在这些情况下,AI(人工智能) 只选择参数,Odoo 完成实际动作。
::::
使用案例演练
收件箱文档自动分类 示例展示了完整的 AI(人工智能) 服务器动作模式。进入 设置 → 技术 → 服务器动作 菜单即可查看。
:::: note
::: title
备注
:::
该服务器动作用于审查文档内容并添加标签。动作本身 不 移动文档或添加标签,仅依据文档内容决定使用哪个工具。
动作的 模型 为 Document,类型 为 AI。
::::
该动作的 Prompt 提供了文档的上下文以及动作意图。
工具 字段列出了可基于 Prompt 执行的多种操作,如移动文档、添加标签或创建发票/账单。
:::: note
::: title
备注
:::
AI: Add Tags、AI: Move to Folder、AI: Rename Document 均为 执行代码 服务器动作,意味着它们会触发 Python 代码。
::::
比如,若动作根据文档内容判断最合适的工具是 AI: Move to Folder,对应的 Python 代码如下:
ai['result'] = record._ai_action_move_in_folder(folder_id)该代码在被调用时无条件执行,并使用已有方法完成移动。
:::: note
::: title
备注
:::
AI(人工智能) 并不会从 Python 代码或方法签名中推断参数。传递给工具的参数完全由工具的配置决定。
对于 AI: Move to Folder 工具,Python 代码期望一个名为 folder_id 的变量。AI(人工智能) 能提供 folder_id,因为它在工具的 使用 选项卡的 AI Schema 字段中被显式声明。AI Schema 中的 名称 列必须与代码中使用的变量名完全一致。
AI(人工智能) 使用参数描述来理解该参数代表什么、期待何种值以及何时提供。
如果在 使用 选项卡中未定义某个参数,即使代码引用了该参数,AI 也无法提供。
::::
创建自定义 AI 工具
上述 收件箱文档自动分类 示例的相同模式也可以使用标准 Odoo 逻辑实现。例如,要创建一个能够更新任务描述的动作,可以新建一个 执行代码 动作,代码如下:
record.write({'description': content})要使其正常工作,content 必须 在工具的 使用 选项卡中定义为参数。
::: seealso
服务器动作 <reference/actions/server>
:::
常见问题
为什么 Tools 字段为空?
- 确认至少有一个服务器动作启用了 在 AI 中使用。
- 确认至少有一个工具与该服务器动作的 模型 相同。
为什么工具运行了但没有任何变化?
- Python 代码在未做修改的情况下退出。
- 必需的参数缺失或为空。
- 业务条件未在工具逻辑中实现。
为什么 AI 选择了意料之外的工具?
- Prompt 缺乏足够的上下文。
- 多个工具匹配相同意图。
- 工具层面未强制约束条件。