Function Calling已经过时 ,MCP才是真正的大模型接口标准

前言

过去一个月,全球大模型圈最热的关键词,非MCP莫属。

模型侧,从Claude到Open AI,从Llama到DeepSeek、通义;

应用侧,从Figma到Unreal,从Milvus到高德地图,全球超过 8,000 个主流工具和软件支持MCP,适配 MCP Server已经成为行业标准动作;

可以说,模型与工具对接标准的大一统时代已经呼之欲出;而借助MCP,人人都是AI应用开发者的时代也正加速到来。

但MCP 是怎么爆红的?会彻底取代Function Calling 吗?MCP 离“事实标准”还有几步?如何使用mcp-server-milvus服务?

针对以上几个问题,我们将在本文中,作出重点解读。

01为什么需要MCP:AI统治世界,还需突破两道墙

为什么在新闻报道中,AI上知天文下知地理无所不能,但是实际生活中,却总感觉差点意思?因为两堵墙的存在。

第一堵墙:信息孤岛

无论你的大模型多么聪明,它的知识都停留在训练结束的那一刻。而世界,是不停地变化的,比如,信息孤岛的最典型例子是大模型永远不知道现在几点。类似的案例还包括:

  • 公司刚发布的年度战略,模型不知道;
  • 某个内网数据库里的用户埋点数据,模型永远接触不到;
  • 项目组昨天刚写完的新接口文档,它也不可能预见。

AI 一旦与现实脱钩,它的回答就注定带有幻觉、偏差,甚至风险。

第二堵墙:遗留系统

大模型只能负责更聪明的推理、计算,但问题是大模型在做完五一旅行规划之后,只有对接上我们的机票、酒店、打车软件,才能完成最终的执行;对企业场景同样如此,只有接入企业的财务、销售、数据库系统,才能真正发挥作用。但现实中

  • 每一家公司的IT系统构成都不一样:MySQL、Oracle、Redis、自研 CRM、私有云部署…
  • 就算有 API,OpenAI 和 Claude 的 Function 调用格式也各不相同,对接是个超级大工程。

img

02搞定大模型困境的三条主流路径

大模型的落地困境说白了,其实就是不知道和干不了。

关于解决这两个问题,业内有以下三个解决思路:

1、RAG,解决不知道的信息孤岛

其核心思路是让大模型实时检索外部知识库(比如公司文档、合规政策、技术资料),再生成回答,把"闭卷考"变成"开卷考"。

但RAG也有局限**,**那就是要想RAG的效果好或者模型表现稳定的话,对接的数据源需要结构化或至少格式统一,背后的工程投入不低;而且,RAG 本身不能“执行指令”或“调用工具”,这就导致其场景被限制在了IMA知识库的范围。

2、Function Calling,同时解决不知道与干不了。

Function Calling的核心思路是让大型语言模型(LLM)直接将用户请求转化为结构化的函数调用指令。模型根据预先定义的函数接口生成调用信息(通常为JSON格式),紧接着,外部应用读取并执行相应函数生成响应。让 AI 不仅能说,还能做。例如:

查天气 → 调用天气API;

开灯关灯 → 调用智能家居接口;

查数据库 → 执行SQL;

img

但Function Calling的问题也不小。

首先,函数定义与对话 Prompt 之间存在强耦合关系,这使得后期的修改和功能升级变得异常困难。开发者通常需要在应用代码中手动、静态地将函数定义嵌入到 Prompt 中,一旦注入聊天上下文,这些定义就“固化”下来,难以动态调整。若要新增或修改功能,只能回头修改代码或 Prompt,开发体验非常割裂。

其次,模型的上下文管理与函数调用逻辑往往在同一个进程中处理,一旦出现异常,轻则调用失败,重则可能导致整个服务崩溃,可靠性难以保障。

更棘手的是,不同大模型平台在函数接口的支持标准上并不统一。比如你想定义一个 search_weather(city) 的函数,放到 OpenAI、Claude 或 Gemini 中使用,就需要分别编写不同的 schema 和包装逻辑。最终的结果是:如果你有 M 个大模型应用、N 个工具或服务,理论上可能需要实现 M × N 套 Glue 代码,不仅开发效率低下,更会带来指数级增长的维护成本,严重制约了规模化落地的可能性。

img

OpenAI Function Calling示例:

OpenAI GPT-4 会返回一个带有function_call字段的JSON对象

