AIStor 的模型上下文協議 (MCP) 服務器: 工作原理

在本系列的前幾篇博文中,我們討論了MinIO AIStor 模型上下文協議 (MCP) 服務器的用戶級和管理員級功能。在第一篇博文中,我們學習了如何查看存儲桶的內容、分析對象并標記它們以便將來處理。在第二篇博文中,我們還學習了如何使用管理員命令以及獲取集群信息。所有這些都是通過人類語言命令以及與集群的簡單交互來完成的。

現在,讓我們討論一下內部結構:它是如何工作的以及我們如何開發這個 MCP 服務器。

高級 MCP 架構

模型上下文協議 (MCP) 旨在充當大型語言模型 (LLM) 與各種資源和工具之間的通用中介。該協議與語言模型配合使用,將人類語言轉換為資源或工具可接受的語言。對于 AIStor 服務器,我們將人類語言請求(例如“列出存儲桶‘demo’中的對象”)轉換為 MCP 工具調用,然后再轉換為對 AIStor 對象存儲的 SDK 調用。

MCP 工作流程中的語言轉換過程如下:

1、用戶要求 LLM 客戶端(例如,Claude Desktop)使用自然語言執行操作(例如,“列出存儲桶演示中的對象”)。

2、LLM 將請求從人類語言轉換為帶有參數(例如存儲桶名稱)的 JSON-RPC 2.0 請求。

3、該請求被發送到 MCP 服務器,服務器將其轉換為來自資源 SDK(例如,適用于 Go 的 MinIO SDK)的函數調用。

4、資源將響應發送回 MCP 服務器(例如,以 Go 切片形式呈現此存儲桶中的對象列表)。

5、MCP 服務器將此列表轉換為純文本或 JSON 并將其發送回客戶端。

6、客戶端將此響應發送給 LLM 以將其翻譯成人類語言。

這是流程圖。

工具和語言

MCP 提供多種適用于不同語言的 SDK。一些 SDK 由 Anthropic 提供(例如 Python、TypeScript、Kotlin 和 Java),而其他 SDK 由社區創建(例如 Go、Rust 等)。

該服務器的原型是使用 Anthropic 提供的 SDK 在 Python 中創建的。

對于生產版本,我們切換到了 Go。MinIO 對象存儲軟件的大部分代碼都是用 Go 編寫的,因此 Go 對我們來說是自然而然的選擇。我們使用 MinIO SDK for Go 實現了 MCP 服務器的功能,例如列出存儲桶、檢索對象信息以及設置對象標簽。使用 Go,我們可以輕松地為各種架構和操作系統創建和分發可執行文件。

我們使用由Mark III Labs創建的mcp-go庫,該庫被社區廣泛接受。

服務器架構

該服務器包含 25 多個與對象存儲集群配合使用的工具,包括“列出存儲桶”、“獲取對象標簽”、“獲取存儲桶轉換規則”等核心命令。每個函數都是對象存儲集群和 MCP 客戶端之間的網關。它將從集群收到的響應轉換為純文本或 JSON 格式,并將其發送到客戶端(在本例中為 Claude for Desktop)。

功能根據其對集群資源的訪問級別進行分組:

  • 只讀工具(默認啟用)
  • 可以寫入集群的工具(通過–allow-write標志啟用)
  • 可以刪除對象和存儲桶的工具(通過–allow-delete標志啟用)
  • 管理工具(通過–allow-admin標志啟用)

根據啟動服務器時使用的標志,它會啟用某些工具組。例如,allow-write在配置文件中的服務器命令中添加該標志將啟用創建對象和存儲桶的功能。

分配

此服務器以 Docker 容器的形式在您的主機操作系統上運行。我們決定將其作為標準 OCI 容器鏡像分發,因為我們的用戶更傾向于在臺式機或筆記本電腦上安裝容器平臺(例如 Docker 或 Podman),而不是其他服務器通常使用的 Python 或 Node.js 工具。

要運行此服務器,您無需克隆存儲庫或安裝uvPython 工具。您可以claude_desktop_config.json通過添加適當的docker或podman命令并設置必要的標志和環境變量來配置文件。

MCP 客戶端

此服務器可與支持 MCP 協議的多個客戶端配合使用。它已在 Claude 桌面版、Cursor IDE、mcp-cli文本客戶端等平臺上測試過。

安全

我們之前在博客中提到過安全方面的考慮。以下是一些實施細節。

