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

ReactAgent接入MCP服务工具

MCP介绍与前置准备

Langgrph接入MCP官网

模型上下文协议 (MCP) 是一种开放协议,它标准化了应用程序为语言模型提供工具和上下文的方式。LangGraph 代理可以通过 langchain-mcp-adapters 库使用 MCP 服务器上定义的工具。
在这里插入图片描述

1. 环境安装

需要安装2个三方库

# 自定义MCP开发服务
pip install mcp  
# langchian接入mcp服务
pip install langchain-mcp-adapters

langchain-mcp-adapters 包使代理能够使用跨一个或多个 MCP 服务器定义的工具。

1. MCP通信协议

MCP协议目前为客户端-服务器定义了两种标准传输机制通信:

传输方式使用场景通信方式是否需网络使用
stdio本地工具服务stdin/stdoutmcp.run(transport=“stdio”)
streamable_http远程或本地HTTP服务HTTP流式通信mcp.run(transport=“streamable-http”)

自定义MCP服务

有点类似于fastapi的写法,定义函数,使用装饰器

1.自定义本地MCP服务

from mcp.server.fastmcp import FastMCP
import loggingmcp = FastMCP("Math")@mcp.tool()
def add(a: int, b: int) -> int:"""两数相加"""logging.info(f'调用了add函数,计算{a}+{b}')return a + b@mcp.tool()
def multiply(a: int, b: int) -> int:"""两数相乘"""logging.info(f'调用了multiply函数,计算{a}*{b}')return a * bif __name__ == "__main__":mcp.run(transport="stdio")

官方推荐使用logging模块,替代print输出
在这里插入图片描述

2. 自定义Http方式的MCP服务

from mcp.server.fastmcp import FastMCP
import loggingmcp = FastMCP("Weather")@mcp.tool()
async def get_weather(location: str) -> str:"""获取城市天气信息."""logging.info(f"正在获取{location}天气信息...")return "最近成都一直阴天"if __name__ == "__main__":mcp.run(transport="streamable-http")

Agent中接入MCP工具

1. 接入本地mcp工具配置

{"math": {"command": "python","args": ["/absolute/path/to/math_server.py"],"transport": "stdio",}
}

固定写法,
command:使用python运行。
args:绝对路径
transport:运行方式。本地"stdio"

ps.本地mcp不用先运行,在agent使用过程中,会自动运行加载调用的

2. 接入http方式的mcp工具

{"weather": {"url": "http://localhost:8000/mcp","transport": "streamable_http",}
}

相当于是一个接口,获取数据。
这个方式需要提前启动运行mcp服务
在这里插入图片描述

url:部署地址 + /mcp
trasport: http服务 streamable_http

3. 获取工具

import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClientasync def main():client = MultiServerMCPClient({"math": {"command": "python","args": ["/Users/szr/PycharmProjects/LLM_study/MCP服务/local_mcp.py"],"transport": "stdio",},"weather": {"url": "http://localhost:8000/mcp","transport": "streamable_http",}})tools = await client.get_tools()print(tools)if __name__ == '__main__':asyncio.run(main())

在这里插入图片描述

3. 在agent中使用

需要借助 langchain_mcp_adapters这个三方库

import os
import dotenv
import asyncio
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
from langchain_mcp_adapters.client import MultiServerMCPClientdotenv.load_dotenv("../.env")llm = ChatOpenAI(model=os.getenv("CHAT_MODEL"),base_url=os.getenv("BASE_URL"),api_key=os.getenv("DEEPSEEK_API_KEY")
)async def main():client = MultiServerMCPClient({"math": {"command": "python","args": ["/Users/szr/PycharmProjects/LLM_study/MCP服务/local_mcp.py"],"transport": "stdio",},"weather": {"url": "http://localhost:8000/mcp","transport": "streamable_http",}})tools = await client.get_tools()agent = create_react_agent(model=llm,tools=tools,prompt='你是一个机器人助手,可以通过已有工具获取一些信息用于回答用户的问题。')math_response =await agent.ainvoke({"messages": [{"role": "user", "content": "请计算365*(12+7)的结果?"}]})print(math_response)print("====="*16)weather_response =await agent.ainvoke({"messages": [{"role": "user", "content": "成都最近的天气怎么样?"}]})print(weather_response)# 运行异步函数
tools = asyncio.run(main())

mcp服务输出日志:
在这里插入图片描述
输出内容不方便查看,修改了一下输出内容。只输出content

for item in math_response['messages']:print(item.content)

在这里插入图片描述

http://www.xdnf.cn/news/1433899.html

相关文章:

  • WMT2014:机器翻译领域的“奥林匹克盛会“
  • 【Unity开发】丧尸围城项目实现总结
  • 双八无碳小车cad+三维图+仿真+设计说明书
  • 快速入门Vue3——基础语法
  • SpringBoot RestTemplate 设置http请求连接池
  • 一个真正跨平台可用的免费PDF解决方案
  • 同步整流芯片为何容易受损?如何应对呢?
  • 第十七讲:编译链接与函数栈帧
  • 电机控制(二)-控制理论基础
  • 互联网向无线通信发展的关键历史时期
  • 睿思芯科正式加入龙蜥社区,携手共建 RISC-V 服务器生态新标杆
  • thinkphp6通过workerman使用websocket
  • ArkUI核心功能组件使用(一)
  • 强化学习PPO/DDPG算法学习记录
  • 01 - 网页和web标准
  • Spring Boot数据脱敏方案
  • java-设计模式-5-创建型模式-建造
  • quant, 量化交易,合约,期货心得,短线交易心得
  • Vue3 + GSAP 动画库完全指南:从入门到精通,打造专业级网页动画
  • 人工智能与强化学习:使用OpenAI Gym进行项目开发
  • 【小白笔记】使用 robocopy 解决大文件复制难题:从踩坑到精通
  • 第四届可再生能源与电气科技国际学术会议(ICREET 2025)
  • 如何修改 Docker 默认网段(网络地址池)配置:以使用 10.x.x.x 网段为例
  • CH01-1.1 Exercise-Ordinary Differential Equation-by LiuChao
  • 【代码随想录day 22】 力扣 131.分割回文串
  • DevOps部署与监控
  • MATLAB矩阵及其运算(四)矩阵的运算及操作
  • 集群无法启动CRS-4124: Oracle High Availability Services startup failed
  • 数据库入门实战版
  • 基于YOLOv4的无人机视觉手势识别系统:从原理到实践