Dify 全链路实战:三步搭建智能天气查询机器人(Agent+DeepSeek + 高德天气)
文章目录
在Function Calling 实现从 “用户提问” 到 “实时天气数据输出” 的完整闭环。
一、核心技术逻辑:为什么这么组合?
- DeepSeek 大模型:负责理解用户意图(判断是否查天气、提取城市 / 日期),生成 Function Calling 指令。
- 高德天气 API:提供实时 / 多日天气预报数据,解决模型 “实时数据缺失” 问题。
- Dify Agent:作为 “调度中枢”,通过 Function Calling 策略自动触发工具调用,串联 “模型推理” 与 “数据获取”。
二、准备阶段:工具与模型就绪
1. 申请高德天气 API(获取实时数据)
– 前往 高德开放平台 注册,创建应用并申请 「天气查询」API(需实名认证)。
- 记录 API Key 和接口文档(重点关注:请求 URL、参数格式、返回字段,如
city
、date
、forecast
数组)。
2. 在 Dify 中配置高德天气工具
进入 Dify「工具」模块 → 新建 HTTP 工具:
- 参数映射:
key:固定为你的高德 API Key(认证字段)
- 响应解析:定义 JSON 解析规则(提取
forecast
中的date
、weather
、temperature
字段)。
3. 选择大模型:DeepSeek-chat
在 Dify「模型」模块,接入 DeepSeek-chat(或其他支持 Function Calling 的大模型),验证调用正常。
三、流程编排:Dify 工作流搭建(可视化操作)
通过 Dify 工作流编辑器,搭建 “输入→处理→输出” 核心流程(对应截图结构):
1. 节点结构
– 「开始」节点:定义输入变量
query
,接收用户提问(如 “上海明天天气”)。
- 「Agent」节点:核心调度器,配置 FunctionCalling 策略,串联模型、工具、指令。
- 「结束」节点:输出最终结果(天气信息),支持文本 / JSON 格式。
2. Agent 节点关键配置
– 策略:选
FunctionCalling
(让模型自主决定是否调用工具)。
- 模型:绑定
DeepSeek-chat
(负责意图理解和指令生成)。 - 工具列表:启用刚配置的 「高德天气预报」工具(让 Agent 感知可用工具)。
四、指令设计:教模型 “怎么调用工具”
在 Agent 节点的 「指令」框 中,编写 Prompt 规则,指导模型完成三个核心动作:
1. 触发规则(判断 “该查天气了”)
提示词
当用户提问满足以下条件时,**强制调用「高德天气预报」工具**:
- 包含「天气」「气温」「预报」「晴雨」「温度」等关键词;
- 提到具体城市(如「北京」「上海」,从「开始」节点的 query
中提取);
- 未明确拒绝工具(如“不用工具,直接回答”)。
2. 参数构造(明确 “查哪里、查哪天”)
提示词
### 参数规则(严格匹配高德API)
| 参数名 | 取值逻辑(从 query
提取) | 示例 |
|--------|------------------------------------------------|-----------------------------------|
| city
| 提取城市名(如「上海明天天气」→ city="上海"
) | 必须为真实城市名称(省/市级) |
| date
| - 「今天」→ 系统当前日期(如 2025-06-29
)
- 「明天」→ 当前日期+1天(如 2025-06-30
)
- 具体日期(如「2025-07-01」)→ 直接使用 | 格式必须为 YYYY-MM-DD
```
### 3. 结果解析(把 [JSON](https://www.explinks.com/wiki/json/) 转成人话)
回复规则(基于高德返回结构)
假设工具返回:
{
"forecast": [
{"date": "2025-06-29", "weather": "小雨", "temp": "26~30℃"},
{"date": "2025-06-30", "weather": "阴", "temp": "25~28℃"}
]
}```
__需生成自然语言回复:__
上海未来 2 天天气预报:
・2025-06-29:小雨,26~30℃
・2025-06-30:阴,25~28℃
### 4. 异常处理(应对 “调用失败”)
若工具返回错误:
- 城市无效:回复「未找到『{city}』的天气数据,请检查城市名称」;
- 日期格式错:自动修正为
YYYY-MM-DD
后重试(最多1次); - API超时:回复「天气查询繁忙,请稍后再试」,结合 Agent 最大迭代次数(如3次)触发重试。
### 5. 完整提示词
高德天气 Function Calling 指令设计(精准版)
一、触发规则:何时调用高德天气工具?
当用户提问满足以下 全部条件 时,强制触发 Function Calling,调用「GAODE 天气预报」工具:
-
提问包含 天气相关关键词:如「天气」「气温」「预报」「晴雨」「温度」「风力」「降水」等;
-
提问涉及 具体城市(需从「开始」节点的
query
变量中提取城市名,如「北京」「上海」); -
未明确拒绝工具调用(如用户未说「不用工具,直接回答」)。
二、参数构造:如何调用高德接口?
严格遵循高德天气工具的参数要求,按以下规则生成调用参数:
| 参数名 | 类型 | 是否必填 | 取值逻辑(从 query
变量解析) |
|————–|——–|———-|————————————————————————————————|
| city
| 字符串 | ✅ 必传 | 从用户提问中提取城市名称:
– 例 1:「北京明天天气」→ city="北京"
– 例 2:「上海后天的气温」→ city="上海"
– 若未提取到城市(如「今天天气」),触发异常(见「四、异常处理」)。 |
| date
| 字符串 | ❌ 选填 | 日期格式必须为 YYYY-MM-DD
:
– 「今天」→ 系统当前日期(如 2025-06-29
,需动态获取);
– 「明天」→ 当前日期+1天(如 2025-06-30
);
– 具体日期(如「2025-07-01」)→ 直接使用;
– 未提日期 → 默认为 当前日期(查询今日预报)。 |
| type
| 字符串 | ❌ 选填 | 默认为 forecast
(预报);若用户问「实时天气」,可传 realtime
(需工具支持,需提前确认高德接口能力)。 |
三、结果解析:如何生成用户能懂的回复?
工具返回 结构化数据 后,按以下规则整合为自然语言:
1. 数据映射(假设高德返回格式示例):
{
"city": "北京",
"date": "2025-06-29",
"weather": "晴转多云",
"temp_min": 22,
"temp_max": 30,
"wind": "南风 3-4 级",
"humidity": 55%
}
五、测试验证:让机器人 “动起来”
1. 测试用例(覆盖场景)
用户提问 | 预期行为 |
---|---|
上海今天天气 |
调用高德工具,返回今日预报(如:上海 2025-06-29 天气:小雨,26~30℃ ) |
北京明天会下雨吗 |
提取城市「北京」、日期「2025-06-30」,解析降雨信息 |
某某村天气 |
因城市无效,回复「未找到『某某村』的天气数据…」 |
广州2025/07/01天气 |
自动修正日期为 2025-07-01 后重试,返回结果 |
2. 调试技巧(用 Dify「Test Run」)
– 追踪标签:检查工具是否调用、参数是否正确、结果是否解析成功。
- 详情标签:定位失败原因(参数错误、API 问题、模型理解偏差)。
六、扩展与优化
功能扩展:
- 支持 实时天气:工具参数加
extensions=base
,解析实时温度、风力。 - 支持 多城市对比:让模型一次调用工具查询多个城市(需工具支持批量)。
体验优化:
- 优化 prompt 精度:用正则严格提取城市(如统一 “北京”“北京市”)。
- 调整 迭代次数:将 Agent「最大迭代次数」从 3 调为 5,覆盖更多异常。
七、总结:从 “查天气” 到 “通用能力”
通过 Dify Agent + 大模型 + 外部工具,三步搭建智能天气机器人:
- 工具接入:将高德 API 变为 Dify 可用工具;
- 流程编排:可视化串联输入、处理、输出;
- 指令设计:教模型 “何时、如何、怎样” 调用工具。
这种模式 可扩展性极强 —— 替换工具(如股票、快递 API)和指令,即可快速构建新应用。掌握 Function Calling 核心逻辑,让大模型真正连接真实世界!
文章转载自: 【2025 年最新版】Dify 全链路实战 16:三步搭建智能天气查询机器人(Agent+DeepSeek + 高德天气)
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- OpenAI的API有哪些功能?
- SpringBoot中REST API的错误异常处理设计
- 利用 Instagram API 开展业务的 11 种方法
- 使用Python进行API调用:面向开发人员的分步指南
- Go工程化(五) API 设计下: 基于 protobuf 自动生成 gin 代码
- Python调用股票API获取实时数据
- API在量子计算中的作用
- API请求 – 什么是API请求?
- 给初学者的RESTful API 安全设计指南!
- 如何在 Facebook Developers 上设置 WhatsApp Cloud API
- 支付网关API如何支持小型企业?
- Python调用免费翻译API实现Excel文件批量翻译