服務器通過claude_desktop_config.json文件配置。要訪問對象存儲集群,您必須通過環境變量提供憑據,包括訪問密鑰和密鑰。您可以使用個人憑據,也可以為 MCP 服務器創建一個特殊的用戶帳戶。我們推薦后者。創建特殊用戶帳戶時,您可以創建并附加細粒度的策略,僅授予該帳戶訪問特定存儲桶和函數的權限。有關創建此類策略的信息,請參閱 MinIO 文檔(訪問管理 - Linux 版 MinIO 對象存儲)。

序列圖

讓我們看一下這里更詳細的事件序列圖。它顯示了用戶、LLM、MCP 服務器和 AIStor 對象存儲之間的流程。

無需解釋千言萬語也能理解的“一張圖片”,但需要注意的是,對象不會離開對象存儲。即使你詢問有關圖像內容的問題,它也是在對象存儲集群內部進行分析,而不是由你使用的 LLM 進行分析。

結論

MinIO AIStor 的 MCP 服務器是對通過命令行和/或 UI 與對象存儲交互的傳統方法的絕佳補充。它就像一個通用翻譯器,可以將您想要執行的操作與機器需要聽到的內容進行翻譯。無需再記憶復雜的命令或語法,只需用簡單的語言告訴它您需要什么即可。

除了將自然語言翻譯成服務器語言之外,MCP 服務器還可以利用 LLM 匯總集群信息,包括存儲桶內容、存儲分布和集群狀態。這是僅使用 CLI 或 UI 工具無法實現的。

隨著語言模型變得越來越復雜,我們與存儲系統交互的方式將變得越來越自然。

MCP 服務器的安全性是近期的熱門話題之一。我們內置了靈活而強大的安全機制,確保管理員仍然可以控制訪問權限。我們在此服務器上實施了多層安全保護,并始終遵循最小權限原則。

借助這款 MCP 服務器,MinIO 不僅實現了對象存儲的大眾化,還在重新思考在這個機器越來越善于理解我們的情況下,我們如何與技術協同工作。我們期待看到您將使用這項技術實現哪些精彩的成果,以及它將如何改變您與數據的關系。

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

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

相關文章

Excel 怎么讓透視表以正常Excel表格形式顯示

目錄 1、創建數據透視表 2、設計 》報表布局 》以表格形式顯示 3、設計 》分類匯總 》不顯示分類匯總 1、創建數據透視表 2、設計 》報表布局 》以表格形式顯示 3、設計 》分類匯總 》不顯示分類匯總

匯編語言深度指南:從基礎到字符串操作

基礎知識 CPU簡介 CPU是計算機的核心,負責: 執行機器指令:解碼并執行二進制指令 mov eax, 5 ; 將值5移動到EAX寄存器暫存少量數據:通過內部寄存器快速存取訪問存儲器:讀寫內存數據 mov [0x1000], eax ; 將EAX值…

樹莓派5-ubuntu 24.04 安裝 ros環境

在開始安裝ros環境前,需要確保已經準備好了以下操作 1.樹莓派5開發板,已經燒錄了 ubuntu 24.04,并做好了一些基礎配置,如:遠程訪問配置,語言配置,網絡配置等 2.新手建議在上面安裝一個寶塔面板…

【狂飆AGI】第2課:大模型方向市場分析

目錄 (一)產業規模(二)政策引導(三)人才需求(四)工作年限(五)年薪分析(六)薪資情況分析(七)地域及匹配薪資&am…

word用endnote插入國標參考文獻

1.在endnote中先設置output style為我的GB格式 參考 Endnote使用——參考文獻的插入及引用_endnote怎么引用參考文獻-CSDN博客 已經修改好的GB導出格式:Chinese Std GBT7714 (numeric)-spx.ens Peixuan Shu/Chinese_Std_GBT7714 - 碼云 - 開源中國 把這個style…

Peiiieee的Linux筆記(1)

基本指令 1. ls指令 語法:ls [選項][目錄或文件] 功能:對于目錄,該命令列出該目錄下的所有子目錄與文件。對于文件,將列出文件名以及其它信息。 -a:列出目錄下的所有文件,包括以.開頭的隱含文件。 -l&am…

Docker快速構建并啟動Springboot程序,快速發布和上線/

Docker部署SpringBoot 1.工作木目錄:/mnts/jar_work/vx_kefu/ruoyi_ruoyiwechatinfo 里面的目錄是lib文件夾,logs文件夾,Dockerfile文件,SpringBoot的jar包,start.sh的命令,stop.sh的命令,tpid文件進程。 …

RT-Thread Studio 配置使用詳細教程

