张高兴的大模型开发实战:(八)在 Dify 中使用 MCP 协议

目录
  • MCP 是什么
  • Dify 作为 Client:调用外部 MCP 工具
    • 搭建 MCP 天气服务端
    • 在 Dify 中接入“天气感知”能力
  • Dify 作为 Server:被外部应用调用
    • 搭建“翻译专家”工作流
    • 启用 MCP 服务
    • 在外部 AI 应用中调用

在之前的博客中已经介绍了 MCP 的概念,以及在 LangChain 中如何使用 MCP 协议。今天这篇博客,将带大家实战如何在 Dify 中实现 MCP 场景。在开始正式的内容前,还是先简单的介绍一下 MCP。

MCP 是什么

想象一下,你想要构建一个超级 AI 助手,它不仅能陪你聊天,还能帮你查询实时天气、读取本地数据库里的库存信息等。为了实现这些功能,在过去,你需要为每一个外部工具编写特定的“适配器”。AI 模型本该是通用的智能大脑,但连接外部世界(工具和数据)的方式却极其割裂和破碎,需要花费大量时间在“对齐接口”这种低效的重复劳动上,MCP 协议应运而生。可以把 MCP 想象成 AI 世界的 USB 接口。USB 的出现改变了一切,它提供了一个统一的标准:无论你是鼠标、键盘还是 U 盘,只要符合 USB 协议,插上就能用。MCP 就是要成为 AI 与外部数据/工具连接的 USB 标准。它将世界分成了两端:

  • Host (主机端):需要使用工具的 AI 应用,比如 Claude Desktop 客户端、Dify。
  • Server (服务端):提供特定能力的工具,比如一个能查天气的 Python 脚本,或者一个连接 MySQL 数据库的服务。

只要 Host 和 Server 都支持 MCP 协议,它们就能瞬间“握手”成功,Host 能够自动理解 Server 提供了什么工具,需要什么参数,而无需人工再去编写复杂的接口定义。

Dify 在 MCP 的生态中,它既可以是“插U盘的主机”,也可以是“被别人插的U盘”。

  • Dify 作为 Client (主机端):调用外部能力。
  • Dify 作为 Server (服务端):暴露自身能力。这可能是更有趣的一点,比如在 Dify 里精心编排了一个复杂的工作流,这个工作流本身可以被封装成一个标准的 MCP 工具。这意味着,在其他 AI 应用中,可以直接调用在 Dify 里搭建好的这个强大的 Agent。

Dify 作为 Client:调用外部 MCP 工具

在这一部分,想让 Dify 的 AI 助手拥有“感知”当下天气的能力,而不是在那胡诌过去的训练数据。即将 Dify 作为一个“主机”,让它去连接一个 MCP Server。

搭建 MCP 天气服务端

首先,需要一个能够“说” MCP 协议的服务端。这里用到了 Python 的mcp库。

/* by 01022.hk - online tools website : 01022.hk/zh/pagecode.html */ pip install mcp httpx

创建一个 Python 文件weather_server.py实现天气查询的 MCP 服务,不需要手写复杂的协议握手代码,只需要用几个简单的装饰器即可。使用免费的 Open-Meteo API 进行天气查询。

