导语:在AI驱动的系统开发中,工具调用方式深刻影响效率与能力。通过对比三大范式:作为系统基石的传统API、LLM原生的函数调用(Function Calling),以及标准化工具生态的MCP协议。剖析其核心差异(通信模式、工具发现、上下文管理)与适用场景,并揭示LLM如何通过Function Calling表达意图、Agent执行调用、MCP统一规范,实现智能协作。掌握三者定位与协同,是构建高效、可扩展AI应用的关键,开启智能开发新范式。技术史上从不缺少“神话”,而真正的进步,往往始于祛魅之后的清醒认知。并不是所有的技术都是万能石!但我们始终应该保持积极的探索脚步。
传统API通过预定义端点暴露功能,客户端需严格遵循接口规范进行交互。其核心特征包括:
# 传统API调用示例
try:
response = requests.get("https://api.example.com/users", params={"id": 123})
response.raise_for_status() # 检查请求是否成功
except requests.exceptions.RequestException as e:
print(f"请求出错: {e}")
在AI动态场景中缺乏灵活性:无法适应LLM输出的非结构化请求(如模糊意图、多轮交互),需额外转换层
Function Calling,这是OpenAI在API中引入的功能,允许大模型调用外部函数。
相比之下,MCP更通用,是协议标准,而Function Calling是具体实现。
函数调用是LLM内置的交互机制,通过结构化数据触发外部功能:
更多Function Calling细节的可查看之前的文章“ AI宝库-ChatGPT插件能力 ****”
MCP(Model Context Protocol)目的是统一标准化大模型(LLM)与外部工具和数据源的交互方式。MCP被比作AI应用的“USB-C接口”,标准化了工具的接入,解决了数据孤岛和集成复杂的问题。
MCP通过客户端-服务器架构实现工具标准化:
# MCP工具定义示例
@mcp.tool()
def calculate(a: float, b: float) -> float:
"""两数相加"""
return a + b
传统每个API接口或者LLM工具具有定制化的数据结构、不同的指令格式,这种模式导致开发低效,难以扩展,而MCP采用了通用的语言格式(JSON-RPC),能够与所有支持这种协议的工具进行“对话”
MCP不是Function Call的替代,而是基于Function Call的工具箱
MCP架构 ≈ 微服务网关 + 服务注册中心 Function Call ≈ 单体应用中的函数调用
# MCP Client实现
class MCPClient:
def __init__(self):
self.registry = ServiceRegistry() # 服务注册中心
def execute(self, request):
# 服务发现
service = self.registry.discover("data_processor")
# 协议转换
payload = self._format_request(request)
# 安全校验
if not self._validate_token(payload):
raise SecurityError("Invalid token")
# 调用服务
return requests.post(
service.endpoint,
json=payload,
timeout=service.timeout
)
# 具体服务实现
class DataService:
@mcp_endpoint
def process(self, data):
# 业务逻辑
return analyze_data(data)
# 直接函数调用
class DataProcessor:
def __init__(self):
self.tools = {
"analyze": self._analyze,
"transform": self._transform
}
def handle_request(self, tool_name, params):
tool = self.tools.get(tool_name)
if not tool:
raise ValueError("Tool not found")
return tool(params)
def _analyze(self, data):
# 具体实现
return data_analysis(data)
维度 | 传统API | 函数调用 | MCP协议 |
---|---|---|---|
通信模式 | 同步请求-响应 | 结构化JSON交互 | 双向流式通信 |
工具发现 | 硬编码接口 | LLM内置模式匹配 | 标准化服务注册 |
上下文管理 | 无状态 | 会话级上下文 | 持久化上下文 |
跨平台能力 | 依赖具体实现 | 平台绑定 | 标准化协议 |
性能开销 | 高(序列化/网络) | 极低 | 中(协议解析) |
适用场景 | 系统间集成 | 模块化开发 | AI流水线编排 |
适用场景 | 系统间集成 | 模块化开发 | AI流水线编排 |
大模型通过Function Calling表达,我要调用什么工具,Agent遵循指令执行工具的调用,而MCP则是提供了一种统一的工具调用规范。
构建智能客服系统,实现:
# weather_mcp.py
from fastmcp import FastMCP
mcp = FastMCP("weather")
@mcp.tool()
async def get_weather(city: str) -> dict:
"""获取城市天气"""
import requests
url = f"https://api.amap.com/weather?key=YOUR_KEY&city={city}"
response = requests.get(url)
return response.json()
if __name__ == "__main__":
mcp.run(transport="sse", port=8000)
# agent.py
from openai import OpenAI
from mcp import MCPClient
client = MCPClient(servers=["http://localhost:8000/sse"])
openai_client = OpenAI(api_key="sk-xxx")
def handle_query(query):
# LLM意图解析
tools = openai_client.chat.completions.tools(query)
# MCP工具调用
for tool in tools:
result = await client.invoke_tool(
tool.name,
parameters=tool.parameters
)
# 结果合成
return openai_client.chat.completions.synthesize(result)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。