{ "index": 0, "message": {  "role": "assistant",  "content": null,  "tool_calls": [   {    "name": "get_current_stock_price",    "arguments": "{\n \"company\": \"AAPL\",\n \"format\": \"USD\"\n}"   }  ] }, "finish_reason": "tool_calls"}

Claude Function Calling 示例:

Anthropic Claude则用内容类型标记tool_use

{ "role": "assistant", "content": [  {   "type": "text",   "text": "To answer this question, I will: …"  },  {   "type": "tool_use",   "id": "1xqaf90qw9g0",   "name": "get_current_stock_price",   "input": {"company": "AAPL", "format": "USD"}  } ]}

Google Gemini Function Calling 示例

Google Gemini使用functionCall

{ "functionCall": {  "name": "get_current_stock_price",  "args": {   "company": "AAPL",   "format": "USD"  } }}

LLAMA Function Calling 示例:

LLaMA采用类似JSON结构

{ "role": "assistant", "content": null, "function_call": {  "name": "get_current_stock_price",  "arguments": {   "company": "AAPL",   "format": "USD"  } }}

建立Function Calling 的思路基础上,MCP 协议(Model Context Protocol,简称MCP)横空出世。

其核心思路是为模型上下文协议引入了一种客户端-服务器的开放架构。通过一套标准,兼容多个工具和数据系统,对模型可以调用和访问的外部能力进行了精细化的拆分,将过去N个模型,M个服务对接需要N*M次开发,简化成了整个系统只需要N+M次开发的数学题。

而从用户侧,通过丰富的工具接入,MCP真正实现了“对话即操作”。

面向普通人,你可以一句话让AI帮你整理电脑桌面,或者一句话打开你家的扫地机器人

面向专业人士,Blender MCP可以让你一句话就自动实现一个3D建模,过程中还能通过和AI聊天不断修改;Figma MCP可以让你一句话自动完成产品原型设计,结合cursor可以让AI直接交付一个网站或者一个app;Unity和虚幻引擎的MCP则可以让你用和AI对话的方式构建一个完整的游戏建模,独立游戏要变天了。

img

具体来说,MCP协议工作生命周期如下:

第一步,初始化:当宿主应用程序(MCP Host)启动时,它会创建N个MCP Client,这些MCP Client通过握手和对应的MCP Server交换有关功能和协议版本的信息。

第二步,发现:MCP Client请求MCP Server提供的能力(Tools、Resources、Prompts)。MCP Server以列表和描述进行响应。

第三步,上下文提供:宿主应用程序现在可以向用户提供Resources和Prompts,或者将Tools解析为LLM兼容的格式,例如JSON Function calling。

**第四步,调用:**如果LLM确定需要使用工具(例如,基于用户请求,如“Milvus实例in01-0bbd6d324ff055e现在处于什么状态?”),则Host会指示Client向相应的Server发送调用请求。

**第五步,响应:**MCP Server将结果发送回MCP Client。

第六步,整合输出:MCP Client将结果传递给MCP Host,主机将其纳入LLM的上下文,从而使LLM能够根据新鲜的外部信息为用户生成最终响应。

img

可以发现,通过统一的接口,MCP除了降低开发难度之外,还可以带来:

**数据实时流动:**相比传统 Function Calling 更像是“写死”的调用逻辑,而 MCP 支持动态的数据交互,工具状态和响应可以实时更新,交互更自然、更智能。

**数据不出本地,隐私保护:**一个被很多人忽视的点是,MCP 的工具执行并不依赖云端远程,很多时候可以在本地完成调用。这意味着数据不用上传,隐私风险也就降到最低。

完整的生态,灵活的工具选择: MCP 支持自动工具发现和上下文管理,模型可以根据对话内容自动判断该用哪个工具。

03MCP很好,但并非全能

随着Claude、open AI、Llama、DeepSeek、通义先后官宣支持MCP,以及应用侧超过 8,000 个主流工具和软件支持MCP,模型与工具对接标准的大一统时代已经呼之欲出。

但MCP并非全能。

首先,对一些非常轻量级的高频任务,比如调用计算器、天气插件来说,能够快速响应的Function Call仍是更优解;MCP更适合相对复杂的任务编排。

其次,不同工具与软件对MCP的支持力度是不同的,MCP Server质量良莠不齐,对于小白用户而言,安全性也存在比较大的风险。目前市面上的主流实践方案,并没有完整实现MCP协议最初的设想,基本上都是在开发Tools,而Prompts和Resource这两层还没有很好的实践案例出来

https://modelcontextprotocol.io/llms-full.txt

img

