编程 MCP in LangChain:无状态协议、Elicitation 与更多特性

2026-09-05 23:15:19

MCP in LangChain:无状态协议、Elicitation 与更多特性

LangChain 官方博客发布了关于 MCP(Model Context Protocol)在 LangChain 中集成的最新进展。文章介绍了 MCP 的采用情况、LangChain 中的无状态协议实现、Elicitation(启发式)机制以及其他重要特性。

MCP 的快速增长

MCP 正在经历爆发式增长:

  • MCP 官方 Tier 1 SDK 的月下载量接近 5 亿次
  • ChatGPT 用户的 MCP 工具调用量增长了 98 倍
  • 越来越多的 AI 应用和平台开始支持 MCP 协议

MCP 已经成为 AI 代理(Agent)与外部工具和数据源交互的事实标准协议。它定义了一套标准化的接口,让 AI 模型可以统一地调用各种工具、查询数据源和执行操作。

什么是 MCP

MCP(Model Context Protocol)是由 Anthropic 发起的开放协议,旨在标准化 AI 模型与外部工具之间的交互方式。

核心概念

MCP 的核心概念包括:

  1. Server(服务器):提供工具和资源的服务端,每个 Server 可以暴露多个工具
  2. Client(客户端):AI 应用或代理,通过 MCP 协议连接 Server 并调用工具
  3. Tools(工具):Server 暴露的可调用函数,AI 模型可以调用它们执行操作
  4. Resources(资源):Server 提供的数据资源,AI 模型可以读取它们获取上下文
  5. Prompts(提示):Server 提供的预定义提示模板,AI 模型可以使用它们

协议架构

MCP 采用客户端-服务器架构,基于 JSON-RPC 2.0 协议进行通信。传输层支持:

  • Stdio:通过标准输入/输出进行通信(适合本地工具)
  • HTTP/SSE:通过 HTTP 和 Server-Sent Events 进行通信(适合远程服务)
  • WebSocket:通过 WebSocket 进行双向通信

LangChain 中的 MCP 集成

LangChain 作为最流行的 AI 代理框架之一,深度集成了 MCP 协议。

无状态协议(Stateless Protocol)

LangChain 中的 MCP 实现采用了无状态协议设计。这意味着:

  • 无会话状态:MCP 客户端不维护与 Server 的会话状态,每次调用都是独立的
  • 可扩展性:无状态设计使得水平扩展变得容易,可以在多个实例之间负载均衡
  • 容错性:如果某个 MCP Server 实例失败,可以无缝切换到另一个实例
  • 简化部署:不需要管理会话亲和性(session affinity),部署更加简单

无状态协议的实现方式是:每次工具调用时,客户端重新建立连接或使用无状态的 HTTP 调用,不依赖之前的会话上下文。

Elicitation(启发式)机制

Elicitation 是 MCP 中的一个重要特性,它允许 Server 主动向 AI 模型提供信息和建议,而不仅仅是被动响应调用。

Elicitation 的工作方式:

  1. Server 可以在响应中包含额外的提示和建议
  2. 这些提示会被注入到 AI 模型的上下文中
  3. AI 模型可以根据这些提示做出更好的决策

例如,一个数据库 MCP Server 可以在返回查询结果的同时,提示 AI 模型"这个查询结果可能不完整,建议使用更宽泛的查询条件"。

Elicitation 使得 MCP Server 不仅仅是被动的工具提供者,还可以成为主动的协作者,帮助 AI 模型更好地使用工具。

工具调用的优化

LangChain 对 MCP 工具调用进行了多项优化:

  1. 批量工具调用:支持在一个请求中调用多个工具,减少网络往返
  2. 工具结果缓存:对相同参数的工具调用结果进行缓存,避免重复调用
  3. 异步工具调用:支持异步调用工具,提高并发性能
  4. 工具调用超时:为每个工具调用设置超时,避免长时间阻塞
  5. 错误重试:对可重试的错误自动重试,提高可靠性

