Dify 全链路实战:三步搭建智能天气查询机器人(Agent+DeepSeek + 高德天气)

作者:youqing · 2025-08-02 · 阅读时间:8分钟

Function Calling 实现从 “用户提问” 到 “实时天气数据输出” 的完整闭环。

一、核心技术逻辑:为什么这么组合?

  • DeepSeek 大模型:负责理解用户意图(判断是否查天气、提取城市 / 日期),生成 Function Calling 指令。
  • 高德天气 API:提供实时 / 多日天气预报数据,解决模型 “实时数据缺失” 问题。
  • Dify Agent:作为 “调度中枢”,通过 Function Calling 策略自动触发工具调用,串联 “模型推理” 与 “数据获取”。

二、准备阶段:工具与模型就绪

1. 申请高德天气 API(获取实时数据)

– 前往 高德开放平台 注册,创建应用并申请 「天气查询」API(需实名认证)。

  • 记录 API Key 和接口文档(重点关注:请求 URL、参数格式、返回字段,如 citydateforecast 数组)。

2. 在 Dify 中配置高德天气工具

进入 Dify「工具」模块 → 新建 HTTP 工具

  • 参数映射:

key:固定为你的高德 API Key(认证字段)

  • 响应解析:定义 JSON 解析规则(提取 forecast 中的 dateweathertemperature 字段)。

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 天气预报」工具:

  1. 提问包含 天气相关关键词:如「天气」「气温」「预报」「晴雨」「温度」「风力」「降水」等;

  2. 提问涉及 具体城市(需从「开始」节点的 query 变量中提取城市名,如「北京」「上海」);

  3. 未明确拒绝工具调用(如用户未说「不用工具,直接回答」)。

二、参数构造:如何调用高德接口?

严格遵循高德天气工具的参数要求,按以下规则生成调用参数:

| 参数名 | 类型 | 是否必填 | 取值逻辑(从 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 + 大模型 + 外部工具,三步搭建智能天气机器人:

  1. 工具接入:将高德 API 变为 Dify 可用工具;
  2. 流程编排:可视化串联输入、处理、输出;
  3. 指令设计:教模型 “何时、如何、怎样” 调用工具。

这种模式 可扩展性极强 —— 替换工具(如股票、快递 API)和指令,即可快速构建新应用。掌握 Function Calling 核心逻辑,让大模型真正连接真实世界!

文章转载自: 【2025 年最新版】Dify 全链路实战 16:三步搭建智能天气查询机器人(Agent+DeepSeek + 高德天气)