机器学习入门,第一个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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 ========================…