/* by 01022.hk - online tools website : 01022.hk/zh/pagecode.html */ import httpx from mcp.server.fastmcp import FastMCP # 初始化 FastMCP 服务器 mcp = FastMCP("Weather Service", host="0.0.0.0", port=8000) async def _get_lat_long(city_name: str): """ 内部辅助函数:使用 Open-Meteo Geocoding API 将城市名称转换为经纬度。 """ url = "https://geocoding-api.open-meteo.com/v1/search" params = {"name": city_name, "count": 1, "language": "zh", "format": "json"} async with httpx.AsyncClient() as client: response = await client.get(url, params=params) data = response.json() if not data.get("results"): return None location = data["results"][0] return { "name": location["name"], "latitude": location["latitude"], "longitude": location["longitude"], "timezone": location.get("timezone", "UTC") } @mcp.tool() async def get_weather(city_name: str) -> str: """ 获取指定城市的当前天气情况。 输入城市名称(如 'Beijing', 'San Francisco', '上海'),返回温度、风速等信息。 """ # 1. 首先获取经纬度 location = await _get_lat_long(city_name) if not location: return f"错误:未找到城市 '{city_name}'。请尝试使用更具体的名称或英文名称。" # 2. 构建 Open-Meteo API 请求 url = "https://api.open-meteo.com/v1/forecast" params = { "latitude": location["latitude"], "longitude": location["longitude"], "current": ["temperature_2m", "relative_humidity_2m", "apparent_temperature", "weather_code", "wind_speed_10m"], "timezone": location["timezone"] } async with httpx.AsyncClient() as client: response = await client.get(url, params=params) weather_data = response.json() # 3. 解析并返回数据 current = weather_data.get("current", {}) units = weather_data.get("current_units", {}) # 将天气代码 (WMO Code) 转换为文字描述 (简化版) weather_code = current.get("weather_code") weather_desc = "未知" if weather_code == 0: weather_desc = "晴朗" elif weather_code in [1, 2, 3]: weather_desc = "多云/阴" elif weather_code in [45, 48]: weather_desc = "有雾" elif 51 <= weather_code <= 67: weather_desc = "有雨" elif 71 <= weather_code <= 77: weather_desc = "有雪" elif weather_code >= 80: weather_desc = "雷雨/阵雨" return ( f"--- {location['name']} 天气报告 ---\n" f"天气状况: {weather_desc}\n" f"当前温度: {current.get('temperature_2m')} {units.get('temperature_2m')}\n" f"体感温度: {current.get('apparent_temperature')} {units.get('apparent_temperature')}\n" f"相对湿度: {current.get('relative_humidity_2m')} {units.get('relative_humidity_2m')}\n" f"风速: {current.get('wind_speed_10m')} {units.get('wind_speed_10m')}" ) if __name__ == "__main__": # 运行 MCP 服务器 mcp.run(transport="sse")

在 Dify 中接入“天气感知”能力

现在 MCP 服务已经跑起来了,下面需要告诉 Dify 去哪里找到这个服务。回到 Dify 的网页界面:

  1. 点击顶部菜单栏的工具 -> MCP -> 添加 MCP 服务
  2. 在弹出的窗口中填写配置:
    服务端点 URL:http://host.docker.internal:8000/sse
    名称:Weather Service
    服务器标识符:weather-service

如果连接成功,列表里会出现了一个绿色的“已连接”状态,点击展开,Dify 已经自动解析出了在 Python 代码里定义的get_weather函数,甚至连代码里写的注释都变成了工具的描述。

最后,来验证一下效果。

  1. 创建一个新的 Chatflow 应用出行小助手
  2. 删除原有的LLM节点,添加一个Agent节点。
  3. 设置AGENT 策略,如果下拉列表为空,可以在插件市场进行下载。
  4. 配置要使用的模型,并在工具列表中新增刚刚添加的 MCP 服务。在指令中设置提示词。查询设置为用户输入。
    # Role 你是一位专业且贴心的出行规划专家。你擅长分析实时气象数据,提供包含穿衣、交通、安全及活动建议在内的全方位出行方案。 # Constraints 1. 语气专业、友好且富有亲和力。 2. 必须基于 MCP 工具返回的真实数据进行建议,严禁编造天气数值。 3. 输出应条理清晰,多使用列清单,避免大段文字。 # Goals 4. 数据调用:主动调用获取天气的 MCP 工具,获取用户指定目标的实时天气。 5. 多维分析:不仅报告气温,更要分析该天气对出行的具体影响。 6. 精准建议:给出极具参考价值的穿衣指南、交通方式推荐以及针对性提醒(如带伞、涂防晒霜或调整户外行程)。

