当前位置: 首页 > news >正文

LangChain之调用MCP工具

import os
import uuidimport dotenv
import asynciofrom langchain_core.messages import HumanMessage
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.agents import create_agent
from langgraph.checkpoint.memory import MemorySaverfrom main import llmdotenv.load_dotenv()# 配置MCP地址和通信协议# 高德地图 MCP服务端
GAODE_API_KEY = os.getenv('GAODE_API_KEY')
ZHIPU_API_KEY = os.getenv('ZHIPU_API_KEY')from mcp.shared.exceptions import McpErrorasync def run_mcp_agent():max_retries = 3for attempt in range(max_retries):try:print(f"Attempt {attempt + 1}/{max_retries} starting...")client = MultiServerMCPClient({"fetch_mcp_server_config": {"transport": "streamable_http","url": "<fetch的mcp链接>",},"zhipu_search_mcp_server_config": {"transport": "sse","url": f"https://open.bigmodel.cn/api/mcp/web_search/sse?Authorization={ZHIPU_API_KEY}",},"context_mcp_server_config": {"transport": "streamable_http","url": "<数据图像生成的mcp链接>",},"gaode_mcp_server_config": {"transport": "streamable_http","url": f"https://mcp.amap.com/mcp?key={GAODE_API_KEY}",}})tools = await client.get_tools()agent = create_agent(llm,tools=tools)res = await agent.ainvoke({"messages": [HumanMessage(content="联网搜索今日天气")],})print(res)# 自动打开图像import reimport webbrowsermessages = res.get("messages", [])for msg in messages:if hasattr(msg, "content"):content = msg.contentif isinstance(content, list):# Handle list content (e.g. from ToolMessage)for item in content:if isinstance(item, dict) and item.get("type") == "text":text = item.get("text", "")urls = re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', text)for url in urls:if any(ext in url.lower() for ext in ['.png', '.jpg', '.jpeg', '.gif', 'original']):print(f"Opening image: {url}")webbrowser.open(url)breakexcept McpError as e:print(f"MCP Error encountered: {e}")if "Session terminated" in str(e) and attempt < max_retries - 1:print("Session terminated. Retrying...")await asyncio.sleep(2)continueraise eexcept Exception as e:print(f"An error occurred: {e}")raise easyncio.run(run_mcp_agent())

这里举个例子,直接生成的数据分析图像
4a9cf356dde70844f86284a84d02cbd4

MCP工具调用过程可以使用Pycharm插件查看

http://www.zskr.cn/news/143147.html

相关文章:

  • JavaScript —— JavaScript 数据处理和转换工具函数详解
  • RPA重塑医疗运营!从行政负担到智能自动化,破解医疗行业效率与合规双重困境
  • 实邦电子能成为电子产品开发的优质推荐供应商吗?
  • 高危区域安防新范式!RFID+自主无人机集成监控系统的设计、迭代与实践
  • 美团二面:Redis 的 Key 过期时间到了,内存是立马释放的吗?为什么我的主库内存正常,从库却爆了?
  • 看见“黑箱”内部:可解释AI如何赢得工艺专家的信任?
  • 特种控制电缆生产厂家推荐:计算机、太阳能光伏、绝缘电力、屏蔽电缆全品类覆盖(2025年12月新) - 品牌2026
  • 生成式AI落地潮:从技术狂欢到商业价值重构
  • CTF如何选择一个适合自己的方向?
  • 双 Token 机制下的无感刷新(Refresh Token)后端实现
  • Spring Security 进阶:基于 Customizer 的分布式权限配置架构设计
  • SSH会话管理实战:识别与清理非法连接的完整指南
  • 直播预告 | 新一代 DBaaS 平台揭密:自研 SSS Workload 引擎与安全体系深度解析
  • 2025终极免费AI论文写作工具大揭秘!8款一站式服务搞定论文全流程!
  • 网站在Linux 云服务器上从 0 到上线完整
  • 邮件群发工具实验报告
  • TOSHIBA TC4053BFT(EL,N) TSSOP16 模拟开关/多路复用器
  • 1X Technologies推出Home Collection生活周边!以柔软美学重塑家用机器人品牌,降低消费者接受门槛
  • AI全景之第五章第五节:图神经网络(GNN)与几何深度学习
  • 数据安全新选择:访答本地知识库
  • C#(更新中)
  • 横河 AQ6370D 光谱分析仪
  • 体重电子秤MCU芯片方案
  • 永磁同步无传感SMO滑模观测器模型 PMSM的滑模观测器Simulink模型 改进了传统一阶滑...
  • 【C++数据结构进阶】吃透 LRU Cache缓存算法:O (1) 效率缓存设计全解析
  • 长云科技光缆牵引机,大范围速度控制拉缆更高效
  • SolidWorks服务器怎么实现研发软件多人共享、数据安全管理
  • Python函数基础 - 教程
  • 【Linux系统编程】(十七)揭秘 Linux 进程创建与终止:从 fork 到 exit 的底层逻辑全解析
  • 【课程设计/毕业设计】基于springboot+Vue的课程设计选题管理系统设计基于SpringBoot和Vue的毕业设计选题管理系统的设计与实现【附源码、数据库、万字文档】