文章目錄 一、新建工程1.1 創建基于芯片的工程1.1.1 選擇創建的rtt版本1.1.2 配置工程基本屬性1.1.3 初創工程目錄結構1.1.4 修改時鐘配置1.1.5 配置調試下載器 1.2 創建基于開發板的工程 二、配置內核三、配置組件四、配置軟件包五、適配配置六、其它問題 一、新建工程 1.1 創…

React 中的 useCallback 入門指南:是真需要,還是假怪?

在學習 React 時,很多人初步接觸 useCallback 都有一個同樣的疑問: “useCallback 到底是干啥的?不是簡單地就是‘緩存一個函數’嗎?我一直不明白它真正有什么用。” 這篇文章就來給你一個全方位、實操、有例實的 useCallback 入門…

14.計算機網絡End

計算機網絡end 一、概念 網絡協議三要素:語法、語義、同步TCP/IP中為運輸層提供服務的層級:網際層計算機網絡性能指標(答5個即可): 帶寬時延吞吐量往返時間(RTT)利用率 交換式以太網用戶帶寬&…

Next.js + Supabase = 快速開發 = 高速公路

Next.js Supabase介紹一下這2個好的,直說重點: ? Next.js:React 的“終極形態” 一句話概括: Next.js 是基于 React 的 Web 框架,幫你快速構建全棧應用,支持 SSR(服務端渲染)、AP…

機器學習用于算法交易(Matlab實現)

機器學習用于算法交易(Matlab實現) 摘要 隨著金融市場的復雜性和交易量的不斷增長,傳統交易方式逐漸暴露出局限性,算法交易因其高效性和精準性已成為主流趨勢。在此背景下,將機器學習融入算法交易具有重要的研究意義…

day64—回溯—組合數(LeetCode-77)

題目描述 給定兩個整數 n 和 k,返回范圍 [1, n] 中所有可能的 k 個數的組合。 你可以按 任何順序 返回答案。 示例 1: 輸入:n 4, k 2 輸出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2: 輸入&#xff1a…

機器學習與深度學習21-信息論

目錄 前文回顧1.信息上的概念2.相對熵是什么3.互信息是什么4.條件熵和條件互信息5.最大熵模型6.信息增益與基尼不純度 前文回顧 上一篇文章鏈接:地址 1.信息上的概念 信息熵(Entropy)是信息理論中用于度量隨機變量不確定性的概念。它表示了…

chrome138版本及以上el-input的textarea輸入問題

描述 項目基于vue2 element UI 問題簡述&#xff1a;Chrome138及以上版本&#xff0c;把組件中的el-input的textarea的disabled屬性從true設為false&#xff0c;無法輸入 封裝了一套表單輸入組件&#xff0c;其中的textarea如下&#xff1a; <div v-if"item.type te…

TCP/IP 網絡編程 | 服務端 客戶端的封裝

設計模式 文章目錄 設計模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 實現&#xff08;implementation&#xff09;三、server.cpp 使用封裝&#xff08;main 函數&#xff09;四、client.cpp 使用封裝&#xff08;main 函數&#xff09;五、退出方法…

TASTE-Rob:推進面向任務的手-目標交互視頻生成,實現可通用的機器人操作

25年3月來自香港中文大學的論文“TASTE-Rob: Advancing Video Generation of Task-Oriented Hand-Object Interaction for Generalizable Robotic Manipulation”。 本文也是在解決現有數據集和模型在面向任務的手部-目標交互視頻生成方面的關鍵限制&#xff0c;這是為機器人模…

Trae AI IDE 全網最全的使用教程

Trae AI IDE 全網最全的使用教程 近期&#xff0c;字節發布了一款 AI Coding 產品 —— Trae&#xff0c;它是一款對標 Cursor 和 Windsurf 的全新 IDE&#xff0c;也是一款真正為中文開發者量身定制的工具&#xff0c;可謂是中文開發者的福音。 其優雅的 UI、絲滑的交互、母語…

GraspCorrect:通過視覺-語言模型引導反饋進行機器人抓握矯正

25年3月來自韓國 POSTECH 的論文 “GraspCorrect: Robotic Grasp Correction via Vision-Language Model-Guided Feedback”。 盡管機器人操作技術取得了顯著進步&#xff0c;但實現一致且穩定的抓取仍然是一項根本挑戰&#xff0c;常常限制復雜任務的成功執行。分析表明&…

瀏覽器兼容-polyfill-本地服務-優化

babel和webpack結合 npx babel src --out-dir dist --presetsbabel/preset-env 這是把src下面的東西都用babel轉化一下 webpack可以和babel結合使用&#xff0c;首先下載一個這東西&#xff1a; npm install babel-loader -D webpack配置&#xff1a; const path requir…