最重要的是,当前MCP还缺乏大规模在线服务应用的验证

  • 准备这次分享的过程中在Claude3.5和3.7模型下,我挂载30-50个Tool,Prompt驱动模型调用Tool成功率是100%(测试了几十次)但实际跑在线业务的时候,如果有成百上千个Tool,模型是否还能保持稳定?或者是否有更好的工程实践路线?
  • Claude3.5和3.7的token费用现在还是很贵,有没有可能通过混合模型架构来降低成本?
  • 对于一些可能暴露敏感数据的Tool,有可能需要通过本地部署的大模型,例如DeepSeek来驱动,执行质量需要进一步验证(可能针对MCP的模型调优不如Claude)

另外补充一句,MCP实际上只解决了AI Agent的一部分问题。比如,,MCP协议给Tools的使用提供了标准和稳定的解决方案,一定程度上优化了Action的实践路径。但对于Planing和Memory,还需要额外的工程设计和实现。

当前,Planing层面,可能的解决方案是Dify这样的AI工作流编排;

Memory层面,则主要依靠Milvus + 关系型数据库 + Data Warehouse**。**

img

以下是mcp-server-milvus的最佳实践。

04实战案例:mcp-server-milvus项目

背景:mcp-server-milvus项目介绍

该项目包含一个 MCP 服务器,可提供对Milvus向量数据库功能的访问。

项目地址:https://github.com/zilliztech/mcp-server-milvus

第一步:环境准备与配置

说明:本教程不含Python3和Nodejs安装展示,请自行按照官方手册进行配置。

Python3官网:https://www.python.org/

Nodejs官网:https://nodejs.org/zh-cn

图片

第二步:安装UV

curl -LsSf https://astral.sh/uv/install.sh | sh

或者

pip3 install uv -i https://mirrors.aliyun.com/pypi/simple

安装完成之后,我们需要对UV进行验证。

uv --version
uvx --version

图片

第三步:安装Milvus

Milvus 是由Zilliz全球首款开源向量数据库产品,能够处理数百万乃至数十亿级的向量数据,在Github取得3w+star数量。基于开源 Milvus ,Zilliz还构建了商业化向量数据库产品 Zilliz Cloud,这是一款全托管的向量数据库服务,通过采用云原生设计理念,在易用性、成本效益和安全性上实现了全面提升。

通过MCP服务器,开发者无需深入了解Milvus的底层API细节,就可以轻松实现向量数据的实时查询、相似度搜索和数据管理等操作,极大地降低了向量数据库应用的开发门槛。

部署Milvus环境要求,可参考Milvus官网:https://milvus.io/docs/prerequisite-docker.md

必要条件:

  • 软件要求统:docker、docker-compose
  • 内存:至少16GB
  • 硬盘:至少100GB
下载milvus部署文件
[root@Milvus ~]# wget https://github.com/milvus-io/milvus/releases/download/v2.5.4/milvus-standalone-docker-compose.yml -O docker-compose.yml
启动Milvus
[root@Milvus ~]# docker-compose up -d
[root@Milvus ~]# docker ps -a

第四步:Cursor中配置mcp-server-milvus服务

Clone项目到本地

clone https://github.com/zilliztech/mcp-server-milvus.git
优先在本地执行依赖下载

建议:由于网络原因,建议优先在本地执行nv命令进行安装验证后在前往cursor添加mcp-server

uv run src/mcp_server_milvus/server.py --milvus-uri http://192.168.4.48:19530

新增mcp配置

在项目根目录中创建一个.cursor/mcp.json文件:

说明:这里填写自己的文件路径

mkdir -p /path/to/your/project/.cursor
参数说明:

1./PATH/TO/uv

替换uv可执行命令的路径

2.–directory

替换刚才clone下来的项目的完整路径

3.–milvus-uri

替换部署的milvus的服务地址

{  "mcpServers": {    "milvus": {      "command": "/PATH/TO/uv",      "args": [        "--directory",        "/path/to/mcp-server-milvus/src/mcp_server_milvus",        "run",        "server.py",        "--milvus-uri",        "http://127.0.0.1:19530"      ]    }  }}

第五步:实测效果

注意在对话时务必选择Agent模式,否则Cursor是不会引用MCP服务的

图片

首先,检查集群中的集合情况

What are the collections I have in my Milvus DB?
可以看到当前milvus数据库里是没有任何集合的

图片

接下来,创建集合

Create a new collection called 'articles' in Milvus with fields for title (string), content (string), and a vector field (128 dimensions)
MCP自动为我创建了集合

