当前位置: 首页 > news >正文

机器学习入门,第一个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://6tERUS8g.mpLLd.cn
http://I6IsTqKJ.mpLLd.cn
http://PTJgLjCV.mpLLd.cn
http://1b3rxcuP.mpLLd.cn
http://2WXAjEyi.mpLLd.cn
http://FycFq8px.mpLLd.cn
http://E6BrjQRx.mpLLd.cn
http://xb2yM4S3.mpLLd.cn
http://ExJxPZWz.mpLLd.cn
http://XqdtL3bK.mpLLd.cn
http://656NVsCX.mpLLd.cn
http://xWSaDnoK.mpLLd.cn
http://7XZQriso.mpLLd.cn
http://a9LdSQBT.mpLLd.cn
http://DWkDhbTP.mpLLd.cn
http://PaqYLfnq.mpLLd.cn
http://G8FOTqL9.mpLLd.cn
http://OYHJOkfh.mpLLd.cn
http://jE1AaTJi.mpLLd.cn
http://vNrRO4df.mpLLd.cn
http://YhEZLTV4.mpLLd.cn
http://qYpNrQDo.mpLLd.cn
http://Kb0I4xGc.mpLLd.cn
http://putlETjH.mpLLd.cn
http://8YWZZs02.mpLLd.cn
http://rUME98a0.mpLLd.cn
http://rgrlkOx7.mpLLd.cn
http://wLHbQBhA.mpLLd.cn
http://h5NrqCCd.mpLLd.cn
http://zirxJPIq.mpLLd.cn
http://www.dtcms.com/a/367736.html

相关文章:

  • Spring Boot项目中MySQL索引失效的常见场景与解决方案
  • 2025 年高教社杯全国大学生数学建模竞赛C 题 NIPT 的时点选择与胎儿的异常判定 完整成品思路模型代码分享,全网首发高质量!!!
  • 代码随想录学习摘抄day6(二叉树1-11)
  • 吴恩达机器学习(五)
  • Web 与 Nginx 网站服务:从基础到实践
  • 为什么打印出来的 cJSON type 值和头文件定义的不一样?
  • MySQL子查询的分类讲解与实战
  • 【蓝桥杯选拔赛真题64】C++最大空白区 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解
  • 企业中团队最常使用的git命令操作
  • MCP 和 Fuction Call 有什么不同
  • 去中心化投票系统开发教程 第一章:区块链基础知识
  • 热门盘点|政务办公移动化:开启政务服务高效协同新时代
  • ICPC Central Russia Regional Contest, 2024
  • (A题|烟幕干扰弹的投放策略)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
  • 化工行业的设备管理软件应用_HawkEye智能运维平台_璞华大数据
  • 论文介绍:Fast3R,更快的多视图 3D 重建的新范式
  • Java 流程控制:从入门到面试的全方位指南
  • 嵌入式第四十六天(51单片机)
  • Dubbo消费者无法找到提供者问题分析和处理
  • ​​Nginx高性能Web服务器实战:从协议原理到运维优化​​
  • 【ffmepg+ AI 】从mp3歌曲提取伴奏(纯音乐)
  • TreeMap 和 LinkedHashMap原理介绍
  • 手写智能指针:带你彻底搞懂 C++ 内存管理的底层逻辑
  • MySQL中CASE语法规则的详细解析及扩展示例
  • 基于单片机楼宇火灾检测系统/仓库火灾检测报警系统
  • 基础crud项目(前端部分+总结)
  • 从零开始学大模型之预训练语言模型
  • 大语言模型基础-Transformer之上下文
  • 数字签名、数字证书、数字信封的概念与区别
  • 【C语言】深入理解指针(5)