2026年一文读懂 Skill 与 MCP 是什么?有什么区别?(附研发各场景 Skill 推荐清单)

一文读懂 Skill 与 MCP 是什么?有什么区别?(附研发各场景 Skill 推荐清单)基于您的问题 我将提供一份将 GitHub 上开源的 Skill 接入 LangChai n 的完整示例 核心路径是通过 MCP 协议实现标准化集成 因为这是当前大模型 工具生态中最通用和推荐 的方法 ref 2 ref 6 此外 我也会简要介绍当 Skill 不是 MCP 服务器时的备选方案 集成路径 核心机制 适用场景 优势 劣势 A MCP 协议集成 推荐 LangChai n 作为 MCP

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。

基于您的问题,我将提供一份将GitHub上开源的Skill接入LangChain的完整示例。核心路径是通过MCP协议实现标准化集成,因为这是当前大模型工具生态中最通用和推荐的方法[ref_2][ref_6]。此外,我也会简要介绍当Skill不是MCP服务器时的备选方案。

集成路径 核心机制 适用场景 优势 劣势
A. MCP协议集成 (推荐) LangChain作为MCP客户端,连接至Skill运行的MCP服务器。 Skill本身已实现为或可包装为MCP服务器。 标准化、解耦、无侵入性,是Agent生态的未来方向[ref_3][ref_4]。 需要Skill支持MCP
B. 自定义Tool封装 提取Skill的核心逻辑,封装成LangChain的BaseTool子类。 Skill是一个提供明确函数/类的Python库。 高度灵活、性能好,可直接复用代码[ref_5]。 需理解源码,有耦合性,工作量大。

路径A:MCP协议集成 (标准且高效)

这是最符合当前Agent工具生态的集成方式。许多新开发的Skill都开始遵循Model Context Protocol (MCP) 标准,通过JSON-RPC over stdio/SSE提供服务[ref_1][ref_3][ref_6]。

前置条件示例项目

假设我们有一个名为 awesome-mcp-skill 的开源项目,它是一个提供“网络搜索”和“天气查询”功能的MCP服务器。项目结构大致如下:

awesome-mcp-skill/ ├── README.md ├── pyproject.toml ├── src/ │ └── awesome_mcp_skill/ │ ├── __init__.py │ └── server.py # 主文件,运行一个MCP服务器 └── skills/ └── search_skill.json # 技能定义文件 

示例步骤代码

步骤1:安装并运行Skill MCP服务器 通常需要按照项目README的指示安装依赖并启动服务器。例如:

# 1. 克隆项目 git clone https://github.com/example/awesome-mcp-skill.git cd awesome-mcp-skill # 2. 安装依赖 (假设使用poetry) pip install poetry poetry install # 3. 启动MCP服务器 (假设使用stdio传输) poetry run python -m awesome_mcp_skill.server # 服务器将在 stdio 上监听,等待客户端连接。 

步骤2:在LangChain应用中配置MCP客户端并集成 LangChain本身不直接包含MCP客户端,但我们可以使用官方@modelcontextprotocol/sdk的Python端口或mcp Python库。以下示例使用一个假设的langchain-mcp桥接库(概念代码,实际实现需参考社区项目,如langchain-communityMCP的支持)来演示。

首先,确保安装了必要的库:

pip install langchain langchain-openai mcp # 安装mcp客户端库 

然后,编写LangChain应用代码:

# filename: mcp_langchain_integration.py import asyncio from langchain.agents import AgentExecutor, create_openai_tools_agent from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate # MCP客户端库 (示例使用官方SDK的Python封装) import mcp.client from mcp import ClientSession, StdioServerParameters from mcp.client import stdio async def main(): # 1. 配置并连接到MCP服务器 # 假设我们已经通过上述bash命令启动了`awesome-mcp-skill`服务器。 # 这里我们通过stdio方式连接到该服务器进程。 server_params = StdioServerParameters( command="python", # 启动命令,实际应为运行服务器的完整命令 args=["-m", "awesome_mcp_skill.server"], # 传递给命令的参数 env=None # 可传递环境变量 ) # 使用上下文管理器建立连接 async with stdio.stdio_server(server_params) as (read, write): async with ClientSession(read, write) as session: # 初始化会话 await session.initialize() # 2. 获取服务器提供的所有工具列表 tools_response = await session.list_tools() mcp_tools = tools_response.tools # 这是一个包含工具定义的列表 # 3. 将MCP工具动态转换为LangChain Tool对象 # 我们需要一个适配函数,将MCP Tool定义转换为LangChain可用的格式。 # 以下是一个简化的转换示例: from langchain_core.tools import BaseTool from typing import Any from pydantic import BaseModel, Field langchain_tools = [] for mcp_tool in mcp_tools: # 为每个工具动态创建输入模式 class DynamicInput(BaseModel): __annotations__ = {} # 根据MCP工具的输入描述动态添加字段 # 这里简化处理,假设所有输入都是字符串参数 for arg_name, arg_spec in mcp_tool.inputSchema.get("properties", {}).items(): __annotations__[arg_name] = str # 使用Field来添加描述 vars()[arg_name] = Field(..., description=arg_spec.get("description", "")) # 创建自定义Tool类 class DynamicMCPTool(BaseTool): name: str = mcp_tool.name description: str = mcp_tool.description or mcp_tool.name args_schema: type = DynamicInput async def _arun(self, kwargs: Any) -> Any: """调用远程MCP工具""" # 调用MCP服务器的call_tool方法 result = await session.call_tool(mcp_tool.name, arguments=kwargs) return result.content[0].text if result.content else "" def _run(self, kwargs: Any) -> Any: """同步调用 - 在异步环境中,我们通常使用_arun""" # 这里简单地在事件循环中运行异步版本 return asyncio.run(self._arun(kwargs)) # 实例化并添加到列表 langchain_tools.append(DynamicMCPTool()) # 4. 创建LangChain Agent prompt = ChatPromptTemplate.from_messages([ ("system", "你是一个强大的助手,可以通过调用工具来获取实时信息。工具列表:{tool_names}"), ("human", "{input}"), ("placeholder", "{agent_scratchpad}"), ]) llm = ChatOpenAI(model="gpt-4o", temperature=0, streaming=False) agent = create_openai_tools_agent(llm, langchain_tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=langchain_tools, verbose=True, handle_parsing_errors=True) # 5. 执行查询 # 假设我们获取到的工具有 `web_search` 和 `get_weather` result = await agent_executor.ainvoke({ "input": "请搜索LangChain的最新版本,并告诉我北京的天气怎么样。", "tool_names": ", ".join([t.name for t in langchain_tools]) }) print("最终结果:", result["output"]) if __name__ == "__main__": asyncio.run(main()) 

代码说明

  1. 建立连接:通过stdio本地运行的MCP Skill服务器建立连接[ref_2]。
  2. 动态工具发现:连接成功后,客户端向服务器请求可用的工具列表(list_tools)[ref_1]。
小讯
上一篇 2026-04-10 22:36
下一篇 2026-04-10 22:34

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/254919.html