機器學習入門,第一個MCP示例

前面我們已經搭建了屬于自己的AI大模型:詳情見 https://blog.csdn.net/hl_java/article/details/150591424?spm=1001.2014.3001.5501

近期MCP概念這么火,那么它到底是什么呢,借一個例子為你講解

第一步:理解MCP的核心價值

MCP (Model Context Protocol) 是一個由Anthropic提出的開放協議,它就像是給大模型提供了一個標準化的“插線板”,允許模型安全、方便地連接到外部資源,如數據庫、文件系統、API等。這樣一來,模型就不再是“紙上談兵”,而是能真正操作你的數據,為你完成更具體的任務。

第二步:安裝MCP必要組件

首先,你需要在你的Mac本地(而不是Ollama的Docker容器內)安裝所需的Python包。打開終端,執行:

pip install mcp pandas

● mcp 庫是構建MCP服務器的基礎。
● 安裝 pandas 是為了后續示例中可能的數據分析操作。

第三步:創建MCP服務器腳本

在你的Mac上選擇一個合適的目錄,創建一個名為 file_server.py 的Python文件,然后將以下代碼復制進去。這個腳本創建了一個簡單的MCP服務器,提供了列出桌面文件和讀取文件基本信息的工具。

import os
import pandas as pd
from datetime import datetime
from mcp.server.fastmcp import FastMCP# 初始化FastMCP實例,命名為"FileTools"
mcp = FastMCP("FileTools")@mcp.tool()
def list_desktop_files() -> list:"""獲取當前用戶桌面上的文件列表及其基本信息(文件名、大小、修改時間)。Returns:list: 包含桌面文件信息的字典列表。"""desktop_path = os.path.expanduser("~/Desktop")file_list = []try:for filename in os.listdir(desktop_path):file_path = os.path.join(desktop_path, filename)if os.path.isfile(file_path):  # 只處理文件,忽略文件夾file_stat = os.stat(file_path)file_list.append({"name": filename,"size_bytes": file_stat.st_size,"size_mb": round(file_stat.st_size / (1024 * 1024), 2),"last_modified": datetime.fromtimestamp(file_stat.st_mtime).strftime('%Y-%m-%d %H:%M:%S')})# 使用pandas只是為了更好地格式化輸出,你也可以直接返回file_listdf = pd.DataFrame(file_list)return df.to_string(index=False) if not df.empty else "您的桌面上沒有文件。"except Exception as e:return f"讀取桌面時發生錯誤: {str(e)}"@mcp.tool()
def get_file_info(filepath: str) -> str:"""獲取指定文件的詳細信息。Args:filepath (str): 文件的絕對路徑。Returns:str: 文件的詳細信息字符串。"""try:if not os.path.isabs(filepath):return "錯誤:請提供文件的絕對路徑。"if not os.path.isfile(filepath):return f"錯誤:路徑 '{filepath}' 不是一個文件或不存在。"file_stat = os.stat(filepath)file_info = {"文件名": os.path.basename(filepath),"絕對路徑": filepath,"文件大小 (字節)": file_stat.st_size,"文件大小 (MB)": round(file_stat.st_size / (1024 * 1024), 2),"最后修改時間": datetime.fromtimestamp(file_stat.st_mtime).strftime('%Y-%m-%d %H:%M:%S'),"是否為文件": os.path.isfile(filepath)}info_string = "\n".join([f"{key}: {value}" for key, value in file_info.items()])return info_stringexcept Exception as e:return f"獲取文件信息時發生錯誤: {str(e)}"if __name__ == "__main__":# 使用stdio傳輸模式運行MCP服務器mcp.run(transport='stdio')

第四步:配置Open-WebUI以連接MCP服務器

由于你已通過Docker安裝了Open-WebUI,現在需要配置它來識別并使用我們剛創建的MCP服務器。

  1. 查找Open-WebUI的配置目錄:Docker卷 open-webui-data 包含了Open-WebUI的配置和數據。你需要找到此卷在Mac主機上的實際掛載路徑。
docker volume inspect open-webui-data

在輸出中找到 Mountpoint 字段的值,這就是掛載點路徑。

  1. 創建MCP配置文件:進入上一步找到的掛載點路徑,導航到 data 子目錄。在此創建或編輯一個名為 mcp.json 的文件(如果不存在的話),并添加以下配置,注意替換 /path/to/your/ 為你存放 file_server.py 的實際路徑:
{"mcpServers": {"file-tools": {"command": "python","args": ["/path/to/your/file_server.py"]}}
}
  1. 重啟Open-WebUI容器:修改配置后,重啟容器以使更改生效。