图片

接下来,再次查询集合

What are the collections I have in my Milvus DB?
再次查询的结果是已经查到了刚才创建的集合了

图片

其实,案例里面这个case如果对于不太熟悉Milvus操作的人去做可能是需要半小时起步的时间的;

但通过mcp-server-milvus,跑完整个流程,只需要几分钟时间。

这不仅让开发者可以灵活地管理和查询向量数据,同时充分利用MCP协议的上下文处理优势与大语言模型的理解能力相结合,在海量向量数据中找到最相关的内容,实现更智能的信息检索和处理。

而这种范式,不仅为知识库检索和智能问答系统带来了全新的解决思路,更是一种全新的在线业务运维乃至开发范式:

在未来,运维平台,可能只有一种交互,即对话框+适当的引导信息;而更广义的开发层面,所有人都不再需要学习传统的软件交互范式,只需要理解业务,就能做任何事情,一个想法,就能撬动地球。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

<think>好的,用户现在想了解如何通过函数调用的方式与大型语言模型进行交互,也就是Function Calling的方法和示例。首先,我需要回忆一下相关的知识,确保信息准确。Function Calling允许大模型执行外部函数,比如获取实时数据或与数据库交互,这扩展了模型的能力。 首先,应该解释Function Calling的基本概念,可能引用已有的参考资料,比如用户提供的引用[1]和[2]。然后,分步骤说明如何实现,比如定义函数、构建提示、解析响应和执行函数。用户可能需要具体的示例,所以需要准备一个代码示例,比如获取天气的函数。要注意代码的正确性,使用Python,并且语法正确。 另外,用户的问题可能还涉及到应用场景和注意事项,比如错误处理、权限控制等。需要确保回答结构清晰,分点说明,每个步骤都有例子或说明。同时,生成的相关问题要围绕Function Calling的扩展,比如优化方法、安全措施等。 检查是否遵循了系统级指令,比如数学公式的格式是否正确,使用中文回答,引用标识是否正确添加。最后,确保回答真实可靠,没有编造的信息,引用来源正确。</think>### 通过函数调用与大模型交互的方法 #### 1. **核心原理** 函数调用(Function Calling)通过将外部工具能力与大模型结合,扩展其功能边界。大模型根据用户输入**自动判断何时调用函数**,并将自然语言参数转换为结构化请求,例如: - 用户输入:“北京今天气温多少?” - 模型响应:触发`get_weather(location: str)`函数调用,参数为`{"location": "北京"}`[^2] #### 2. **实现步骤** ##### 步骤1:定义函数清单 ```python functions = [ { "name": "get_stock_price", "description": "获取指定股票实时价格", "parameters": { "type": "object", "properties": { "symbol": {"type": "string", "description": "股票代码,如 AAPL"} }, "required": ["symbol"] } } ] ``` ##### 步骤2:构建提示词 系统提示需包含函数描述: ``` 你是一个财经助手,可以调用以下功能: - get_stock_price:输入股票代码,返回实时价格 ``` ##### 步骤3:解析模型响应 当模型返回函数调用请求时,提取结构化参数: ```json { "function_call": { "name": "get_stock_price", "arguments": "{\"symbol\": \"AAPL\"}" } } ``` ##### 步骤4:执行函数并反馈 ```python def execute_function(function_name, arguments): if function_name == "get_stock_price": return fetch_api(f"https://api.stocks.com/{arguments['symbol']}") ``` #### 3. **完整交互示例** ```python import openai response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "苹果公司当前股价是多少?"}], functions=functions, function_call="auto" ) if response.choices[0].message.get("function_call"): func_args = json.loads(response.choices[0].message.function_call.arguments) result = execute_function(response.function_call.name, func_args) # 将结果返回给模型生成最终回复 ``` #### 4. **关键应用场景** - **实时数据查询**:股票/天气/交通信息 - **业务系统集成**:CRM系统客户数据查询 - **复杂计算委托**:将微积分计算交给SymPy等数学库 - **多模态扩展**:调用图像生成API实现文生图 #### 5. **注意事项** - **错误处理**:需捕获API调用超时/参数错误 - **权限控制**:敏感函数需进行身份验证 - **成本优化**:通过函数描述压缩减少token消耗 - **参数校验**:对模型输出的参数进行类型检查 $$ \text{交互流程} = \text{用户输入} \rightarrow \text{模型解析} \rightarrow \text{函数调用} \rightarrow \text{结果反馈} \rightarrow \text{最终输出} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值