智能体三阶:LLM→Function Call→MCP

哈喽,我是老刘
老刘是个客户端开发者,目前主要是用Flutter进行开发,从Flutter 1.0开始到现在已经6年多了。
那为啥最近我对MCP和AI这么感兴趣的呢?
一方面是因为作为一个在客户端领域实战多年的程序员,我觉得客户端开发的终局一定和AI是强绑定的。
另一方面就个人而言,我对新技术一直有很大的好奇心。
本文就来聊聊目前比较火热的MCP到底是怎么来的,以及它和Agent等其它AI相关技术的关系。

一、LLM、Function call和MCP

LLM是啥: 大语言模型本质上是一个具有一定思考能力的对话机器。简单来说就是你提问他回答。
但是他的回答只能限制在训练LLM的语料库范围内,超出范围的内容答不出来或者瞎编。

那么如何让LLM回答实时性高的或者没有训练过的问题呢?

第一代方案

人工搜索相关的文章后通过对话发给LLM,LLM整理后回答你的问题。
缺点是费时费力,所以有了第二代方案

第二代方案

将第一代的人工搜索并喂给LLM通过浏览器插件或者其它软件工具自动化完成。
这套方案的缺点是不够智能,比如我问ai:“明天应该穿什么?”
这时插件会直接搜索明天穿什么而不是明天的天气怎么样。
其实我们真正的问题是:明天什么天气,并且根据天气判断穿什么衣服。
所以有了第三代方案Function call

第三代方案(Function call)

要解决上面的问题,就需要让LLM去理解用户的问题,并做出判断:去搜索明天的天气。
如何让LLM能调用外部的工具搜索天气呢?
ChatGPT在2023年6月份的时候提出来了Function call协议。
它的工作方式如下:
在这里插入图片描述

1、​​请求阶段​​
用户提问 + 函数定义列表 → 发送至ChatGPT API。

{"functions": [{"name": "get_weather","description": "获取城市天气","parameters": {"type": "object","properties": {"location": {"type": "string"}}}}]
}

​​2、模型决策​​
模型判断需调用函数 → 返回函数名及参数字符串,如:

{"name": "get_weather","arguments": "{\"location\": \"Beijing\"}"
}

3、​​函数执行​​
AI客户端(例如CherryStudio、Cursor)解析JSON,调用本地或外部API(如天气接口),获取结果。
4、​​结果整合​​
将函数返回数据再次发送给模型 → 生成最终自然语言回复(如“今日晴,25°C”)。

Function call最重要的作用是让LLM能根据和用户的对话自主分析需要调用哪些接口和工具。
但是Function call的缺点也很明显:
从前面的工作方式中可以看出来,Function call并没有明确规定向LLM发送函数列表以及LLM调用某个方法时的具体字段及协议标准。
这就会造成不同LLM接受函数列表以及调用时的字段可能各不相同。
比如我要开发一个天气查询服务,就需要针对不同的LLM开发不同的通知和解析过程。
而作为一个AI客户端,比如Cursor或者CherryStudio,也需要针对不同的LLM以及不同的服务提供者做专门的适配。
为了解决上面这个问题,将Function call的通知和调用接口统一成标准协议自然而然的产生了,那就是MCP。

第四代方案(MCP):

MCP通过定义一个统一的协议层解决了上述碎片化问题:
1、​​统一交互协议​​

  • ​​标准化函数描述格式​​:所有服务提供者遵循同一套MCP Schema定义函数(名称、参数、权限)
  • ​​调用指令规范化​​:LLM返回的请求强制符合MCP JSON Schema,消除解析歧义

示例:MCP函数调用指令格式

{"action": "execute","tool": "weather","params": {"location": "Beijing"}
}

2、双向解耦设计​​

角色受益点
服务提供者一次开发即支持所有MCP兼容LLM(无需适配各平台)
AI客户端通用解析引擎处理任意MCP服务,新服务接入零成本

3、MCP的工作流程
下面来看MCP的完整工作流程:
在这里插入图片描述
其实本质是是对Function call的标准化
在启动客户端后,会进行初始化操作,将目前客户端已经配置好的MCP服务列表发送给LLM。
在具体的问答阶段,LLM会自主判断需要调用哪些外部工具,然后将调用的参数发送给Host(比如Cursor)。
Host收到调用的Json后会去调用MCP Server的对应接口,然后将返回的结果再发送给LLM。
这个过程可能会循环多次,直到LLM认为已经获取足够的信息,最终LLM将最后结果返回给用户。

二、 MCP、工作流和Agent

Agent
先来说Agent,如果LLM是一个具备语义理解与推理能力的对话机器,那么Agent就是基于LLM的能力能够独立完成任务拆解、自主决策并执行相关动作的一个智能体。
它不再是只能和你对话,而是能完成“感知-规划-执行”的闭环。
简单来说就是Agent先读懂你的要求,然后自己规划一个执行步骤,最后能调用相关的外部工具完成执行动作。

