MCP工作原理

在談MCP原理前,我們先談談MCP的技術前身—Function Calling。

1.Function Calling技術

在FunctionCalling技術出現之前,大語言模型雖然擁有強大的知識儲備和語言理解能力,但是只能提供自身數據庫已有的信息,無法和外界進行信息交互。它們的知識庫更新速度有限,?法獲取最新的實時信息,如天氣、實時熱搜事件等;也無法根據用戶的特定需求提供個性化服務,只能提供通?的信息。為了解決這些問題,OpenAI在2023年推出了FunctionCalling,實現了讓大模型通過函數調用外部工具,FunctionCalling的工作大致如下:

  • 當用戶向大模型提問時,大模型通過自然語言理解和推理,判斷是否需要調用工具
  • 如果需要調用工具,還會判斷具體調用哪個工具,并自動組織參數,然后調用工具
  • 然后拼接工具返回的結果,重新組織答案,回復用戶

例如,如果用戶問:

杭州今天天氣怎么樣?" ?大模型可能調用 get_current_weather,并自動填充 location="杭州"和current_date="2025-07-14"

大致流程圖如下:

因此相比傳統的工程代碼開發,它有幾個優勢:

結構化輸出:確保模型能以預定義的 JSON 格式輸出函數所需參數,提高了可解析性和可靠性,不需要開發額外的協議。

函數定義明確:通過schema清晰定義函數名稱、描述、參數類型等

降低解析復雜度:開發者只需要解析 json 返回即可,不需要編寫復雜的文本解析邏輯

提高準確性:減少了模型在生成函數調用時的"幻覺"問題

簡化開發流程:標準化了大模型與外部工具的交互方式

Function Calling 和傳統工程調用外部工具實現邏輯的差別有以下幾點:

協議層面:傳統代碼需要自己設計 Tool 的描述協議并維護在提示詞中,Function Calling 通過統一的 JSON 協議,約定函數定義和模型返回,方便維護。

實現層面:傳統代碼需要實現對應的工具調用和解析邏輯,同時也要維護提示詞,通過?Function Calling 實現則不需要做文本返回的解析,也不需要將 Tools 放到提示詞中維護。

效果層面:傳統工程代碼方式容易受限于模型的指令遵循能力,需要寫很多代碼兜底不可控的模型返回,FC能夠做到較好的指令遵循。

綜上Function Calling 提供了一種更智能、更靈活的工具調用范式。

盡管 Function Calling看起來很強大,但不是所有的大語言模型都支持 Function Calling,因為模型要支持 Function Calling 通常需要專門的訓練或微調,需要在預訓練或者微調階段訓練模型理解函數模式,學習如何生成符合預期格式的 json 輸出,以及理解參數類型和約束條件等,所以 Function Calling 比較依賴模型的理解能力。且當下沒有統一的行業標準,每個大語言模型提供商的實現方式不同,需要開發者為每種模型或工具編寫特定的適配代碼。比如扣子平臺的墨跡天氣,豆包能調用,并不意味著deepseek能直接調用,還需要針對deepseek重新適配。但至少通道建立起來了,有通道就要有協議,于是標準化又開源的 MCP 協議橫空出世。

2.MCP的出現

Anthropic 在2024 年11月25日發布了MCP(Model Context Protocol),它是一種模型下文協議,它允許大語言模型通過協議與外部?具或服務交互,動態獲取實時數據或執?操作。意思就是只要工具按照這種協議開發,所有的大模型都能直接調用,不依賴模型的理解能力。

2.1 MCP的架構

MCP遵循客?端-服務器架構(client-server)

MCP主機(MCP Hosts):裝了Mcp的LLM應?程序(如ClaudeDesktop、Cursor、Cherry-Studio等)。
MCP客?端(MCP Clients):在主機程序內部,與MCP server保持1:1的連接。
MCP服務器(MCP Servers):為MCP Client提供上下文、工具和prompt信息。
本地資源(Local Resources):本地計算機中可供MCP server安全訪問的資源(例如?件、數據庫)。
遠程資源(Remote Resources):MCP server可以連接到的遠程資源(例如通過API)

2.2 MCP運行原理

2.3 Mcp運行模式

方式一:STDIO模式(本地運行)

