掘金 人工智能 前天 22:54
深入浅出LangChain AI Agent智能体开发教程(八)—LangChain接入MCP实现流程
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了如何利用LangChain框架接入MCP(Model Context Protocol)技术,以实现高效的Agent智能体开发。MCP作为一种模型上下文协议,统一了大型模型调用外部工具的流程,极大地提高了开发效率。文章回顾了MCP的核心概念,并重点阐述了LangChain如何通过MCP Client实现与PlayWright等MCP服务器的对接。通过实例演示,展示了如何将MCP工具函数转换为LangChain的工具,进而构建和执行智能体,例如实现浏览器自动化爬取和总结信息。本系列分享旨在帮助开发者系统掌握LangChain与LangGraph在AI Agent开发中的应用。

📝 **MCP技术统一Agent开发流程**:MCP(Model Context Protocol)由Anthropic提出,旨在解决大模型调用外部工具时因调用方式不统一导致开发效率低下的问题。它通过规范化的server-client架构和开发工具,将Function Calling技术进行封装,使得各种外部工具能够以统一的流程接入大模型,显著加快Agent的开发速度。

🛠️ **LangChain接入MCP的实现方式**:LangChain通过`MultiServerMCPClient`类实现与MCP服务器的连接。该客户端能将MCP服务器提供的工具函数无缝转换为LangChain可识别的工具对象,从而使开发者能够直接在LangChain环境中调用这些工具来构建智能体,极大地简化了集成过程。

🌐 **PlayWright MCP实现浏览器自动化**:文章以PlayWright MCP为例,演示了LangChain接入MCP的具体流程。通过配置`servers_config.json`文件,指定MCP服务器的启动命令和通信方式(如`stdio`),LangChain便能启动MCP Server并将其功能转换为可用的工具。随后,利用这些工具,智能体可以自动执行浏览器操作,如访问指定网站并提取信息,完成自动化任务。

🤖 **构建端到端的MCP Agent**:文章展示了如何结合LangChain的Agent构建流程,包括初始化大模型(如DeepSeek)、使用通用提示词(prompt)以及将MCP工具注入Agent。最终,通过`AgentExecutor`执行智能体,实现与用户的交互,并根据用户指令调用相应的MCP工具完成复杂任务,如内容爬取与总结。

前言

本系列分享前七篇分别讲述了

上篇文章分享了如何利用LangChain调用PlayWright工具函数搭建智能体实现浏览器自动化, 大家学习完成后基本掌握了LangChain编写大模型智能体调用外部工具函数的技巧。随着大模型技术的不断发展,借助MCP技术快速实现智能体已经成为当前智能体开发的首选方法,作为宇宙第一Agent开发框架,LangChain自然也具备与MCP服务器对接的强大功能,本期分享我们一起来学习LangChain接入MCP的完整实现流程。

本系列分享是笔者结合自己学习工作中使用LangChain&LangGraph经验倾心编写,力求帮助大家体系化快速掌握LangChain&LangGraph AI Agent智能体开发的技能!大家感兴趣可以关注笔者掘金账号和系列专栏。更可关注笔者同名微信公众号: 大模型真好玩, 每期分享涉及的代码均可在公众号私信: LangChain智能体开发获得。

一、MCP知识点回顾

MCP(全称是Model Context Protocol,模型上下文协议), 是由Claude母公司Anthropic于2024年11月正式提出。

MCP的核心作用是统一了Agent开发过程中大模型调用外部工具的技术实现流程,从而大幅提高了Agent开发效率。在MCP诞生前,大模型通过Function Calling技术与工具函数对接,不同的工具函数有不同的调用方式,要连接这些外部工具开发Agent就必须“每一把锁单独配一把钥匙”,开发工作非常繁琐。

而MCP的诞生,则统一了这些外部工具的调用流程,使得无论什么样的工具都可以借助MCP技术按照统一的流程快速接入到大模型中从而大幅加快Agent开发效率。这就好比现在很多设备都可以使用type-c和电脑连接。

从技术实现角度,我们可以将MCP看成是Function Calling的一种封装,通过server-client架构和一整套开发工具来规范化Function Calling开发流程。程序员可以根据MCP协议开发包含不同工具功能的MCP服务端,并将这些服务端分享出来方便大家接入,减少了重复的开发工作,大大加速了Agent开发效率。

