当前位置: 首页 > news >正文

FC(Function Calling)和MCP详解(区别、作用、运用场景)

前言

我之所以记录这一块的内容,是因为在开始学习MCP的时候,网络上的各路教程我感觉都不太成熟。

在之前有过学习SpringAI的实战经验,对FunctionCalling有过研究和使用经验,在接触MCP之后,发现两者的功能和使用场景上有很多相似之处

同时,之前的笔记,我记录过对两者的理解

而现在正式开始学习MCP的时候,又有了新的理解,由此记录一下

开头直接给总结

FC是功能,MCP是协议

FC是指大模型拥有可以调用函数Tools去解决用户问题的功能

而Tools分为本地的和外部的,我之前SpringAI项目的FC就是调用本地的Tool

MCP呢就是把Tools的设计做了规定

打包到MCP Server当中,也就是抽取出来,单独的进行分布式的部署的一个外部工具的服务

用于解决,大模型应用开发,设计Tools的工作量,以及单个大模型应用的信息孤岛问题

Function Calling(后写作FC)

在通过网络上资料的具体学习之后,我对FC的整体流程有了新的理解

来看看我之前笔记对FC的理解

而在我具体项目的实现过程中,对FC的使用,可以把链路总结为以下步骤(如果对之前项目感兴趣的朋友可以看我之前的笔记)

这里简单介绍一下,我的FC主要是实现了一个可以提供用户选修课推荐,并且帮助用户挑选合适选修课,以及帮助预约的AI助手

主要工作链路如下:

  1. 用户客户端输入对话内容,传给服务器

  2. 服务器拿到对话内容,结合SystemPrompt的设置,组织好发送给大模型

  3. 大模型会先判断,对话内容需要做的任务,自己的知识库能不能完成,很明显不能完成

  4. 在不能完成的时候,大模型会通过组织好的prompt去判断调用哪个Function函数,然后去调用服务器的函数

  5. 服务器调用函数之后,获取返回值,再次发送给大模型

  6. 大模型通过函数返回值组织语言回复给用户

这里的几个关键点在于,大模型如何知道自己有哪些函数可以调用,以及什么时候去调用函数,又以什么方式入参?

这里就需要涉及到Prompt的设计以及description的设计了

Prompt设计

我们可以在Prompt当中,设计好整个服务流程,引导大模型去服务,同时,也需要处理好各种特殊情况,在Prompt当中就设计好,各种情况下,让大模型去调用具体哪个函数

@Tool、@ToolParam注解

ElectiveCourseQuery具体入参详情

Tool注解可以把每个函数,打包在提问时,组装到Prompt里面传给大模型,为后续大模型提供选择,里面的description参数可以告诉大模型,当前函数的作用

结合Prompt的设计,可以让大模型知道,具体什么情况下可以调用这个函数

ToolParam注解,可以设置description,告诉大模型,从Prompt当中通过哪些关键字去获取参数,然后设计入参

这就是FC的一个实现链路过程,但是这个过程当中,具体哪一块是属于FC的呢?

它和MCP的区别还有各自的运用场景在哪呢?不急我会继续讲

MCP(Model Context Protocol)

全称叫做模型上下文协议

看着很高大上,其实你看完就知道,他本质上不能称之为一项技术,而是一个规定

首先,我们要知道,MCP这个协议里面,规定的几个特殊名词

  • MCP服务器:MCP Server

    • 首先,请各位把传统网络协议那一块的联想打住,这个Server我觉得取名其实是有一点误导性的,它其实和传统意义上的联网的服务器不是一个东西,如果要让我自己找个相似的东西,它可能叫做MCP Project更合适一点,也就是一个项目,然后这个项目符合MCP的协议

    • 举个例子,我上面FC写的是一个可以提供查询、推荐、预约选修课的项目,这个整体,如果能让它符合MCP协议,那它就是一个MCP Server了,我们可以取名叫做 ElectiveCourseServer

    • 也就是说,MCP Server本质上是一个独立的项目/程序/应用,相信老练的同学已经闻到了,微服务、RPC相关的气味了

  • Tool:MCP Server里的模块

    • 这个Tool是什么呢?和FC里面的Tool什么关系呢?你没有想错,这俩其实是一个东西,就是函数

    • 一个项目里面,肯定有多个函数,每个函数对应各自的功能模块,还是拿我上面的FC举例子,一个Tool是根据条件查课程、另一个Tool是根据条件查校区、还有一个Tool是帮用户预约课程,信息落库.....

    • 一个Server里面有这个领域相关的多个Tool,例如一个天气相关的Server,可能包含根据经纬度查询天气、根据省市查询天气 等等Tool,总而言之,使用这个Server,本质上是去调用Server里面的某个Tool,设置好入参,然后获取出参,你看,是不是和FC一模一样