以上配置完成后,先在右侧进行预览测试。例如“我明天要去北京,查一下天气和穿衣建议。”观察结果发现,Dify 成功获取了北京的天气,并根据天气给出了具体的出行建议。

Dify 作为 Server:被外部应用调用

有时,当你在 Dify 中配置了一个复杂的工作流(Workflow),想要在外部的 AI 应用中进行调用,这时就需要反转视角,将 Dify 作为一个 MCP 服务。在开始案例之前,先添加一个“翻译专家”工作流,作为要被调用的 MCP 服务。

搭建“翻译专家”工作流

  1. 在 Dify 首页点击创建空白应用,选择工作流,命名为翻译专家,开始节点选择用户输入
  2. 点击用户输入节点,添加输入变量chinese,即要翻译的中文。
  3. 添加一个LLM节点,并设置提示词。
    # Role 你是一位资深的翻译专家,擅长将中文翻译为英文。用户的输入是一段中文,请将其翻译成最地道、最专业、最简洁的英文。直接输出翻译后的英文,不要包含任何解释或废话。 # Input {{#1769390459829.chinese#}}
  4. 添加一个输出节点,并设置输出变量english

启用 MCP 服务

  1. 进入工作流,点击左侧列表的设置
  2. 启用 MCP 服务,并添加描述。
  3. 复制服务端点 URL留存备用。

在外部 AI 应用中调用

拿到了 URL 后,在任意支持 MCP 调用的应用中都可以使用刚刚配置好的工作流,这里以 Visual Studio Code 为例。

  1. 点击聊天框中的配置工具按钮,在弹出的顶部菜单中点击添加 MCP 服务器
  2. 选择HTTP,输入刚刚复制的 URL,并设置唯一的服务器 ID
  3. 配置完成后,可以看到 Visual Studio Code 输出的日志,提示已经连接到 MCP 服务。
  4. 配置工具列表中,只勾选刚刚添加的 MCP 服务,用于测试。
  5. 尝试进行对话,Dify 中配置的“翻译专家”被成功调用。

AI 的未来,不在于拥有一个多么巨大的单一模型,而在于协作,MCP 正在迅速成为这种协作的标准语言。这篇博客通过两个简单的案例,介绍了 MCP 在 Dify 中的用法,后续不妨尝试一些更有趣的玩法:

  • 连接物理世界:写一个 MCP Server 控制家里的智能家居(Home Assistant)。想象一下,在 Dify 的对话框里输入“我得睡觉了”,AI 自动帮你关灯、拉窗帘、定闹钟。
  • 连接私有数据:使用mcp-server-sqlitemcp-server-postgres,让 Dify 直接拥有查询你本地业务数据库的能力,生成报表。
  • 打造个人超级助理:在 Dify 里编排好你专属的“周报生成器”、“代码审查器”,然后在 VS Code 里随时呼叫它们,让 AI 真正融入你的工作流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1219303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

比SOTA快9倍,谷歌DeepMind时空重建,把视频变成时空搜索引擎

谷歌DeepMind联合伦敦大学和牛津大学发布了一个叫D4RT的时空重建框架&#xff0c;彻底颠覆了我们把视频变成3D世界的传统路子。 它不再像过去那样笨重地试图一次性把整个世界算出来&#xff0c;而是像一个随叫随到的时空向导&#xff0c;你问它哪里&#xff0c;它就告诉你哪里。…

为什么选Qwen3-1.7B?轻量高效大模型部署指南

为什么选Qwen3-1.7B&#xff1f;轻量高效大模型部署指南 你是否遇到过这样的困扰&#xff1a;想在本地或边缘设备上跑一个真正能用的大模型&#xff0c;却发现动辄十几GB显存占用、推理慢得像在等咖啡凉透、部署流程复杂到需要三小时配环境——最后只能默默关掉终端&#xff0…