此前笔者曾分享了MCP从入门到精通的多篇文章,在学习本篇分享前大家需简单了解MCP完整技术体系,详细内容可见笔者掘金专栏: juejin.cn/column/7537…

二、MCP+LangChain基础调用流程

本期分享我们使用LangChain编写代码调用PlayWright MCP实现浏览器自动化。LangChain调用MCP的原理是将MCP的工具函数直接转换为LangChain的工具函数,然后通过预定义的MCP_Client实现与自行编写或者官方MCP Server的读写操作。简而言之,我们只需要使用LangChain编写MCP Client 客户端代码即可。

2.1 环境搭建

    首先在我们之前创建的anaconda虚拟环境langchainenv中执行如下命令安装LangChain MCP的相关依赖:
pip install langchain-mcp-adapters

    其次要调用PlayWright官方的浏览器工具需要本地安装node.js,详细的安装流程这里不再赘述,大家可参考我的文章不写一行代码! VsCode+Cline+高德地图MCP Server 帮你搞定和女友的出行规划(附原理解析)。最后编写配置文件,在项目目录下新建servers_config.json文件,在mcp汇总网站中找到PlayWright的配置并写入servers_config.json文件中,同时添加MCP通信方式的配置项transportservers_config.json完整内容如下, 基本原理是通过npx下载PlayWright MCP Server到本地并通过stdio方式与LangChain搭建的MCP Client进行通信。
{  "mcpServers": {    "playwright": {      "command": "npx",      "args": [        "@playwright/mcp@latest"      ],      "transport": "stdio"    }  }}

2.2 使用LangChain实现MCP Client

    引入相关依赖, LangChain通过MultiServerMCPClient构建MCP服务端连接工具。
import asyncioimport jsonimport loggingfrom dotenv import load_dotenvfrom langchain import hubfrom langchain.agents import AgentExecutor, create_openai_tools_agentfrom langchain.chat_models import init_chat_modelfrom langchain_mcp_adapters.client import MultiServerMCPClient
    创建环境配置类,保存DeepSeek大模型的api_key等相关配置,通过load_servers函数加载mcp服务器配置文件servers_config.json
# ────────────────────────────# 环境配置# ────────────────────────────class Configuration:    def __init__(self) -> None:        load_dotenv()        self.api_key=''        self.model="deepseek-chat"    @staticmethod    def load_servers(file_path = "servers_config.json"):        with open(file_path, "r", encoding="utf-8") as f:            return json.load(f).get("mcpServers", {})
    编写MCP接入智能体, 代码如下:
async def run_chat_loop():    """启动 MCP-Agent 聊天循环"""    cfg = Configuration()    servers_cfg = Configuration.load_servers()    # 1️.连接多台 MCP 服务器    mcp_client = MultiServerMCPClient(servers_cfg)    tools = await mcp_client.get_tools()         # LangChain Tool 对象列表    logging.info(f"✅ 已加载 {len(tools)} 个 MCP 工具: {[t.name for t in tools]}")    # 2️.初始化大模型(DeepSeek / OpenAI / 任意兼容 OpenAI 协议的模型)    llm = init_chat_model(        model=cfg.model,        model_provider="deepseek",        api_key=cfg.api_key    )    # 3️. 构造 LangChain Agent(用通用 prompt)    prompt = hub.pull("hwchase17/openai-tools-agent")    agent = create_openai_tools_agent(llm, tools, prompt)    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)    # 4️. CLI 聊天    print("\n🤖 MCP Agent 已启动,输入 'quit' 退出")    while True:        user_input = input("\n你: ").strip()        if user_input.lower() == "quit":            break        try:            result = await agent_executor.ainvoke({"input": user_input})            print(f"\nAI: {result['output']}")        except Exception as exc:            print(f"\n⚠️  出错: {exc}")

