目录
🚀 MCP 深度实践:集成 LangChain 与 Semantic Kernel,打造多工具智能体
✨ 为什么要集成 LangChain / Semantic Kernel?
🚀 MCP 深度实践:集成 LangChain 与 Semantic Kernel,打造多工具智能体
在上篇教程中,我们从零搭建了一个完整的 MCP Server 和 Client,并实现了 AI 模型与本地工具的调用。
今天,我们更进一步,教你如何将 MCP 与 LangChain、Semantic Kernel 等主流 AI 框架集成,构建功能丰富的智能体系统!
✨ 为什么要集成 LangChain / Semantic Kernel?
随着 AI 应用需求不断提升,仅靠单一的 MCP Server 无法满足复杂的业务逻辑。
通过集成 LangChain、Semantic Kernel,可以实现:
-
🌟 统一管理多工具、多数据源
-
🌟 支持链式调用、工作流编排
-
🌟 增强上下文记忆、智能规划执行
-
🌟 大幅提升 AI 交互智能化水平
MCP 相当于 "工具接口",LangChain / Semantic Kernel 则是 "智能大脑"。
二者结合,才是真正的智能体(Agent)架构!
🏗️ 整体架构图
用户提问
↓
LangChain / Semantic Kernel
↓
MCP Client
↓
MCP Server(托管各种 Tools)
↓
工具实际执行任务
↓
执行结果反馈回 LangChain / Semantic Kernel
↓
生成最终回复
🛠️ MCP 与 LangChain 集成实践
1. 环境准备
安装依赖:
pip install langchain openai
pip install mcp-sdk
(假设你的 Server 端已经按照上一篇教程搭建完成)
2. 自定义 LangChain 工具调用 MCP
在 LangChain 中,每个工具(Tool)需要实现 Tool
类。
这里我们封装一个 MCPTool。
from langchain.tools import BaseTool
from mcp.client import MCPClient
class MCPTool(BaseTool):
def __init__(self, tool_name: str, server_url: str):
super().__init__(name=tool_name, description=f"调用 MCP 工具 {tool_name}")
self.tool_name = tool_name
self.client = MCPClient(server_address=server_url)
self.client.connect()
def _run(self, query: str) -> str:
"""同步调用 MCP 工具"""
params = {"directory": "."} # 示例传参,可以根据需要解析 query
result = self.client.call_tool(self.tool_name, params)
return str(result)
async def _arun(self, query: str) -> str:
raise NotImplementedError("暂不支持异步调用")
3. 在 LangChain 中注册 MCP 工具
from langchain.agents import initialize_agent
from langchain.llms import OpenAI
# 初始化 MCP 工具
mcp_tool = MCPTool(tool_name="list_txt_files", server_url="http://localhost:8000")
# 初始化 Agent
agent = initialize_agent(
tools=[mcp_tool],
llm=OpenAI(temperature=0),
agent="zero-shot-react-description",
verbose=True,
)
# 测试提问
response = agent.run("请帮我列出当前目录下所有 txt 文件。")
print(response)
如果一切顺利,LangChain 代理就可以通过 MCP 调用工具,并得到真实结果!
🛠️ MCP 与 Semantic Kernel 集成实践
Semantic Kernel 作为微软开源的智能体框架,也可以轻松集成 MCP。
1. 环境准备
安装依赖:
pip install semantic-kernel
pip install mcp-sdk
2. 封装 MCP 连接器
from semantic_kernel.orchestration.sk_function import SKFunction
from mcp.client import MCPClient
class MCP_SK_Function(SKFunction):
def __init__(self, tool_name: str, server_url: str):
self.tool_name = tool_name
self.client = MCPClient(server_address=server_url)
self.client.connect()
def invoke(self, input):
params = {"directory": "."}
result = self.client.call_tool(self.tool_name, params)
return str(result)
3. 注册到 Kernel
from semantic_kernel.kernel import Kernel
kernel = Kernel()
# 创建 MCP 工具封装
mcp_function = MCP_SK_Function(tool_name="list_txt_files", server_url="http://localhost:8000")
# 将 MCP Function 注册到 Kernel
kernel.skills.add_function("FileTools", "ListTxtFiles", mcp_function)
# 测试调用
result = kernel.skills.get_function("FileTools", "ListTxtFiles").invoke("")
print(result)
这样,Semantic Kernel 也可以通过统一的方式调用 MCP Server 上的所有工具了!
🧠 小结
通过今天的实战,我们完成了:
-
✅ MCP 工具在 LangChain 中作为 Tool 接入
-
✅ MCP 工具在 Semantic Kernel 中作为 Skill Function 接入
-
✅ 打通了 "大模型 → 智能体 → 外部工具" 的闭环
MCP + LangChain / Semantic Kernel,让你的 AI 系统不仅能"对话",还能真正"动手"!
未来还可以探索:
-
多工具组合任务
-
动态选择工具策略
-
上下文记忆增强
-
大规模 Agent 集群编排
🎯 预告:下一步挑战
下一篇博客将继续实战:
-
如何设计 多工具协作链路
-
如何实现 MCP Server 自动发现与动态注册
-
如何做 长任务、多轮任务调度
敬请期待!