1. 为什么要在 Dify 里接高德地图 MCP 做天气查询
很多人第一次听到「Dify + 高德地图 MCP 搭建天气预报工具」会以为要写一堆后端代码,其实核心工作只有三件:拿到高德 Web 服务的 Key、把高德 MCP Server 挂到 Dify 的 Agent 节点上、再编排一个能查天气的 ChatFlow。做完之后,你在对话框里输入「北京未来三天天气怎么样」,工作流会自动调用高德的地图能力,把结构化天气数据交给大模型润色成一段人话回复。
先说清楚这套东西是什么、能做什么、适合谁。Dify 是一个开源的大模型应用编排平台,你可以用拖拽节点的方式把「用户输入 → Agent 思考 → 调用外部工具 → 大模型总结 → 输出」串成一条流水线。高德地图 MCP 是高德开放平台提供的 Model Context Protocol 服务,它把天气查询、地理编码、路径规划这些能力封装成标准工具,任何支持 MCP 的客户端都能直接调用。MCP 你可以理解成「大模型和外部工具之间的通用插座」——以前每接一个 API 都要写适配代码,现在只要按 MCP 协议填好地址和 Key,工具就能被 Agent 识别并调用。
适合谁跟做:已经跑起来 Dify 服务(本地 Docker 或云版都行)的开发者、想给业务加天气/出行能力的 AI 应用开发者、以及想搞懂 MCP 到底怎么落地的人。不适合完全没碰过 Dify 的人从零硬啃,建议先把 Dify 跑起来再回来。
我实测下来,整条链路最容易卡住的不是 Dify 编排,而是高德 Key 的服务平台类型选错、MCP 地址填错、以及 Agent 策略没选支持 MCP 的那一档。这篇会把这三个坑都标出来,配置片段可以直接复制。
天气预报只是入口。高德 MCP 本身还带路径规划、POI 搜索等能力,你把工具挂上去之后,同一个 Agent 还能回答「从北京南站到首都机场怎么走」「附近有没有充电站」。所以这套配置搭一次,后面扩展场景的成本很低。
下面从申请 Key 开始,一步步走到真实城市天气查询验证成功。
2. 前置准备:高德 Key、Dify 服务与模型 API 怎么配
这一章把动手前需要的东西全部备齐,缺一个后面都会报错。
2.1 高德地图开发者账号与 Web 服务 Key
打开高德开放平台,注册成为开发者(个人认证即可)。进入控制台后找到「应用管理 → 我的应用」,创建一个新应用,名字随便起,比如dify-weather-demo。然后在应用下点「添加 Key」,关键一步来了:服务平台必须选「Web 服务」。很多人手滑选了「Web 端 (JS API)」或「iOS/Android」,结果 MCP 调用时一直 401 或提示 Key 类型不匹配。Web 服务类型的 Key 才是给服务端 HTTP 调用用的,MCP Server 走的就是这条路。
创建成功后你会拿到一串 32 位左右的 Key,先复制到记事本备用。同时在高德开放平台的「MCP Server」快速接入页面,找到 MCP Server 地址,形如https://mcp.amap.com/sse?key=你的KEY或类似的 SSE 端点。不同时期高德给的地址格式可能略有差异,以你控制台里实际显示的为准。这个地址后面要填进 Dify 的 MCP 服务配置。
注意:高德 Key 有配额限制,个人开发者每天调用次数有限,测试阶段够用,别拿去做压测。
2.2 Dify 服务与模型接入
Dify 可以用 Docker Compose 本地部署,也可以用官方云版。本地部署的话,进 Dify 后在「设置 → 模型供应商」里添加一个支持工具调用(Function Calling)的模型。Agent 的 ReAct 模式需要模型能「思考 + 决定调哪个工具」,所以必须选支持工具调用的模型,比如 Qwen 系列的工具调用版本、DeepSeek 的工具调用模型等。纯对话模型挂上去,Agent 节点会报「模型不支持工具调用」。
如果你在模型接入上想省事,可以用 TaoToken 统一管理模型调用。它的 API 地址是https://taotoken.net/api,在 Dify 的 OpenAI-API-compatible 供应商里填 Base URL 和 Key 就能接进来,模型 ID 按你实际用的填。这样切换模型不用改一堆配置。
2.3 需要准备的三件套清单
| 项目 | 用途 | 填写位置 |
|---|---|---|
| 高德 Web 服务 Key | 调用高德 MCP 鉴权 | MCP 服务配置的 URL 参数或 Header |
| 高德 MCP Server 地址 | Agent 识别工具 | Dify Agent 节点外部工具 |
| 支持工具调用的模型 ID | Agent 思考与总结 | Agent 节点 + LLM 节点 |
三件套缺一不可。Base URL、Key、Model ID 这三个概念在后面每个配置节点里都会反复出现,记住它们的对应关系就不会乱。
3. 可复制配置:Dify ChatFlow 与高德 MCP 参数模板
这一章是全文核心,给出可以直接抄的配置片段。先建一个 ChatFlow(不是 Workflow,ChatFlow 才带对话变量sys.query)。
3.1 开始节点
开始节点保持默认即可,它自带sys.query变量,用户输入的问题会存进这个变量。不用额外加字段。
3.2 Agent 节点配置(关键)
在 Agent 节点里,Agent 策略要选支持 MCP 的那一档(不同 Dify 版本叫法可能是「ReAct (Support MCP)」或「Function Calling + MCP」)。模型选你前面接好的工具调用模型。外部工具这里挂两个:
- 获取当前时间(Dify 内置工具,天气查询需要知道「今天」是哪天)
- 高德地图 MCP 服务
MCP 服务配置的 JSON 片段大致长这样,路径和字段名以你 Dify 版本为准:
{ "mcpServers": { "amap": { "url": "https://mcp.amap.com/sse?key=你的高德Web服务Key", "transport": "sse", "enabled": true } } }如果你用的是 stdio 类型的 MCP,配置会换成command+args形式,但高德给的是 SSE 端点,所以用url+transport: sse。填完记得打开「启用 MCP 资源作为工具」这个开关,否则 Agent 看不到高德提供的工具列表。
注意:URL 里的
key=后面直接拼你的高德 Key,不要加引号或空格,否则会 401。
3.3 模板转换节点
Agent 节点输出的结果包含 text、files、json 三部分。天气数据是以结构化 JSON 存在json字段里的,而 LLM 节点不能直接吃 JSON 对象,所以中间加一个模板转换节点,把json字段转成字符串文本。模板里写:
{{ agent_node.json }}变量名按你 Agent 节点的实际输出变量名替换。这一步的作用就是「把结构化数据拍平成纯文本」,别省。
3.4 LLM 节点
LLM 节点的输入接模板转换节点的输出,提示词可以这样写:
你是一个天气播报助手。下面是高德地图返回的天气数据: {{ template_node.output }} 请从中提取城市、日期、天气状况、温度、风力、降雨概率,用 Markdown 表格输出未来三天天气,并在末尾给一句出行建议。模型选同一个工具调用模型即可。这一步负责把机器数据变成人话。
3.5 直接回复节点
把 LLM 节点的输出接到直接回复节点,用户就能在对话框看到 Markdown 格式的天气表。
整条链路:开始 → Agent(调高德 MCP)→ 模板转换 → LLM → 直接回复。节点不多,但每个都得配对。
4. 验证请求:一次真实城市天气查询的完整动作
配置完别急着庆祝,先做一次真实查询验证。
在 ChatFlow 预览窗口输入:北京未来三天的天气如何。正常情况下你会看到 Agent 先思考,然后调用「获取当前时间」拿到今天日期,再调用高德 MCP 的天气工具,拿到 JSON 数据,经过模板转换和 LLM 润色,最后输出一张 Markdown 天气表。
如果输出里包含北京未来三天的日期、天气、温度、风力,说明链路通了。接着打开 Dify 的「追踪」或「日志」面板,逐个节点看数据流转:Agent 节点的json字段里应该有高德返回的原始天气结构,模板转换节点输出应该是字符串,LLM 节点输出应该是 Markdown。哪个节点输出为空,问题就出在那一环。
再测一个边界:输入上海明天会下雨吗。这次 Agent 需要理解「明天」是相对今天而言,所以「获取当前时间」工具必须被调用。如果 Agent 没调时间工具直接查,日期可能算错。这也是为什么前面强调要挂时间工具。
验证通过后,你可以把同一个 Agent 扩展成出行助手,输入从北京南站到首都机场怎么走,高德 MCP 的路径规划工具会被调用。一套配置,多个场景。
5. 常见报错排查:401、local proxy failed、reading choices 怎么解
这一章按真实报错对照排查,遇到问题直接查表。
401 Unauthorized / INVALID_USER_KEY:九成是高德 Key 的问题。检查三点:Key 是不是「Web 服务」类型;URL 里key=后面有没有多余空格或引号;Key 有没有被禁用或超额。改完重新保存 MCP 配置再试。
local proxy failed / connection refused:Dify 访问不到 MCP 地址。先确认 Dify 所在网络能出网访问高德域名;如果是本地 Docker 部署,检查容器 DNS 和网络模式。SSE 连接对网络稳定性有要求,偶发断开可以重试。
reading choices / index out of range:通常是 LLM 节点拿到了空输入。往上查模板转换节点输出是不是空,再往上查 Agent 节点的json字段有没有数据。如果 Agent 根本没调工具,说明 Agent 策略没选支持 MCP 的那档,或者「启用 MCP 资源作为工具」没开。
OAuth / token 相关报错:如果你接的是需要 OAuth 的模型供应商,检查 token 是否过期。用 TaoToken 这类统一网关时,确认 Base URL 填的是https://taotoken.net/api,Key 没填错。
模型不支持工具调用:Agent 节点报这个,换一个支持 Function Calling 的模型 ID。纯对话模型干不了 Agent 的活。
Codex auth.json / CC Switch / Cline MCP 场景:如果你是在这些客户端里配 MCP,同样要写全三件套——Base URL、Key、Model ID。以 Cline 的 MCP 配置为例:
{ "mcpServers": { "amap": { "url": "https://mcp.amap.com/sse?key=你的Key", "transport": "sse" } } }Codex 的auth.json里则要确保模型端点和 Key 对应。CC Switch 切换配置时,确认 MCP 段没被覆盖。
排查顺序建议:先看 Key 和 URL,再看网络,再看 Agent 策略,最后看模型能力。按这个顺序走,大部分问题五分钟内能定位。
6. 把天气工具用起来:接入文档与后续扩展
链路跑通之后,建议把配置沉淀成模板,下次新建应用直接复制。高德 MCP 的工具列表会随平台更新,定期回控制台看有没有新增能力。
如果你在模型接入或 Key 管理上想少折腾,可以走 TaoToken 的接入文档把模型统一管起来,API 地址https://taotoken.net/api,配合接入文档里的说明填 Base URL 和 Key 即可。想先验证模型对话效果,可以直接用模型对话页面试;如果是长期做编码类 Agent 或需要稳定调用额度,看 Coding Plan 更合适;Key 的创建和管理在 API Keys 页面,接入细节查接入文档。
这套 Dify + 高德 MCP 的组合,本质是把「地图能力」变成 Agent 的一个工具。天气只是第一个场景,路径规划、POI 搜索、地理编码都能用同样的方式挂上去。配置一次,扩展无限。