工作流
那么工作流在这中间起到什么作用呢?
首先我们要知道LLM的语义理解与推理能力和人类的逻辑推理是不一样的,LLM的推理是基于概率和模式匹配的。
直观的结果就是一方面它有时候会一本正经的胡说八道,另一方面它拆解的执行步骤可能和我们预期的不太一致。
比如有可能你把任务换个说法,Agent拆解出来的步骤就不一样了。
那么能否把一些明确的固定的工作流程或者好的实践变成一个模板告诉Agent,让Agent每次碰到同类的事务就按照这个固定步骤去执行呢?
比如“客户订单处理”的流程就固定为:接收→库存检查→发货→通知
工作流就是这种标准化的操作模板,通过这些预设逻辑可以降低Agent决策复杂度,提升执行可靠性。

MCP
有了强大的LLM,以及优秀的工作流,Agent就可以像一个真正的人类一样,把事情安排好,甚至做的比人类更好。
现在只剩下最后一件事,就是让Agent能操作外部工具。这就是MCP的作用了。
有了Function call,LLM就已经可以调用外部工具获取信息或者执行动作。
但是Function call本身没有统一的标准,不利于推广,因此MCP为各种不同的LLM和服务之间建立了统一的通信标准协议。
Agent或者工作流的任何一个步骤都可以通过MCP完成外部世界的信息获取或者对外部世界的操作。

LLM、Agent、工作流和MCP的对比

组件角色类比依赖关系核心价值
LLM大脑Agent的推理基础语义理解与决策生成
Agent指挥官驱动工作流,调度MCP任务拆解与动态决策
工作流战术手册固化Agent的最佳实践提升执行效率与可复现性
MCP万能工具包为Agent和工作流提供武器库打破数据孤岛,实现工具即插即用

Coze

看到很多人问Coze和MCP以及和工作流的关系,这里简单说一下我的理解。
Coze是一个帮助开发者搭建Agent的平台。
你可以在里面创建自己的智能体Agent,为这个智能体指定特定的工作流。
给这个智能体配置一些基于MCP的外部工具。
最终将这个智能体打包成App、网站、小程序对话机器人等队外的样式并发布出去。

总结

以上是老刘对“MCP是什么?”、“MCP怎么来的?”、“MCP是如何工作的?”这些问题的理解。
作为一个客户端、Flutter开发者,我觉得在这个AI蓬勃发展的时代,客户端的未来一定是和AI强绑定的。
而MCP作为AI时代的API标准,也是每个客户端程序员都应该掌握的技能。
好了,如果看到这里的同学对客户端、Flutter开发或者MCP感兴趣,欢迎联系老刘,我们互相学习。
点击免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。
可以作为Flutter学习的知识地图。
覆盖90%开发场景的《Flutter开发手册》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85411.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter的常规特征

前言 Flutter 是由 Google 开发的开源 UI 软件开发工具包,用于构建跨平台的高性能、美观且一致的应用程序。 一、跨平台开发能力 1.多平台支持:Flutter 支持构建 iOS、Android、Web、Windows、macOS 和 Linux 应用,开发者可以使用一套代码库在…

【Git】代码托管服务

博主:👍不许代码码上红 欢迎:🐋点赞、收藏、关注、评论。 格言: 大鹏一日同风起,扶摇直上九万里。 文章目录 Git代码托管服务概述Git核心概念主流Git托管平台Git基础配置仓库创建方式Git文件状态管理常用…

Android 网络请求的选择逻辑(Connectivity Modules)

