Dify Agent Tool_Call动态参数输入实战推荐
要让Agent在Dify中根据用户实时输入动态调用工具——例如切换城市自动传参查询天气、更改邮箱自动触发发送动作——必须避免静态参数硬编码。否则每次变动都要重新配置工作流,那只是手动挡而非智能体。
下面拆解核心配置流程,每一步给出可复现的细节,按步骤操作即可顺利运行。
确认Agent已启用Tool Call功能
进入Dify控制台 → 应用列表 → 点击目标应用 → 左侧导航栏选择「Agent」→ 在「Function Calling」区域勾选「Enable function calling」。【未开启此开关,后续定义的工具函数即便再完美也无法被调用】
点击右上角「保存」。此时Agent底层已具备解析用户语义并匹配tool schema的能力——这是基础前提。
定义支持动态参数的Tool Schema
在「Tools」页面点击「+ Add tool」→ 选择「Custom tool」→ 填写工具名称(例如weather_query)→ 在「Schema」文本框粘贴JSON格式定义:
{ "name": "weather_query", "description": "根据城市名获取当前天气信息", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "要查询天气的城市名称,必须是中文全称,例如'北京市'、'杭州市'" } }, "required": ["city"] } }
容易忽略的细节:parameters中每个字段的description参与LLM意图识别。描述越贴近用户日常表达(例如写“城市名称”而非“location”),提取准确率越高。required字段必须填写,缺失会导致调用直接报错。
构建能触发动态提取的用户提示词
进入「Prompt」编辑页,在「User Prompt」区域添加一条明确指令:
你是一个智能助手,严格按以下规则响应:当用户提及具体城市名(如“上海”“广州”)且问题与天气相关时,立即调用weather_query工具,将城市名作为city参数传入。禁止自行回答,禁止虚构数据。
这一步不可跳过。没有这条约束,LLM很可能直接编造天气结果而不调用工具。测试时若发现Agent跳过调用直接回复,几乎都是因为提示词中未强调「立即调用」和「禁止自行回答」。
验证动态参数提取效果
方法一:在「Test」面板输入「查一下深圳今天的温度」→ 观察右侧「Tool calls」日志是否出现weather_query → 展开查看参数是否为{"city": "深圳市"}。
方法二:输入「北京和杭州现在哪个更热?」→ 此时应触发两次tool call,分别传递{"city": "北京市"}和{"city": "杭州市"}。【若只调用一次或参数为空字符串,说明LLM未能正确切分多个实体,需优化schema中的description描述】
方法三:输入「查一下珠穆朗玛峰的天气」→ 预期返回工具调用失败(因为实际API不支持此地点),但参数仍应为{"city": "珠穆朗玛峰"}——这证明动态提取本身成功,失败仅因外部服务限制,非Dify解析错误。