langgraph中的MCP

        MCP对智能体调用工具进行了标准化,langgraph集成了MCP能力。本文讲解智能体如何集成MCP Tool,首先介绍如何创建自己的MCP服务,然后讲解智能体如何与MCP集成。

    1.创建MCP服务

       智能体可以直接与第三方支持MCP的工具集成,也可以自己开发自己的支持MCP的工具。开发自己的MCP工具有两种方法,一种是在集成在智能体内的本地服务,一种是远程服务。

     1.1安装MCP库

      #pip  install  mcp

     1.2创建本地MCP Server

        创建本地MCP Server非常简单,就是创建一个本地python文件,在其中实现工具的逻辑。如下是一个实现加减乘除的简单计算器工具:

#math_server.py

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Math")

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

@mcp.tool()
def multiply(a: int, b: int) -> int:
    """Multiply two numbers"""
    return a * b

@mcp.tool()
def sub(a: int, b: int) -> int:
    """substract number b from number a"""
    return a - b

@mcp.tool()
def divide(a: int, b: int) -> int:
    """divide number b from number a"""
    return a / b

if __name__ == "__main__":
    mcp.run(transport="stdio")

      1.3创建远程MCP Server

        创建远程MCP Server也非常简单。下面创建一个MCP Server,该工具使用搜索引擎搜索问题,具体代码如下:

#search_server.py

from mcp.server.fastmcp import FastMCP
from langchain_tavily import TavilySearch
import os, json

os.environ["TAVILY_API_KEY"] = "tvly-*"

search_client = TavilySearch(max_results=2)

mcp = FastMCP("Search")

@mcp.tool()
async def search_internet(query: str):
    """Search information about query from Internet."""
    return search_client.invoke(query)

if __name__ == "__main__":
    mcp.run(transport="streamable-http")

        然后直接运行代码启动MCP Sever:

#python search_server.py

     2.集成MCP服务

        在智能体中使用MCP服务是,需要连接到MCP服务并获取服务支持的工具列表,然后把这些工具放入到工具节点中。

        以下代码以一个简单的chatbot集成MCP服务:

from langchain_openai import ChatOpenAI
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import ToolNode, tools_condition

client = MultiServerMCPClient(#实例化MCP client
    {
        "math": {
            "command": "python",
            "args": ["./math_server.py"],
            "transport": "stdio",
        },
        "search": {
            "url": "http://localhost:8000/mcp/",
            "transport": "streamable_http",
        }
    }
)
tools = await client.get_tools() #调用MCP client获取工具列表
#以下代码是基于MCP服务提供的工具构建一个chatbot,已经见过多次,无需赘述

llm = ChatOpenAI(
    model = 'qwen-plus',
    api_key = "sk-*",
    base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1")
llm_with_tools = llm.bind_tools(tools)

class State(TypedDict):
    messages: Annotated[list, add_messages]

graph_builder = StateGraph(State)
def chatbot(state: State):
    return {"messages": [llm_with_tools.invoke(state["messages"])]}

graph_builder.add_node("chatbot", chatbot)

tool_node = ToolNode(tools=tools)
graph_builder.add_node("tools", tool_node)
graph_builder.add_conditional_edges(
    "chatbot",
    tools_condition,
)
graph_builder.add_edge("tools", "chatbot")
graph_builder.add_edge(START, "chatbot")
graph = graph_builder.compile()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值