首页 > 教程攻略 > ai资讯 >Dify集成大模型Function Calling实战

Dify集成大模型Function Calling实战

来源:互联网 时间:2026-06-09 13:52:20

想让Dify里的AI智能体真正干活——查天气、发邮件、算账——而不是只会空谈?那必须把Function Calling打通。否则模型再聪明,也只能“纸上谈兵”。

Dify集成大模型Function Calling实战

下面直接进入实操环节,一步一步拆开怎么配置、怎么验证,避免踩坑。

确认大模型已支持Function Calling

先别急着配置工具,第一步是确认你用的模型支不支持这个能力。进入Dify管理后台 → 【模型管理】 → 点击你正在使用的本地或API模型(比如Qwen2.5-7B、Xinference托管的DeepSeek-V3)→ 查看右侧“能力支持”栏。如果显示

【Function Calling: ✅ 支持】

,可以继续往下走;如果是❌,那就得换模型或者升级API服务版本了——不支持该能力的模型,后续配置时会静默跳过工具调用,连个报错提示都没有,极其坑人。

特别注意:Ollama模型默认不开放Function Calling接口,必须通过 --enable-function-calling 参数重启服务,或者改用Xinference v1.17.1+ 并启用openai-compatible模式。这一步漏了,后面全白搭。

在Dify中添加并配置自定义工具

这里有两种常见方式,看你的场景选。

方法一:使用Dify内置工具(最快上手)


进入【Agent工作流】→ 编辑目标节点 → 展开【工具】区域 → 点击“+ 添加工具” → 选择“时间查询”“计算器”“HTTP请求”等预置项 → 保存即可。这些工具无需开发,但仅限基础功能,适合快速原型验证。

方法二:接入自有Python后端服务(推荐生产环境)


① 用FastAPI写一个接收JSON、返回JSON的函数接口,比如 get_weather(city: str) → {"temperature": 26, "condition": "多云"}
② 启动服务并确保能被Dify服务器访问(比如部署在同局域网,或用cpolar做内网穿透);
③ 回到Dify【工具管理】→ 点击“+ 创建自定义工具” → 填写工具名称、描述;
④ 在Schema字段粘贴OpenAPI 3.0格式的JSON Schema——必须严格匹配,字段名、类型、required缺一不可,否则工具在Agent中完全不可见,且没有任何提示;
⑤ 测试调用:输入样例参数,点击“运行测试”,看到返回正确JSON才表示连通成功。

Schema格式错误是初学者最常掉进去的坑,没有之一。

构建Function Calling型Agent节点

打开工作流画布 → 拖入【Agent】节点 → 点击配置 → 在策略下拉菜单中

必须选择“Function Calling”而不是“ReAct”


模型:选中已确认支持FC的模型;
工具:勾选上一步配置好的自定义工具或内置工具;
指令:明确告诉模型“你拥有以下工具,请仅在必要时调用,不要虚构结果”——这能防止它硬编天气数据;
查询:绑定用户输入变量,如 {{inputs.query}}

操作本身不复杂,直接把文件拖进去就行。但有一个很容易被忽略的细节:如果同时勾选了5个以上工具,而指令里没强调优先级,模型很容易在模糊意图时随机调用错误工具。建议首次上线只勾选1~2个高相关性工具,减少干扰。

验证Function Calling是否生效

点击工作流右上角【调试】→ 输入测试语句:“北京今天多少度?”→ 观察日志面板。

成功表现:

日志中间出现两段输出——第一段是模型输出的function_call JSON(含name和parameters),第二段是工具执行后的result字段返回值,最后才是最终回答。这个两段式输出是铁证。

失败典型:

只有最终回答,且内容为“我不知道”或胡编数字;或者日志卡在“LLM output parsed”但无后续。这时需要检查工具Schema是否与API实际接收结构一致,尤其注意字符串引号、布尔值小写(true/false)、空数组[]是否允许。