代码分析 ConnectivityManager packages/modules/Connectivity/framework/src/android/net/ConnectivityManager.java 许多APN已经弃用,应用层统一用 requestNetwork() 来请求网络。 [ConnectivityManager] example [ConnectivityManager] requestNetwork() [Connectivi…

C#建立与数据库连接(版本问题的解决方案)踩坑总结

1.如何优雅的建立数据库连接 今天使用这个deepseek写代码,主要就是建立数据库的链接,包括这个建库建表啥的都是他整得,我就是负责执行,然后解决这个里面遇到的一些问题; 其实我学习这个C#不过是短短的4天的时间&…

FastAPI的初步学习(Django用户过来的)

我一直以来是Django重度用户。它有清晰的MVC架构模式、多应用组织结构。它内置用户认证、数据库ORM、数据库迁移、管理后台、日志等功能,还有强大的社区支持。再搭配上Django REST framework (DRF) ,开发起来效率极高。主打功能强大、易于使用。 曾经也…

提升IT运维效率 贝锐向日葵推出自动化企业脚本功能

在企业进行远程IT运维管理的过程中,难免会涉及很多需要批量操作下发指令的场景,包括但不限于下列场景: ● ⼤规模设备部署与初始化、设备配置更新 ● 业务软件安装与系统维护,进行安全加固或执行问题修复命令 ● 远程设备监控与…

最简单的远程桌面连接方法是什么?系统自带内外网访问实现

在众多远程桌面连接方式中,使用 Windows 系统自带的远程桌面连接功能是较为简单的方法之一,无论是在局域网内还是通过公网进行远程连接,都能轻松实现。 一、局域网内连接步骤 1、 开启目标计算机远程桌面功能:在目标计算机&…

JVM(2)——垃圾回收算法

本文将穿透式解析JVM垃圾回收核心算法,涵盖7大基础算法4大现代GC实现3种内存分配策略,通过15张动态示意图GC日志实战分析,带您彻底掌握JVM内存自动管理机制。 一、GC核心概念体系 1.1 对象存亡判定法则 引用计数法致命缺陷: // …

基于Spring Boot+Vue的“暖寓”宿舍管理系统设计与实现(源码及文档)

基于Spring BootVue的“暖寓”宿舍管理系统设计与实现 第 1 章 绪论 1.1 论文研究主要内容 1.1.1 系统概述 1.1.2 系统介绍 1.2 国内外研究现状 第 2 章 关键技术介绍 2.1 关键性开发技术的介绍 2.1.1 Java简介 2.1.2 Spring Boot框架 2.2 其他相关技术 2.2.1 Vue.J…

基于Java的不固定长度字符集在指定宽度和自适应模型下图片绘制生成实战

目录 前言 一、需求介绍 1、指定宽度生成 2、指定列自适应生成 二、Java生成实现 1、公共方法 2、指定宽度生成 3、指定列自适应生成 三、总结 前言 在当今数字化与信息化飞速发展的时代,图像的生成与处理技术正日益成为众多领域关注的焦点。从创意设计到数…

软考 系统架构设计师系列知识点之杂项集萃(93)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(92) 第169题 人工智能技术已成为当前国际科技竞争的核心技术之一,AI芯片是占据人工智能市场的法宝。AI芯片有别于通常处理器芯片,它应具备四种关键特征。&…

Kotlin实现文件下载断点续传(RandomAccessFile全解析)

本文将深入探讨如何使用Kotlin和RandomAccessFile实现高效的断点续传功能,涵盖原理分析、完整代码实现、性能优化及工程实践要点。 一、断点续传核心原理 1.1 HTTP断点续传协议 #mermaid-svg-EfmgPUx3SFkso8Fc {font-family:"trebuchet ms",verdana,aria…

linux-headers-$(uname -r)和kmod是什么?

2025年6月16日,周一清晨 Linux-headers-$(uname -r)与kmod包详解 一、linux-headers-$(uname -r)包 linux-headers-(uname -r)是Linux系统中与当前运行内核版本匹配的内核头文件包,其中(uname -r)会自动替换为当前内核版本号(如5.13.0-19-g…

使用axios及和spirng boot 交互

Axios Axios是一个基于Promise的HTTP库,可以发送get、post等请求,它作用于浏览器和Node.js中。当运行在浏览器时,使用XMLHttpRequest接口发送请求;当运行在Node.js时,使用HTTP对象发送请求。 使用步骤: 第…

布局文件的逐行详细解读

总览 源码 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto&…

VTK 显示大量点云数据及交互(点云拾取、着色、测量等)功能

VTK (Visualization Toolkit) 是一个强大的开源可视化库&#xff0c;非常适合处理点云数据。下面将介绍如何使用 VTK 显示大量点云数据&#xff0c;并实现点云拾取、着色、测量等功能。 基本点云显示 创建一个基本的点云显示程序&#xff1a; cpp #include <vtkSmartPoi…

性能优化 - 高级进阶: 性能优化全方位总结

文章目录 Pre1. 概述&#xff1a;性能优化提纲与使用场景2. 准备阶段2.1 明确优化范围与目标2.2 环境与工具准备 3. 数据收集与指标确认3.1 关键资源维度与指标项3.2 监控体系搭建与初始采集3.3 日志与追踪配置 4. 问题定位思路4.1 从整体到局部的分析流程4.2 常见瓶颈维度检查…

Mybatis之Integer类型字段为0,入库为null

背景&#xff1a; 由于项目某个功能用到优先级字段来判断&#xff0c;需要在mysql表中定义一个字段XX&#xff0c;类型为int&#xff0c;默认为0&#xff0c;具体值由后台配置&#xff0c;正常入库即可 问题&#xff1a; 由于后台配置存量其他类型的数据无需该字段&#xff0c…

上海市计算机学会竞赛平台2022年3月月赛丙组洗牌

题目描述 给定一个整数 nn&#xff0c;表示 nn 张牌&#xff0c;牌的编号为 11 到 nn。 再给定一个洗牌置换 f1,f2,…,fnf1​,f2​,…,fn​&#xff0c;进行一次洗牌操作时&#xff0c;应将第一号位置的牌交换到第 f1f1​ 号位置&#xff0c;将第 ii 号位置的牌交换到第 fifi…

DINO-R1:激励推理能力的视觉基础模型

摘要 近期&#xff0c;人们对大型语言模型&#xff08;如DeepSeek-R1&#xff09;推理能力的关注呈爆炸式增长&#xff0c;通过基于强化学习的微调框架&#xff08;如组相对策略优化&#xff08;Group Relative Policy Optimization&#xff0c;GRPO&#xff09;方法&#xff…