Skip to main content
本文档由 AI 自动翻译。如有任何不准确之处,请参考 英文原版
Agent 策略插件为 LLM 提供推理与决策逻辑,使其能够选择工具、调用工具并处理工具结果,从而自主解决问题。 本指南将带你构建一个 Function Calling 策略,让模型自行获取当前时间。

前置条件

  • Dify 插件脚手架工具
  • Python 环境(版本 3.12)
有关准备插件开发工具的详细信息,参见 CLI
在终端中运行 dify version 以确认脚手架工具已安装。

1. 初始化插件模板

运行以下命令为你的 Agent 插件创建开发模板:
按照屏幕提示操作,下方注释解释了每一项选择。
初始化会创建一个文件夹,包含插件开发所需的全部资源:
此插件的所有关键功能都在 strategies/ 目录中。

2. 开发插件

Agent 策略插件的开发围绕两个文件展开:
  • 插件声明strategies/basic_agent.yaml
  • 插件实现strategies/basic_agent.py

2.1 定义参数

首先在 strategies/basic_agent.yaml 中声明插件的参数。这些参数驱动插件的核心功能,例如调用 LLM 或使用工具。 建议先从以下四个参数开始:
  • model:要调用的大语言模型(例如 GPT-4、GPT-4o-mini)。
  • tools:增强插件功能的工具列表。
  • query:发送给模型的用户输入或提示词内容。
  • maximum_iterations:最大迭代次数,用于防止过度计算。
示例:
Dify 会根据这些参数声明自动渲染配置界面:
Agent 策略插件界面

2.2 获取参数并执行

用户填写这些字段后,插件会收到提交的值。在 strategies/basic_agent.py 中,定义一个 Pydantic 模型来校验传入的参数:
然后在 _invoke 中解析参数并运行你的策略逻辑:

3. 调用模型

调用模型是 Agent 策略的核心。使用 SDK 中的 session.model.llm.invoke() 调用 LLM,处理文本生成、对话等任务。 要让 LLM 驱动工具调用,它必须输出与各工具接口匹配的结构化参数,即根据用户指令推导出工具可接受的输入。 该方法接受以下参数:
  • model
  • prompt_messages
  • tools
  • stop
  • stream
方法签名:
完整实现参见下方示例代码中的 Invoke Model 标签页。 完成上述设置后,每当用户输入命令,插件就会调用 LLM,根据模型输出构造工具调用参数,并让模型调度已配置的工具来完成复杂任务。
生成工具的请求参数

4. 调用工具

模型生成工具参数后,插件必须实际调用这些工具。使用 session.tool.invoke() 发起这些请求。 该方法接受以下参数:
  • provider
  • tool_name
  • parameters
方法签名:
要让 LLM 自行生成工具调用参数,将模型提取出的工具调用传入你的调用代码:
现在,你的插件即可自动执行 Function Calling,例如获取当前时间。
工具调用

5. 创建日志

复杂任务通常需要多个步骤,你需要跟踪每一步的结果,以分析决策并优化策略。SDK 的 create_log_messagefinish_log_message 可在每次调用前后记录状态,从而加快问题诊断。 例如:
  • 在调用模型之前记录一条「开始模型调用」消息,以显示执行进度。
  • 模型响应后记录一条「调用成功」消息,使其输出可端到端追踪。
设置完成后,工作流日志会显示执行结果:
Agent 输出执行结果
当任务跨越多轮时,在日志调用中设置 parent 参数,将日志嵌套为层级结构,便于跟踪:

示例代码

以下代码为 Agent 策略插件赋予调用模型的能力:

6. 调试插件

声明文件和实现代码完成后,验证插件能否正常运行。Dify 支持远程调试:前往 插件管理 获取调试密钥和远程服务器地址。
插件管理中的调试密钥和远程服务器地址
在插件项目中,将 .env.example 复制为 .env,并填入远程服务器地址和调试密钥。
然后运行:
插件会出现在你的工作空间中,团队成员也可以访问。
浏览插件

打包插件(可选)

一切正常后,运行以下命令打包你的插件:
当前文件夹中会出现一个名为 basic_agent.difypkg(与你的插件名称匹配)的文件。这就是你的最终插件包。 恭喜!你已经开发、测试并打包了你的 Agent 策略插件。

发布插件(可选)

你现在可以将插件包上传到 Dify 插件仓库。在此之前,确保它符合插件发布指南。一旦获得批准,你的代码将合并到主分支,插件将自动在 Dify 市场 上线。

进一步探索

复杂任务通常需要多轮思考和工具调用,会重复「模型调用 → 工具使用」的循环,直到任务结束或达到迭代上限。在此过程中,妥善管理提示词至关重要。参见完整的 Function Calling 实现,了解让模型调用外部工具并处理其输出的标准化方法。
Last modified on June 24, 2026