MCP(Model Context Protocol,模型上下文协议)是一个开放协议,用于标准化应用程序向大语言模型提供上下文的方式。
有了 MCP,大模型不只是聊天工具了,还能“动手做事”——比如查数据库、记笔记、写代码等等。
大语言模型(LLM)在训练完成后,只能基于训练数据预测并回答用户问题。
这就使得 大语言模型 存在局限性——它们无法主动获取实时数据、控制外部系统或访问特定数据库等操作。
这种情况下怎么办呢?OpenAI 于2023年6月13日正式推出的 Function Calling 就解决了这个问题。
通过编写一个函数,去主动获取实时数据、控制外部系统或访问特定数据库等操作,再将结果给到大语言模型
官网介绍:https://platform.openai.com/docs/guides/function-calling
Function calling 就是让大语言模型拥有了调用外部工具或者函数的能力。
大语言模型本身不具备调用工具的能力,但通过在训练阶段的设计和微调,可以让模型学会判断在什么情况下需要调用工具,生成结构化的数据(如函数名和参数),然后告诉外部程序需要调用哪些函数。
程序(如OpenAI、DeepSeek)与大语言模型(如GPT-4o、DeepSeek R1)的交互流程:
第一步:用户查询 用户向系统提出请求,例如:"今天天气怎么样?"
第二步:构建完整请求 程序将以下内容组合后发送给大语言模型:
工具定义示例:
{
"type": "function",
"name": "get_weather",
"description": "获取指定地点的当前温度。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如:北京,香港"
}
},
"required": ["location"],
"additionalProperties": false
}
}
第三步:模型智能解析 大语言模型理解用户意图(获取北京天气),并按照预定义的接口格式生成结构化的函数调用请求:
{
"type": "function_call",
"id": "fc_12345xyz",
"call_id": "call_12345xyz",
"name": "get_weather",
"arguments": "{\"location\":\"北京\"}"
}
第四步:执行工具调用 程序执行实际函数调用:get_weather("北京")
第五步:回传****信息 程序将上下文信息(原始用户输入和工具调用指令)以及工具调用结果发送给大语言模型
第六步:生成自然语言回复 模型根据工具调用结果,合成流畅、自然的回答
第七步:程序将生成的回复展示给用户,完成一轮完整对话
维护困难:Function Calling 通常与特定模型服务绑定,随着项目规模扩大,会导致函数调用关系复杂、难以维护。
灵活性不足:如果有新的项目需要使用这些外部函数,往往需要复制或迁移函数实现。如果新项目使用的编程语言与原项目不一致,还需要进行语言转换,增加了开发和维护成本。
缺乏统一标准:Function Calling 的实现方式因平台不同而异,缺少统一标准,容易导致代码库碎片化、功能重复开发的问题。
MCP** 的优势**:
MCP 的出现,将工具调用解耦为独立服务,使项目与外部函数分离,并以标准化的服务调用方式,提升了灵活性,实现“一次开发,多处调用”。
MCP 协议规定了统一的调用标准,开发者可以基于该协议编写 MCP Server,并开放出 MCP 服务,供其他项目和开发者复用,极大提升开发效率。
https://github.com/modelcontextprotocol/servers