一句话搞定部署!Unsloth命令行使用技巧

一句话搞定部署&#xff01;Unsloth命令行使用技巧 你是否还在为大模型微调的漫长等待和显存爆满而头疼&#xff1f;下载、安装、环境配置、依赖冲突……光是准备阶段就耗掉半天时间。其实&#xff0c;用Unsloth训练自己的模型&#xff0c;根本不需要写几十行脚本、不需手动编…

GPEN人像修复实战:一张模糊照如何变高清写真

GPEN人像修复实战&#xff1a;一张模糊照如何变高清写真 你有没有试过翻出十年前的老照片——泛黄、模糊、像素块明显&#xff0c;连亲人的五官都看不真切&#xff1f;又或者刚收到客户发来的低分辨率证件照&#xff0c;却要立刻输出印刷级海报&#xff1f;别急着放弃。今天我…

Qwen3-0.6B技术拆解:为什么它能在低配运行

Qwen3-0.6B技术拆解&#xff1a;为什么它能在低配运行 [【免费下载链接】Qwen3-0.6B Qwen3 是通义千问系列最新一代大语言模型&#xff0c;2025年4月开源&#xff0c;涵盖6款密集模型与2款MoE架构模型&#xff0c;参数量从0.6B至235B。Qwen3-0.6B作为轻量级旗舰&#xff0c;在…

Glyph视觉压缩流程拆解,一步步教你上手

Glyph视觉压缩流程拆解&#xff0c;一步步教你上手 1. 什么是Glyph&#xff1f;先搞懂它到底在解决什么问题 你有没有遇到过这样的情况&#xff1a;想让AI读完一份50页的PDF合同再回答问题&#xff0c;结果模型直接报错“上下文超限”&#xff1f;或者上传一篇万字技术文档&a…

unet image Face Fusion团队协作实践:多人开发环境部署方案

unet image Face Fusion团队协作实践&#xff1a;多人开发环境部署方案 1. 为什么需要团队协作部署方案 人脸融合技术正在从单人实验走向工程化落地。当“unet image Face Fusion人脸融合人脸合成”项目由科哥完成二次开发并交付团队使用时&#xff0c;一个现实问题浮现出来&…

多级流水线在数字电路中的实现:实战案例解析

以下是对您提供的技术博文《多级流水线在数字电路中的实现&#xff1a;实战案例解析》的 深度润色与优化版本 。本次改写严格遵循您的全部要求&#xff1a; ✅ 彻底去除AI腔调与模板化表达&#xff08;如“本文将从……几个方面阐述”&#xff09; ✅ 摒弃所有程式化标题&a…

低成本AI方案:Qwen3-0.6B助力中小企业落地

低成本AI方案&#xff1a;Qwen3-0.6B助力中小企业落地 1. 导语&#xff1a;小模型真能扛大活&#xff1f;中小企业AI落地的转折点来了 你是不是也遇到过这些情况&#xff1a; 想给客服系统加个智能问答&#xff0c;但听说要配A100服务器&#xff0c;光电费一个月就上万&…

小白必备的人脸融合神器,UNet+WebUI一键部署实操分享

小白必备的人脸融合神器&#xff0c;UNetWebUI一键部署实操分享 1. 这不是换脸黑科技&#xff0c;而是你随手就能用的“人脸融合”工具 你有没有过这样的想法&#xff1a;把朋友的脸自然地“放”进一张风景照里&#xff0c;不突兀、不塑料&#xff1b;把老照片里模糊的脸换成…

从录音到生成,CosyVoice2-0.5B完整使用流程详解

从录音到生成&#xff0c;CosyVoice2-0.5B完整使用流程详解 1. 这不是“又一个TTS”&#xff0c;而是声音的即时复刻体验 你有没有试过——只用手机录3秒自己的声音&#xff0c;下一秒就能让AI用你的音色说出完全没听过的话&#xff1f;不是预设音色&#xff0c;不是调参训练…

