LLM之Agent| 使用Langchain实现模型上下文协议(MCP)

模型上下文协议 (MCP) 是由 Anthropic 开发的开源协议,专注于安全且可解释的生成式 AI 系统。

      MCP 的出现是为了解决大型语言模型(LLM)应用程序的一个关键限制,即它们与外部数据源和工具的隔离。

      MCP 的主要目的是标准化基于 LLM 的应用程序如何连接到不同的系统 ,如下图所示:

    AI Agent的挑战在于传输给Agent数据,换句话说,基于AI Agent/LLM 的应用程序集成到外部数据源。

      MCP 可以用作通用接口,将其视为 AI 的 USB-C,在LLMs/AI Agent和外部资源之间实现无缝、安全和可扩展的数据交换。

       MCP 使用客户端-服务器架构,其中 MCP 主机(AI 应用程序)与 MCP 服务器(数据/工具提供商)。

     开发人员也可以使用 MCP 构建可重用的模块化连接器,并为流行的平台提供预定义的服务器,从而创建一个社区驱动的生态系统。

     MCP 的开源性质鼓励创新,允许开发人员扩展其功能,同时通过精细权限等功能维护安全性。

     最终,MCP 旨在将 AI Agent从孤立的聊天机器人转变为深度集成到数字环境中的上下文感知、可互作的系统。

下面演示一下如何使用Langchain完成MCP全流程:

     在终端开两个窗口,一个用于运行服务器,另一个用于运行客户端。并且最好创建一个python虚拟环境来运行。

首先,创建一个名为MCP_Demo虚拟环境

python3 -m venv MCP_Demo

然后,激活该虚拟环境

source MCP_Demo/bin/activate

再安装相关包和Openai API Key

pip install langchain-mcp-adapters
export OPENAI_API_KEY=<your_api_key>

     最后,在其中一个终端创建一个文本文件:vim 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")

关闭文本文件,使用以下命令启动并运行服务器:

python3 math_server.py

此时,终端不显示任何内容

在另一个终端创建一个文本文件client.py用于客户端

# Create server parameters for stdio connectionfrom mcp import ClientSession, StdioServerParametersfrom mcp.client.stdio import stdio_clientfrom langchain_mcp_adapters.tools import load_mcp_toolsfrom langgraph.prebuilt import create_react_agentfrom langchain_openai import ChatOpenAIimport asyncio
model = ChatOpenAI(model="gpt-4o")
server_params = StdioServerParameters(    command="python",        # Make sure to update to the full absolute path to your math_server.py file        args=["math_server.py"],)
async def run_agent():    async with stdio_client(server_params) as (read, write):        async with ClientSession(read, write) as session:                   # Initialize the connection                        await session.initialize()                                    # Get tools                        tools = await load_mcp_tools(session)                                    # Create and run the agent                        agent = create_react_agent(model, tools)                        agent_response = await agent.ainvoke({"messages": "what's (3 + 5) x 12?"})                        return agent_response            # Run the async functionif __name__ == "__main__":    result = asyncio.run(run_agent())        print(result)

使用运行客户端:python client.py​​​​​​​

{'messages':[HumanMessage(content="what's (3 + 5) x 12?", additional_kwargs={}, response_metadata={}, id='87a8b6b6-9add-4da7-aea5-1b197c0fc0f5'), AIMessage(content='', additional_kwargs={'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'}], 
'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 51, 'prompt_tokens': 77, 'total_tokens': 128, 
'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 
'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 
'model_name': 'gpt-4o-2024-08-06', 'system_fingerprint': 'fp_eb9dce56a8', 'finish_reason': 'tool_calls', 'logprobs': None}, 
id='run-13c01640-f92b-48b7-9340-c2ad983eb1c8-0', tool_calls=[{'name': 'add', 'args': {'a': 3, 'b': 5}, 'id': 'call_1eyRzR7WpKzhMXG4ZFQAJtUD', 'type': 'tool_call'}, {'name': 'multiply', 'args': {'a': 8, 'b': 12}, 'id': 'call_q82CX807NC3T6nHMrhoHT46E', 'type': 'tool_call'}], 
usage_metadata={'input_tokens': 77, 'output_tokens': 51, 'total_tokens': 128, 'input_token_details': {'audio': 0, 'cache_read': 0}, 
'output_token_details': {'audio': 0, 'reasoning': 0}}), ToolMessage(content='8', name='add', id='f8e0aba5-7a62-44c6-92a3-5fe3b07c9bd5', tool_call_id='call_1eyRzR7WpKzhMXG4ZFQAJtUD'), 
ToolMessage(content='96', name='multiply', id='66b9bbd9-b99a-402f-b26c-df83f5a69fa3', tool_call_id='call_q82CX807NC3T6nHMrhoHT46E'), AIMessage(content='The result of \\((3 + 5) \\times 12\\) is 96.', 
additional_kwargs={'refusal': None}, 
response_metadata={'token_usage': {'completion_tokens': 22,'prompt_tokens': 143,'total_tokens': 165, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 
'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 
'model_name': 'gpt-4o-2024-08-06', 'system_fingerprint': 'fp_eb9dce56a8', 'finish_reason': 'stop', 'logprobs': None}, 
id='run-6c00a336-7d52-4917-9186-b282a5984b10-0', usage_metadata={'input_tokens': 143, 'output_tokens': 22, 'total_tokens': 165, 'input_token_details': {'audio': 0, 'cache_read': 0}, 
'output_token_details': {'audio': 0, 'reasoning': 0}})]}

 

 

 大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。