综上所述,我们就知道MCP是干什么的了

本质上来说,就是一个符合MCP协议的项目,之所以符合MCP协议,其实就是为了让不同的大模型,或者不同的业务模块,都可以去调用这个服务,或者说调用这个服务当中的某个Tool

FC和MCP的对比

上面简单讲了FC和MCP的理解

可能还是不太清楚两者的区别是什么

我用一张视频的截图来解释

首先我们要知道,FC去调用大模型,本质上是调用大模型提供的API

这里的OpenAI服务器,和我自己写的项目的后端服务器,本质是一个东西

  1. 用户开始会话,会话内容会和Prompt、Tool组装好,交给大模型

  2. 大模型自身知识库无法解决,提取会话内容里面的信息,按照Tool设置的description组装参数,返回给服务器,让服务器调用某个Tool

  3. Tool返回信息后,重新交给大模型

所谓的Function Calling,本质上是一种功能

指的是,某个大模型支持接受由Prompt和Tool等信息组装好的内容

然后分析Prompt的内容,Tool里面的要求,组装参数进行返回的这个功能

也就是图中蓝色框的区域

但是,各种大模型,以及每个人的编码习惯不统一,写项目以及项目里各个模块的章法不同,开发和复用率就很低

MCP就是一个规范的协议

还是拿上面我自己写的选修课这个服务来说,是按照SpringAI的规则来写的,也只支持本地调用,本质上是一个本地的Service

如果我其他项目,想要这个服务,需要把代码copy过去,包括各种配置啥的,复用性差

而如果我的这个选修课服务,满足MCP的规范,那么其他项目就可以通过调用MCP的方式,去调用我这个写好的服务

也就是说,其实我自己写的选修课服务,本质上也是个Server,只不过不是MCP Server

一个MCP Server,满足MCP协议,可以让其他项目复用

现在网上也有各种各样的开源MCP Server,学习了如何使用就可以复用了

还有一个好消息,SpringAI的FC开发,其实很多东西和MCP的协议是一模一样的,所以说,只需要稍微学一下,MCP就可以掌握了

http://www.dtcms.com/a/299587.html

相关文章:

  • 2.JVM跨平台原理(字节码机制)
  • 【Bluedroid】btif_av_sink_execute_service之服务器禁用源码流程解析
  • 零基础学后端-PHP语言(第二期-PHP基础语法)(通过php内置服务器运行php文件)
  • 机器语言基本概念
  • android开发中的协程和RxJava对比
  • DOM元素添加技巧全解析
  • LangChain + MCP 构建带可视化图表功能的ChatBI智能体
  • Git 创建一个完全没有提交历史的 master 分支
  • 【服务器与部署 27】Shell脚本自动化部署:Python应用一键部署让运维效率提升10倍
  • 【Android】广播机制
  • 【LeetCode 热题 100】131. 分割回文串——回溯
  • 谷歌无法安装扩展程序解决方法(也许成功)
  • JDBC教程,2025版最新讲解.超详细入门教程
  • 从UX到AX:从“设计路径”到“共创关系”的范式革命——Agentic Experience如何重塑未来产品哲学
  • 关于Feign的应用
  • 大话数据结构之<队列>
  • PHP框架之Laravel框架教程:1. laravel搭建
  • 方案C,version1
  • 零基础学习性能测试第四章:从0到1学会编写性能测试报告
  • 如何开始学习和使用 BPF/eBP
  • 树上倍增和LCA问题
  • python—————knn算法
  • C++:STL中vector的使用和模拟实现
  • 计算机网络体系结构的核心思想是什么?它有什么用?
  • 大语言模型困惑度:衡量AI语言能力的核心指标
  • 数据结构自学Day15 -- 非比较排序--计数排序
  • MySQL相关概念和易错知识点(2)(表结构的操作、数据类型、约束)
  • 推荐系统(第三课第二周)
  • Deepseek要凉了吗?
  • go-admin 构建arm镜像