docker restart open-webui

第五步:測試與使用

  1. 訪問Open-WebUI:在瀏覽器中打開 http://localhost:3000。
  2. 選擇模型和MCP工具:
    ○ 在聊天界面,確保選擇你之前拉取的 phi3:mini 模型。
    ○ 當你輸入消息時,界面應該會提示或顯示可用的MCP工具(例如 list_desktop_files)。
  3. 與模型和工具交互:你可以嘗試讓模型使用這些工具:
    ○ 直接提問:“你能用工具看看我桌面上有什么文件嗎?”
    ○ 手動選擇工具:在輸入框下方,Open-WebUI可能會顯示檢測到的工具,你可以點擊選擇并執行。
    ○ 查看結果:模型會調用MCP服務器并獲得結果,然后將結果整合到它的回復中。

第六步:驗證與調試

● 查看日志:如果工具沒有按預期工作,查看Open-WebUI和MCP服務器的日志非常重要。
○Open-WebUI日志:docker logs open-webui
○ 你的 file_server.py 腳本如果直接運行(python /path/to/your/file_server.py)也會在終端輸出信息,有助于判斷它是否被正確調用和是否有語法錯誤。
● 確保路徑正確:這是最常見的問題。再次確認 mcp.json 配置文件中的Python解釋器路徑和腳本路徑是否正確。

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

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

相關文章

flutter 中間組件自適應寬度