零基础也能懂:YOLOv12镜像保姆级安装教程

零基础也能懂&#xff1a;YOLOv12镜像保姆级安装教程 你是不是也遇到过这些情况&#xff1f; 下载代码、配置环境、装依赖、调CUDA版本……折腾一整天&#xff0c;连第一张检测图都没跑出来。 或者刚配好环境&#xff0c;运行就报错“ModuleNotFoundError: No module named fl…

OCR模型导出ONNX后大小多少?科哥实测800x800为120MB

OCR模型导出ONNX后大小多少&#xff1f;科哥实测800x800为120MB 1. 为什么ONNX模型大小这么关键&#xff1f; 你有没有遇到过这样的情况&#xff1a;在边缘设备上部署OCR服务时&#xff0c;模型一加载就报内存溢出&#xff1f;或者在嵌入式设备上发现800MB的PyTorch模型根本塞…

AutoGLM-Phone能否用于医疗?健康管理应用可行性分析

AutoGLM-Phone能否用于医疗&#xff1f;健康管理应用可行性分析 1. 什么是AutoGLM-Phone&#xff1a;手机端AI Agent的真实能力边界 AutoGLM-Phone不是又一个“能聊天”的手机App&#xff0c;而是一套真正具备屏幕感知意图理解动作执行闭环能力的轻量化AI代理框架。它不依赖预…

分析欧芭莎的团队专业吗,其教学质量和师资力量如何

近有不少想进入美业学习的朋友,都在问欧芭莎美学学校相关的问题,比如欧芭莎的团队专业吗、欧芭莎的发展前景怎么样、欧芭莎品牌靠不靠谱。今天就围绕这些问题,和大家好好聊聊欧芭莎美学学校。 首先说欧芭莎的团队专…

USB3.2速度与Intel主板兼容性:深度剖析

以下是对您提供的技术博文进行 深度润色与结构优化后的版本 。整体风格更贴近一位资深嵌入式系统工程师/硬件架构师在技术社区中的真实分享&#xff1a;语言自然、逻辑层层递进、去AI痕迹明显&#xff0c;同时强化了“可操作性”和“工程现场感”&#xff0c;删减冗余术语堆砌…

UNet人脸融合镜像使用避坑指南,少走弯路快上手

UNet人脸融合镜像使用避坑指南&#xff0c;少走弯路快上手 1. 为什么需要这份避坑指南 你是不是也遇到过这些情况&#xff1a; 上传两张照片后点击“开始融合”&#xff0c;结果页面卡住不动&#xff0c;控制台报错却看不懂&#xff1b;融合出来的脸像被PS过度&#xff0c;皮…

农业无人机巡检:YOLOv9实现作物病害识别

农业无人机巡检&#xff1a;YOLOv9实现作物病害识别 在华北平原的一片千亩小麦田里&#xff0c;一架搭载高清多光谱相机的无人机正以3米/秒的速度低空掠过。不到15分钟&#xff0c;它已完成对整块田地的扫描——而过去&#xff0c;农技员需要徒步穿行数小时&#xff0c;用肉眼…

2026全国雅思培训口碑排行榜TOP5|权威深度测评,靠谱机构闭眼选

雅思考试是全球认可的语言能力测试,更是学子留学的必经关卡,而选课难、备考无方向、提分效率低等问题,困扰着全国各区县雅思考生——无论是北京朝阳区、上海闵行区、广州天河区,还是成都锦江区、深圳南山区、武汉武…

RISC-V架构下单精度浮点转换硬件实现

以下是对您提供的技术博文进行 深度润色与专业重构后的版本 。我以一位深耕RISC-V硬件加速多年的嵌入式系统架构师身份&#xff0c;用更自然、更具实战感的语言重写全文——去除AI腔调&#xff0c;强化工程语境&#xff0c;突出“为什么这么干”、“踩过哪些坑”、“怎么验证…