智能體三階: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
英文地址,請注明出處:http://en.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…