使用Flexible IntrinsicWidth Row(children: [Text(第一個text),IntrinsicWidth(child: ConstrainedBox(constraints: BoxConstraints(maxWidth: 200), // 最大寬度限制child: Text(中間的text可能很長也可能很短,overflow: TextOverflow.ellipsis,maxLines: 1,),),),Text(第三…

TDengine 時間函數 DAYOFWEEK 用戶手冊

DAYOFWEEK 函數使用手冊 函數描述 DAYOFWEEK 函數用于返回指定日期是一周中的第幾天。該函數遵循標準的星期編號約定,返回值范圍為 1-7,其中: 1 星期日 (Sunday)2 星期一 (Monday)3 星期二 (Tuesday)4 星期三 (Wednesday)5 星期四 (T…

【STM32】貪吃蛇 [階段 3] 增強模塊結構(架構優化)

這篇博客是 承接:【項目思維】貪吃蛇(嵌入式進階方向)中 聚焦于 🧱 階段 3:增強模塊結構(架構優化) 中的 菜單系統(Menu System),這部分的結構優化可以學到的…

江協科技STM32學習筆記補充之004

STM32 ISP 一鍵下載電路(按功能、邏輯與時序拆解)

數據庫小冊(1)

1. 關系型數據庫主要考點關系型數據庫:架構索引鎖語法理論規范2. 如何設計一個關系型數據庫設計即模塊劃分。數據庫最主要的功能是存儲我們的數據,所以需要一個存儲的文件系統。我們要把涉及到的物流數據提供邏輯的形式給組織和表示出來,這是…

記錄收入最高的一次私活 選號網,需要大量賣號的人可能需要,比如游戲腳本批量跑的號

選號網管理后臺(上傳游戲信息、賬號信息、 查看記錄) http://124.223.214.5:180/admin1 選號網客戶端(PC/H5頁面 給客戶篩選商品用) http://124.223.214.5:181/ 該在線地址僅供低頻率測試,正式使用需要另外部署。 功能不滿足可以聯系開發者定制 一、項目的由來 …

熱烈慶祝“中國抗戰勝利80周年”,織信低代碼助力國之重器砥礪前行!

“從保家衛國到科技強軍,織信低代碼平臺為軍工企業數字化轉型注入新動能。”80年后的今天,國人記憶從未褪色。2025年9月3日,正值中國抗戰勝利80周年閱兵之際,我國國防軍工力量在經歷長期的艱苦奮斗后,現今終于迎來了曙…

PostgreSQL與SQL Server:B樹索引差異及去重的優勢

PostgreSQL與SQL Server:B樹索引差異及去重的優勢 在優化查詢性能方面,索引是數據庫工程師可使用的最強大工具之一。PostgreSQL和Microsoft SQL Server(或Azure SQL)都將B樹索引用作其默認索引結構,但每個系統實現、維…

【微實驗】使用MATLAB制作一張賽博古琴?

當一個理工音樂人沒錢去買古琴,我直接用代碼畫一個古琴!目錄 零、總腳本: 一、核心功能:交互模塊拆解 二、核心價值 一、初始化腳本:參數配置與啟動界面 ①廢話不說,直接上代碼 ②代碼模塊拆解與詳細解…

畢業項目推薦:67-基于yolov8/yolov5/yolo11的大棚黃瓜檢測識別系統(Python+卷積神經網絡)

文章目錄 項目介紹大全(可點擊查看,不定時更新中)概要一、整體資源介紹技術要點功能展示:功能1 支持單張圖片識別功能2 支持遍歷文件夾識別功能3 支持識別視頻文件功能4 支持攝像頭識別功能5 支持結果文件導出(xls格式…

無人機小尺寸RFSOC ZU47DR板卡

整板尺寸:120*120mmFPGA: XCZU47DR-2FFVE1156I;DDR:PS側8GB 2400Mhz*64bit / PL側 4GB 2400Mhz*32bit;2路(QSP0QSPI1)/單片512Mb、共計1Gb;千兆以太網:1路(PS側);主要接口資源如下&a…

LangGraph(一):入門從0到1(零基礎)

文章目錄LangGraph入門從0到10?? 安裝 & 確認環境1?? 把 LangGraph 想象成「自動化的做菜流水線」2?? 最小可運行例子:一句話復讀機3?? 加一個小節點:把用戶輸入變大寫4?? 條件邊:如果用戶說 quit 就結束,否則復讀5…

學習數據結構(16)快速排序

快速排序的基本思想:快速排序是Hoare于1962年提出的一種二叉樹結構的交換排序方法,其基本思想為:任取待排序元素序列中的某元素作為基準值,按照該基準值將待排序集合分割成兩子序列,左子序列中所有元素均小于基準值&am…

uni-app iOS 上架常見問題與解決方案,實戰經驗全解析

uni-app 讓開發者能夠“一套代碼,多端運行”,極大降低了開發成本。 但當應用進入 iOS 上架階段 時,不少團隊發現流程并沒有想象中那么順利:證書問題、打包失敗、上傳出錯、審核被拒……這些都可能讓項目卡殼。 本文結合實際案例&a…

洗衣機的智能升級集成方案WT2606B屏幕驅動+AI語音控制

2025,洗衣機市場正從功能滿足轉向體驗升級,企業正面臨哪些轉型難點?一文為您解讀洗衣機行業智能化升級之路。傳統洗衣機就像是一個"沉默的工人",只能通過簡單的LED指示燈告訴你它在工作,卻無法讓你真正了解它在干嘛。用…

機器學習進階,梯度提升機(GBM)與XGBoost

梯度提升機(Gradient Boosting Machine, GBM),特別是其現代高效實現——XGBoost。這是繼隨機森林后自然進階的方向,也是當前結構化數據競賽和工業界應用中最強大、最受歡迎的算法之一。為什么推薦XGBoost? 與隨機森林互…

【ARMv7】開篇:掌握ARMv7架構Soc開發技能

本專欄,開始與大家共同總結使用ARMv7系列CPU的Soc開發技能。大概匯總了一下,后面再逐步完善下面的思維導圖。簡單說說:與通用的ARMv7-A/R相比,以STM32F為代表的ARMv7-M架構有以下關鍵區別和重點:無MMU,有MP…

【學術會議論文投稿】JavaScript在數據可視化領域的探索與實踐

【ACM出版 | EI快檢索 | 高錄用】2024年智能醫療與可穿戴智能設備國際學術會議(SHWID 2024)_艾思科藍_學術一站式服務平臺 更多學術會議請看 學術會議-學術交流征稿-學術會議在線-艾思科藍 目錄 引言 JavaScript可視化庫概覽 D3.js基礎入門 1. 引入…

CSS基礎學習步驟

好的,這是一份為零基礎初學者量身定制的 **CSS 學習基礎詳細步驟**。我們將從最根本的概念開始,通過一步一步的實踐,帶你穩穩地入門。 第一步:建立核心認知 - CSS 是做什么的? 1. 理解角色: HTML&…

MTK Linux DRM分析(三十七)- MTK phy-mtk-hdmi.c 和 phy-mtk-hdmi-mt8173.c

一、簡介 HDMI PHY驅動 HDMI 的物理層接口主要就是 HDMI Type-A 接口(19 pin),除此之外還有 Type-B、Type-C(Mini HDMI)、Type-D(Micro HDMI)、Type-E(車載專用)。 1. HDMI Type-A(常見 19-pin 標準接口) HDMI Type-A Connector Pinout ========================…