必须启用Function Calling才能让Dify智能体调用外部工具执行实际任务;需确认模型支持该能力、正确配置内置或自定义工具(含严格校验OpenAPI Schema)、在Agent节点选择“Function Calling”策略并明确指令,最后通过调试日志验证两段式输出。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中让AI智能体真正调用外部工具完成查天气、发邮件、算账等实际任务,必须打通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缺一不可);
⑤ 测试调用:输入样例参数,点击“运行测试”,看到返回正确JSON才表示连通成功。【Schema格式错误会导致工具在Agent中完全不可见,且无提示】
构建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)、空数组[]是否允许。


