特點:本地安裝運?MCP Server,需要配置開發環境

方式二:SSE模式(遠程服務)

特點:?需本地環境,僅需輸?服務器URL,適合調?云端API

2.4 常見的McpServer網站

GitHub:https://github.com/modelcontextprotocol/servers

GitHub:https://github.com/punkpeye/awesome-mcp-servers

Smithery:https://smithery.ai/

魔塔社區(國內):https://www.modelscope.cn/mcp

以魔塔社區舉例:標志Hosted的是遠程訪問的

點擊“連接”,可以獲得服務URL

標志local是本地運行的:詳情頁可以獲得配置信息:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91094.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91094.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91094.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VSCode手動版本更新

技術背景 使用VSCode的的過程中,如果打開了自動更新功能,每隔一段時間就會有更新提示。為了保持版本的穩定性,我們可以在設置中將Update: Mode設置為none,這樣就不會觸發自動更新。但有時又有版本更新的需求,可能是版本…

醫療超聲成像專用AFE模擬前端

醫療超聲成像作為一種廣泛應用于臨床診斷的重要技術,對于提供清晰、準確的醫學圖像起著關鍵作用。在超聲成像系統中,AFE模擬前端扮演著至關重要的角色。它負責對超聲換能器接收到的微弱電信號進行處理和轉換,為后續的數字信號處理提供高質量的…

機器學習之線性回歸——小白教學

一、線性回歸簡介1.什么是線性回歸線性回歸(Linear regression)是利?回歸?程(函數)對?個或多個?變量(特征值)和因變量(?標值)之間關系進?建模的?種分析?式。特點:只有?個?變量的情況稱為單變量回歸,多于?個?變量情況的叫做多元回歸線性回…

.NET 10 中的新增功能系列文章1——運行時中的新增功能

引言 隨著 .NET 10 預覽版6的發布,微軟在運行時層面帶來了一系列重要的性能改進和新功能。這些改進主要集中在JIT編譯器優化、硬件指令集支持、內存管理等方面,旨在進一步提升應用程序的執行效率和資源利用率。本文將詳細解析這些運行時增強功能&#x…

安寶特方案丨AI算法能力開放平臺:適用于人工裝配質檢、點檢、實操培訓

當前工業AI圖形識別算法的應用存在投入成本高、維護更新難、依賴固定相機、應用范圍窄、與實際作業脫節等問題。 針對以上情況,安寶特提出了“AI算法能力開放平臺”,目的是讓AI圖形識別算法可以與現場實際的人工點檢作業、裝配作業、質檢作業、培訓作業…

水下目標識別準確率↑89%!陌訊多模態融合算法在智慧水務的落地實踐

一、行業痛點:智慧水務的檢測困境據《2024城市水務智能化白皮書》統計,傳統水務檢測面臨三大挑戰:??水體干擾??:渾濁度>100NTU時,目標漏檢率高達65%??動態環境??:水流擾動導致目標形變&#xff…

手動開發一個串口調試工具(三):基于 Qt Widgets 搭建串口調試界面

在上一篇中,我們通過 QCoreApplication 構建了一個基礎的串口收發控制臺程序,并實現了周期發送、十六進制轉換和數據讀取等核心功能。本篇將基于此邏輯,進一步將其封裝為一個圖形化界面程序,借助 Qt Widgets 提供的控件搭建完整的…

量子計算革命:重新定義計算的邊界與未來

引言:我們正站在計算革命的新起點 當IBM在2019年宣布實現"量子霸權"時,很多人認為這只是實驗室里的科學突破。然而,短短幾年后,量子計算已經從理論走向實踐,從實驗室走向產業應用。我們正站在一個全新的計算…

Python 數據可視化之 Matplotlib 庫

在當今數據驅動的時代,數據可視化(Data Visualization)已成為數據科學、機器學習、金融分析、工程建模等多個領域中不可或缺的一環。數據可視化不僅幫助我們更直觀地理解數據的分布和趨勢,還能輔助決策、展示研究成果以及增強數據…

Makefile 快速入門指南

Makefile 快速入門指南 什么是Makefile? Makefile 是一個自動化構建工具的配置文件,用于管理代碼編譯、測試和清理等任務。它通過定義規則(rules)來指定文件之間的依賴關系,當源文件改變時,只重新編譯受影響的部分&…