资源和提示的支持

除了工具调用,LangChain 还支持 MCP 的资源和提示功能:

  • 资源读取:AI 代理可以读取 MCP Server 提供的资源,将其作为上下文
  • 提示使用:AI 代理可以使用 MCP Server 提供的预定义提示模板
  • 资源变更通知:当资源发生变更时,Server 可以通知客户端更新缓存

实际使用示例

连接 MCP Server

from langchain_mcp import MCPToolkit

# 连接到本地 MCP Server(通过 stdio)
toolkit = MCPToolkit.from_stdio(
    command="npx",
    args=["-y", "@modelcontextprotocol/server-filesystem", "/path/to/files"]
)

# 获取所有工具
tools = toolkit.get_tools()

在代理中使用 MCP 工具

from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o")
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)

result = agent_executor.invoke({
    "input": "读取项目中的 README.md 文件"
})

使用 Elicitation

# MCP Server 可以在工具响应中包含 elicitation
response = {
    "content": [{"type": "text", "text": "查询结果: ..."}],
    "elicitation": {
        "suggestions": [
            "建议检查相关的日志文件",
            "这个结果可能需要进一步验证"
        ]
    }
}

MCP 生态的发展

MCP 生态正在快速发展,越来越多的工具和平台开始支持 MCP:

主流 AI 平台支持

  • ChatGPT:原生支持 MCP,用户可以直接在 ChatGPT 中使用 MCP 工具
  • Claude:Anthropic 作为 MCP 的发起者,深度集成 MCP
  • Google Gemini:支持 MCP 工具调用
  • Cursor:AI 代码编辑器,支持 MCP 工具
  • Windsurf:另一个 AI 代码编辑器,支持 MCP

常见 MCP Server

  • 文件系统:读写本地文件
  • GitHub:与 GitHub 交互(issues、PR、代码)
  • 数据库:查询和操作数据库
  • 浏览器:控制浏览器进行网页操作
  • Slack:发送和读取 Slack 消息
  • Google Drive:管理 Google Drive 文件
  • PostgreSQL:查询 PostgreSQL 数据库
  • Fetch:获取网页内容

挑战和未来方向

尽管 MCP 发展迅速,但仍面临一些挑战:

  1. 安全性:MCP 工具可以执行各种操作,需要严格的权限控制和沙箱隔离
  2. 可靠性:MCP Server 的质量参差不齐,需要错误处理和降级机制
  3. 标准化:MCP 协议仍在演进中,不同实现之间可能存在兼容性问题
  4. 性能:大量 MCP 工具调用可能导致延迟,需要优化和缓存
  5. 可观测性:需要更好的监控和调试工具来追踪 MCP 工具调用

未来方向包括:

  • 更完善的权限和安全模型
  • 标准化的工具描述和文档
  • 更好的错误处理和重试机制
  • 支持更复杂的工具组合和工作流
  • 与更多 AI 平台和工具的集成

总结

MCP 在 LangChain 中的集成展示了 AI 代理工具调用的标准化趋势。通过无状态协议、Elicitation 机制和工具调用优化,LangChain 为开发者提供了强大而灵活的 MCP 支持。

MCP 的意义在于:

  • 标准化:统一了 AI 模型与外部工具的交互方式
  • 互操作性:不同 AI 平台和工具之间可以无缝协作
  • 生态繁荣:降低了工具开发的门槛,促进了生态的快速发展
  • 开发者体验:开发者可以使用统一的接口集成各种工具

对于 AI 应用开发者来说,了解和使用 MCP 已经变得越来越重要。它不仅可以简化工具集成的工作,还可以让 AI 代理访问更广泛的工具和数据源,从而实现更复杂的任务。

原文链接:https://www.langchain.com/blog/mcp-in-langchain-stateless-protocol-elicitation-and-more

推荐文章

程序员茄子在线接单