找回密码
 立即注册
首页 业界区 业界 AI 应用开发的陷阱:MCP 的致命问题

AI 应用开发的陷阱:MCP 的致命问题

尹疋 前天 07:24
将大语言模型(LLM)与外部工具连接,是扩展其能力的主流方法。通过给模型提供工具,它就能查询数据、调用 API,完成更复杂的任务。
提供工具时,可以使用 MCP 模式,简单来说:由一个外部的、集中的工具服务来提供所有工具,开发者写的应用直接调用这个服务,让它去和模型沟通。
这样做表面上简化了开发,开发者不用自己管理工具了。但问题也恰恰出在这里:应用的开发者,失去了对模型上下文的精确控制权。
这是一个根本性的问题,会引发一连串的麻烦。
一个具体的例子:MCP 架构

我们来看看 MCP(Model Context Protocol)这个框架的实现方式。它清楚地展示了这种分离模式。
在 MCP 的世界里,开发者分为两类:

  • Server 开发者:他们负责创建工具。
  • Client 开发者:他们负责写真正面向用户的应用,并调用 Server 提供的工具。
在 /weather.py 这个 Server 示例中,Server 开发者用一个 @mcp.tool() 的修饰符来定义一个工具:
  1. @mcp.tool()
  2. async def get_alerts(state: str) -> str:
  3.     """Get weather alerts for a US state.
  4.     Args:
  5.         state: Two-letter US state code (e.g. CA, NY)
  6.     """
  7.     # ... function logic here
复制代码
工具的名称 get_alerts、它的描述和参数,都由 Server 的开发者在这里定义好了。
然后,一个完全不同的 Client 开发者,在他的应用 client.py 中需要使用工具。他并不会自己定义工具,而是通过代码去“询问”Server 有哪些可用的工具。
[code]## Client开发者写的代码## 向Server询问有哪些可用的工具response = await self.session.list_tools()# 将Server返回的工具列表转换成模型需要的格式available_tools = [{    "name": tool.name,    "description": tool.description,    "input_schema": tool.inputSchema} for tool in response.tools]# 把这个从Server拿到的工具列表,直接传给大模型response = self.anthropic.messages.create(    model="claude-3-5-sonnet",    messages=messages,    tools=available_tools  #
您需要登录后才可以回帖 登录 | 立即注册