Linux學習--C語言(指針4、結構體)

1.二維數組的傳參int a[2][3] {1, 2, 3, 4, 5, 6};fun(a,2); int fun(int (*p)[3], int len);2.指針數組的傳參char *pastr[5] {NULL};int fun(char **pstr,int len);例子&#xff1a;#include <stdio.h> #include <string.h>int InputArray(char (*p)[32], int …

【STM32】FreeRTOS 消息隊列(五)

在 FreeRTOS 中&#xff0c;任務消息隊列&#xff08;Message Queue&#xff09; 是一種非常關鍵的通信機制&#xff0c;用于在任務之間 傳遞數據、同步事件。 它是實現任務 解耦、異步通信 的核心工具之一&#xff0c;FreeRTOS 的消息隊列是任務之間通信的橋梁。 簡單點說&am…

【筆記】加速 uv 安裝:系統環境變量配置國內鏡像源

使用 Conda 工具鏈創建 UV 本地虛擬環境全記錄——基于《Python 多版本與開發環境治理架構設計》-CSDN博客 命令行創建 UV 環境及本地化實戰演示—— 基于《Python 多版本與開發環境治理架構設計》的最佳實踐-CSDN博客 加速 uv 包安裝&#xff1a;Windows 系統環境變量配置國內…

Three.js 渲染優化處理

基于項目經驗和最佳實踐&#xff0c;以下是渲染優化的具體處理方法&#xff1a; 1. 幾何體與材質優化 使用 BufferGeometry // 推薦&#xff1a;使用 BufferGeometry 替代 Geometry const geometry new THREE.BufferGeometry();合并幾何體 // 將多個幾何體合并為一個以減少繪制…

Kafka——Kafka控制器

引言在Kafka集群中&#xff0c;有一個組件堪稱"隱形的指揮官"——它默默協調著Broker的加入與退出&#xff0c;管理著主題的創建與刪除&#xff0c;掌控著分區領導者的選舉&#xff0c;它就是控制器&#xff08;Controller&#xff09;。想象一個擁有100臺Broker的大…

編程與數學 03-002 計算機網絡 11_域名系統(DNS)

編程與數學 03-002 計算機網絡 11_域名系統&#xff08;DNS&#xff09;一、DNS的作用與功能&#xff08;一&#xff09;域名與IP地址的映射關系&#xff08;二&#xff09;DNS的層次結構二、DNS查詢過程&#xff08;一&#xff09;遞歸查詢與迭代查詢&#xff08;二&#xff0…

影翎Antigravity將發布全球首款全景無人機,8月開啟公測招募

7月28日&#xff0c;消費級無人機品牌「影翎Antigravity」及品牌標識官宣亮相&#xff0c;計劃推出全新品類——全球首款「全景無人機」。這一消息引發行業震動&#xff0c;消費級航拍無人機市場或將迎來顛覆性飛行體驗。影翎Antigravity官方介紹&#xff0c;引力不僅是束縛雙腳…

SpringBoot集成Quzrtz實現定時任務

一 定時任務介紹 自律是很多人都想擁有的一種能力&#xff0c;或者說素質&#xff0c;但是理想往往很美好&#xff0c;現實卻是無比殘酷的。在現實生活中&#xff0c;我們很難做到自律&#xff0c;或者說做到持續自律。例如&#xff0c;我們經常會做各種學習計劃、儲蓄計劃或減…

Java中的異常判斷以及文件中的常用方法及功能

目錄 異常 作用 異常的處理方式 JVM&#xff08;虛擬機&#xff09;默認的處理方式 自己處理&#xff08;捕獲異常&#xff09; 拋出異常&#xff08;也就是交給調用者處理&#xff09; 自定義異常 file File中常見成員方法 判斷和獲取 創建和刪除 獲取并遍歷 異常…

【C++算法】74.優先級隊列_最后一塊石頭的重量

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 1046. 最后一塊石頭的重量 題目描述&#xff1a; 解法 每次取出最重的兩塊石頭進行碰撞&#xff0c;將剩余的石頭重新放入堆中。 C 算法代碼&#xff1a; class Solution …