2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书 

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。



4.LLM面试题和面经合集


这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。



👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集***

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

<think>嗯,用户想了解如何在MCPLangChain中调用filesystem功能。首先,我需要明确MCPLangChain各自是什么,以及它们如何与文件系统交互。根据引用内容,MCP模型上下文协议)似乎涉及多个服务,如server-filesystem、Google Drive集成等,可能用于让LLM访问文件系统。LangChain是一个用于构建基于LLM应用的框架,可能也有文件系统相关的工具。 首先看MCP部分。引用[3]提到Spring AI集成Mcp,并调用server-filesystem实现智能本地文件管理。server-filesystem是MCP的一个标准服务,提供本地文件系统的访问。引用[2]中的例子是用MCP服务集成SCP命令上传文件,说明MCP可以通过工具调用执行文件操作。引用[4]提到使用本地LLM教程的MCP服务器,可能涉及文件访问。 那在MCP中调用filesystem功能,可能需要配置对应的MCP服务,比如modelcontextprotocol/server-filesystem,然后通过API或工具调用来执行操作,如列出文件、读取内容等。可能需要编写MCP客户端,像引用[3]中的Mcp Client那样,或者使用现有的工具如microsoft/markitdown来转换文件格式。 然后是LangChain部分。LangChain通常有文档加载器、工具等组件。比如使用FileSystemToolkit或类似的工具来访问文件系统。可能需要结合MCP的服务,将文件系统操作通过LangChainAgent来调用。例如,用户的问题触发某个工具,该工具调用MCP的API来执行具体的文件操作。 需要参考用户提供的引用,特别是引用[3]中的集成例子,可能涉及在Spring AI使用Mcp Client。此外,引用[2]中的示例使用MCP服务集成SCP命令,说明可以通过自定义工具实现特定功能,如上传文件。可能用户需要类似的集成方式,在LangChain中创建工具,调用MCP的文件系统服务。 可能需要分步骤说明:在MCP中配置server-filesystem服务,确保其运行;然后在应用中通过MCP客户端发送请求;在LangChain中创建自定义工具,使用MCP的API或SDK来调用这些功能。同时,注意认证和权限问题,比如免密登录配置,如引用[2]中的例子使用SCP免密传输。 还需要考虑如何将MCP服务与LangChainAgent结合,可能需要使用LangChain的Tool接口封装MCP的调用。例如,定义一个工具函数,当用户输入特定关键词时,触发文件上传或读取操作,如引用[2]中的“上传微信目录”触发SCP上传。 总结,步骤可能包括:1. 部署MCP的filesystem服务;2. 在应用中集成MCP客户端;3. 在LangChain中创建工具调用MCP服务;4. 配置Agent使用这些工具。需要确保代码示例正确,如Python中调用MCP的API,或者使用已有的SDK。</think>### 如何在MCPLangChain中调用Filesystem功能 #### 一、在MCP中调用Filesystem功能 MCP模型上下文协议)通过标准化服务提供文件系统访问能力,以下是具体实现步骤: 1. **部署MCP Filesystem服务** 使用标准实现如 `modelcontextprotocol/server-filesystem` [^3],支持直接访问本地文件系统。 启动服务示例(基于Java/Quarkus): ```bash java -jar mcp-filesystem-server.jar ``` 2. **通过MCP协议调用文件操作** 使用HTTP请求或SDK调用服务接口: ```python # Python调用示例 import requests # 列出目录内容 response = requests.post( "http://localhost:8080/mcp/filesystem/list", json={"path": "/Users/syw/project/wechatAr"} ) print(response.json()) ``` 3. **集成自定义工具** 如引用[^2]中通过MCP集成SCP命令实现文件上传: ```python # 定义触发关键词与SCP命令 def upload_wechat_dir(): os.system("scp -r /Users/syw/project/wechatAr root@47.93.xx.xx:/opt/ll") # 注册到MCP工具库 mcp_tools.register("上传微信目录", upload_wechat_dir) ``` --- #### 二、在LangChain中集成MCP Filesystem LangChain通过工具(Tools)和代理(Agents)机制实现文件操作: 1. **直接使用LangChain文件工具** LangChain内置`FileSystemToolkit`: ```python from langchain.agents import initialize_agent from langchain.tools.file_management import FileSystemToolkit toolkit = FileSystemToolkit() agent = initialize_agent(toolkit.get_tools(), llm, agent="structured-chat") agent.run("读取/Users/syw/project/wechatAr/config.json的内容") ``` 2. **结合MCP服务扩展能力** - **步骤1:封装MCP客户端** 参考Spring AI集成方式[^3],创建Python客户端: ```python class McpFilesystemClient: def list_files(self, path): # 调用MCP服务接口... pass ``` - **步骤2:创建LangChain自定义工具** ```python from langchain.tools import tool @tool("mcp_file_lister") def list_files(path: str) -> str: client = McpFilesystemClient() return client.list_files(path) ``` - **步骤3:代理调用** ```python agent = initialize_agent([list_files], llm, agent="structured-chat") agent.run("列出MCP服务中/opt/ll目录下的文件") ``` --- #### 三、典型应用场景 1. **跨平台文件管理** 通过`Xuanwo/mcp-server-opendal`访问云存储与本地文件[^1]。 2. **LLM增强文件处理** 使用`microsoft/markitdown`将文件转换为Markdown供LLM解析[^1]。 3. **自动化流程触发** 如引用中关键词触发SCP上传,适用于CI/CD场景。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值