很抱歉,您提供的prompt系列58. MCP - 工具演变是一个特定的提示或,而不是一个具体的问题或文本内容。因此,我无法直接为您解密或提供具体的内容。如果您能提供更多的上下文或者具体的问题,我会很乐意帮助您解答或提供相关信息。例如,如果MCP指的是某个
摘要:作为`结构化推理`的坚定支持者,我一度对MCP感到困惑:Agent和工具调用的概念早已普及,为何还需要MCP这样的额外设计呢?本文就来深入探讨MCP,看看它究竟解决了什么问题。我们将分几章解析MCP:本章理清基础概念和逻辑,后面我们直接以一
作为结构化推理的坚定支持者,我一度对MCP感到困惑:Agent和工具调用的概念早已普及,为何还需要MCP这样的额外设计呢?本文就来深入探讨MCP,看看它究竟解决了什么问题。
我们将分几章解析MCP:本章理清基础概念和逻辑,后面我们直接以一个Agent为例演示全MCP接入的实现方案。
工具调用方式的演进
大模型调用工具的概念从ChatGPT亮相后就被提出,其表达形式经历了三个阶段演变:
1. 函数表达阶段
早期的工具描述多采用简单的函数形式,通常通过提示词(Prompt)要求模型输出包含工具名称和参数的JSON对象。例如下面的System Prompt期望模型输出JSON结构来调用天气查询工具:
system_prompt = """你是一个智能助手,可以帮助用户查询天气。
如果你需要查询天气,请调用一个名为 'get_current_weather' 的工具。
这个工具需要一个 'location' (字符串,必填) 参数,表示要查询天气的城市。
请以 JSON 格式输出工具调用,例如:
{"tool_name": "get_current_weather", "parameters": {"location": "上海"}}
"""
模型可能输出
{
"tool_name": "get_current_weather",
"parameters": {
"location": "北京"
}
}
这种方式存在明显痛点:
缺乏统一标准:工具描述格式五花八门
推理脆弱:JSON缺乏强约束,易出现格式错误
解析繁琐:需额外编写解析代码
2. 标准化工具定义
2023年6月,OpenAI推出的Function Calling功能是一个重要转折点。它引入JSON Schema标准化工具描述,明确定义:
工具名称(name)
功能描述(description)
参数列表(parameters),包含类型、描述、是否必填等
{
"name": "get_current_weather",
"description": "获取指定地点的当前天气信息",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市名称,例如:旧金山、上海"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度单位,摄氏度或华氏度"
}
},
"required": ["location"]
}
}
3. 引入结构化推理
虽然OpenAI,Anthropic等闭源模型先后推出了Function Calling的接口能力,但是众多开源模型仍无法使用类似的能力,并且手工编写工具的JSON Schema也较为复杂。
而转折点则是24年结构化推理的普及,基于掩码的结构化推理能力(不熟悉的朋友看这里LLM结构化输出)不仅显著提升了模型生成工具JSON Schema的准确性,同时还让Pydantic这个数据验证和解析库进入了大家的视野中。
像Langchain、LlamaIndex、DSPY等开源框架都开始引入Pydantic来自动生成工具的JSON Schema。这样不仅解析部分能自动化标准化,生成工具描述的部分同样也被标准化。