以上代码中的关键部分是LangChain连接多台MCP服务器,首先通过mcp_client = MultiServerMCPClient(servers_cfg)创建MCP Server连接对象,其次通过mcp_client.get_tools()将连接后的MCP Server中的方法全部转换为LangChain可用的工具函数。我们查看mcp_client.get_tools()的源码,可以看到内部调用了load_mcp_tools()函数一键将连接MCP Server的所有工具函数转化为标准的LangChain工具,所以可以直接在LangChain环境中进行使用:

转换之后智能体构建的三要素模型提示词工具函数具备完全,可以使用我们内容讲过的create_openai_tools_agentAgentExecutor构建并执行智能体。

    编写主函数执行智能体,本期分享使用与上篇相同的案例,要求智能体爬取Copilot官方介绍页并总结相关内容"访问这个网站 www.microsoft.com/en-us/micro… 并帮我总结一下这个网站的内容",执行结果如下,可以看到PlayWright MCP自动打开浏览器并导航到相关页面进行爬取分析:

完整代码如下:

"""多服务器 MCP + LangChain Agent 示例---------------------------------1. 读取 .env 中的 LLM_API_KEY / BASE_URL / MODEL2. 读取 servers_config.json 中的 MCP 服务器信息3. 启动 MCP 服务器(支持多个)4. 将所有工具注入 LangChain Agent,由大模型自动选择并调用"""import asyncioimport jsonimport loggingfrom dotenv import load_dotenvfrom langchain import hubfrom langchain.agents import AgentExecutor, create_openai_tools_agentfrom langchain.chat_models import init_chat_modelfrom langchain_mcp_adapters.client import MultiServerMCPClient# ────────────────────────────# 环境配置# ────────────────────────────class Configuration:    def __init__(self) -> None:        load_dotenv()        self.api_key='你注册的DeepSeek API KEY'        self.model="deepseek-chat"    @staticmethod    def load_servers(file_path = "servers_config.json"):        with open(file_path, "r", encoding="utf-8") as f:            return json.load(f).get("mcpServers", {})# ────────────────────────────# 主逻辑# ────────────────────────────async def run_chat_loop():    """启动 MCP-Agent 聊天循环"""    cfg = Configuration()    servers_cfg = Configuration.load_servers()    # 1️⃣ 连接多台 MCP 服务器    mcp_client = MultiServerMCPClient(servers_cfg)    tools = await mcp_client.get_tools()         # LangChain Tool 对象列表    logging.info(f"✅ 已加载 {len(tools)} 个 MCP 工具: {[t.name for t in tools]}")    # 2️⃣ 初始化大模型(DeepSeek / OpenAI / 任意兼容 OpenAI 协议的模型)    llm = init_chat_model(        model=cfg.model,        model_provider="deepseek",        api_key=cfg.api_key    )    # 3️⃣ 构造 LangChain Agent(用通用 prompt)    prompt = hub.pull("hwchase17/openai-tools-agent")    agent = create_openai_tools_agent(llm, tools, prompt)    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)    # 4️⃣ CLI 聊天    print("\n🤖 MCP Agent 已启动,输入 'quit' 退出")    while True:        user_input = input("\n你: ").strip()        if user_input.lower() == "quit":            break        try:            result = await agent_executor.ainvoke({"input": user_input})            print(f"\nAI: {result['output']}")        except Exception as exc:            print(f"\n⚠️  出错: {exc}")# ────────────────────────────# 入口# ────────────────────────────if __name__ == "__main__":    logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")    asyncio.run(run_chat_loop())

三、总结

本期内容分享了LangChain接入MCP服务端的实现流程,基本原理是LangChain编写MCP客户端并将MCP服务端函数通过load_mcp_tools()转化为LangChain可识别函数并构建智能体,本期内容通过PlayWright自动爬虫项目演示了LangChain+MCP的基本流程。学习完MCP主题,下期内容笔者将使用LangChain搭建一个RAG知识库系统,大家期待一下吧!

本系列分享预计会有20节左右的规模,保证大家看完一定能够掌握LangChain&LangGraph的开发能力,大家感兴趣可关注笔者掘金账号和专栏,更可关注笔者的同名微信公众号:大模型真好玩, 本系列分享的全部代码均可在微信公众号私信笔者: LangChain智能体开发 免费获得

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LangChain MCP Agent 智能体 浏览器自动化 PlayWright
相关文章