圖片來源:https://github.com/modelcontextprotocol/servers

消除自定義集成AI Agent 在獲取數(shù)據(jù)時面臨一個挑戰(zhàn),換句話說,就是如何將 AI Agent 或基于 LLM 的應(yīng)用集成到外部數(shù)據(jù)源中。為了實現(xiàn)無縫集成,已經(jīng)有許多嘗試,例如利用 GUI、Web 瀏覽器和 Web 搜索等方式。這些方法各有優(yōu)劣。

image

MCP 的潛力

MCP 有潛力成為一個通用接口,可以將其視為 AI 領(lǐng)域的虛擬/軟件版 USB-C。它能夠在 LLM/AI Agent 與外部資源之間實現(xiàn)無縫、安全且可擴(kuò)展的數(shù)據(jù)交換。MCP 采用客戶端-服務(wù)器架構(gòu),其中 MCP 主機(jī)(AI 應(yīng)用)與 MCP 服務(wù)器(數(shù)據(jù)/工具提供方)進(jìn)行通信。開發(fā)者可以使用 MCP 構(gòu)建可復(fù)用、模塊化的連接器,并利用針對主流平臺的預(yù)構(gòu)建服務(wù)器,從而打造一個由社區(qū)驅(qū)動的生態(tài)系統(tǒng)。MCP 的開源特性鼓勵創(chuàng)新,允許開發(fā)者擴(kuò)展其功能,同時通過精細(xì)化權(quán)限控制等特性確保安全性。最終,MCP 旨在將 AI Agent 從孤立的聊天機(jī)器人轉(zhuǎn)變?yōu)榫邆渖舷挛母兄芰Α⒖苫ゲ僮髑疑疃燃捎跀?shù)字環(huán)境的系統(tǒng)。

逐步指南

Anthropic 的 Model Context Protocol(MCP)是一個開源協(xié)議,用于將 LLM 連接到上下文、工具和提示詞。它支持越來越多的服務(wù)器(server),可以用于連接各種工具或數(shù)據(jù)源。在本指南中,我們將演示如何將 MCP 服務(wù)器連接到 LangGraph agents,并使用 MCP 工具……如果你和我一樣,那么無論原型多么簡單,能夠讓它運(yùn)行起來都會帶來極大的清晰感和理解力——至少在我的思維方式里是這樣的。

開始之前

請打開終端應(yīng)用(Terminal)。下面是在 MacBook 上找到它的位置:

image

在終端窗口中,創(chuàng)建兩個選項卡;我們將在一個選項卡中運(yùn)行服務(wù)器,在另一個選項卡中運(yùn)行客戶端。

創(chuàng)建虛擬環(huán)境并安裝依賴

推薦的最佳實踐是在虛擬環(huán)境中安裝和運(yùn)行代碼。使用以下命令創(chuàng)建名為 MCP_Demo 的虛擬環(huán)境:

python3 -m venv MCP_Demo

然后運(yùn)行以下命令激活(進(jìn)入)虛擬環(huán)境:

source MCP_Demo/bin/activate

激活后,你會看到命令行提示符更新為 (MCP_Demo),表示已進(jìn)入該虛擬環(huán)境。

安裝必要的依賴按順序運(yùn)行以下命令安裝所需的 Python 包:

pip install langchain-mcp-adapters
pip install langchain-mcp-adapters
export OPENAI_API_KEY=

請將

替換為你的 OpenAI API Key。

創(chuàng)建并運(yùn)行 MCP 服務(wù)器

創(chuàng)建 Python 服務(wù)器文件在終端中運(yùn)行以下命令創(chuàng)建一個文本文件:

vim server.py

粘貼以下 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
if __name__ == "__main__":
    mcp.run(transport="stdio")

保存并關(guān)閉文件在

vim

中,按

ESC

,輸入

:wq

并回車。

運(yùn)行 MCP 服務(wù)器使用以下命令啟動服務(wù)器:

python3 math_server.py

運(yùn)行后,終端不會有明顯的輸出,界面會如下所示:

image

創(chuàng)建并運(yùn)行 MCP 客戶端

在一個終端標(biāo)簽頁運(yùn)行 MCP 服務(wù)器的同時,打開另一個終端標(biāo)簽頁,按照以下步驟操作:

創(chuàng)建客戶端文件在新的終端標(biāo)簽頁中,運(yùn)行以下命令創(chuàng)建

client.py

文件:

vim client.py

粘貼以下 Python 代碼

# 創(chuàng)建與 stdio 連接的服務(wù)器參數(shù)
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from langchain_mcp_adapters.tools import load_mcp_tools
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
import asyncio
# 使用 GPT-4o 作為 LLM 模型
model = ChatOpenAI(model="gpt-4o")
# 設(shè)置服務(wù)器參數(shù)
server_params = StdioServerParameters(
    command="python",
    # 請確保更新為 math_server.py 文件的完整絕對路徑
    args=["math_server.py"],
)
# 定義異步任務(wù)運(yùn)行 agent
async def run_agent():
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            # 初始化連接
            await session.initialize()
            # 加載工具
            tools = await load_mcp_tools(session)
            # 創(chuàng)建并運(yùn)行 agent
            agent = create_react_agent(model, tools)
            agent_response = await agent.ainvoke({"messages": "what's (3 + 5) x 12?"})
            return agent_response
# 運(yùn)行異步函數(shù)
if __name__ == "__main__":
    result = asyncio.run(run_agent())
    print(result)

運(yùn)行 MCP 客戶端在終端中執(zhí)行以下命令運(yùn)行客戶端:

python3 client.py

觀察運(yùn)行結(jié)果客戶端會運(yùn)行一次,并輸出類似如下的結(jié)果:

{
    "messages": [
        {
            "content": "what's (3 + 5) x 12?",
            "id": "87a8b6b6-9add-4da7-aea5-1b197c0fc0f5"
        },
        {
            "tool_calls": [
                {
                    "id": "call_1eyRzR7WpKzhMXG4ZFQAJtUD",
                    "function": {
                        "arguments": "{"a": 3, "b": 5}",
                        "name": "add"
                    },
                    "type": "function"
                },
                {
                    "id": "call_q82CX807NC3T6nHMrhoHT46E",
                    "function": {
                        "arguments": "{"a": 8, "b": 12}",
                        "name": "multiply"
                    },
                    "type": "function"
                }
            ]
        },
        {
            "content": "The result of \(3 + 5\) \times 12\ is 96."
        }
    ]
}

總結(jié)

MCP 是一個強(qiáng)大且便捷的方式,可以將 AI Agent 與外部信息和服務(wù)集成,從而提供更豐富的上下文和記憶能力。

原文轉(zhuǎn)載自:https://mp.weixin.qq.com/s/pvJ8s23K13Ai2r7LxQ3XsQ

上一篇:

2025年最佳多模態(tài)大模型排名

下一篇:

Python 中有哪些常用的 API?
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費