必须开启tool call功能并配置动态参数schema和精准提示词,才能让agent根据用户输入自动提取变量调用工具:先在agent设置中启用function calling,再定义含清晰description的json schema,最后在prompt中强制要求“立即调用”且“不要自行回答”。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Dify中让Agent根据用户实时输入动态调用工具(如查询天气、搜索知识库、发送邮件),必须绕过静态参数硬编码,通过Tool Call机制将用户提问中的变量自动提取并注入工具函数——否则每次换城市、改邮箱或换关键词都要重新配置工作流。
确认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解析错误。











