当前位置: 首页 > 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://www.xdnf.cn/news/1457695.html

相关文章:

  • (D题|矿井突水水流漫延模型与逃生方案)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
  • 生成式引擎优化(GEO):数字营销新标配,企业如何抢占AI搜索流量高地?
  • Trae + MCP : 一键生成专业封面的高阶玩法——自定义插件、微服务编排与性能调优
  • 设计模式六大原则2-里氏替换原则
  • Linux —— 环境变量
  • mysql中find_in_set()函数的使用, ancestors字段,树形查询
  • AI视频画质提升效果实用指南:提升清晰度的完整路径
  • [论文阅读] 软件工程 | REST API模糊测试的“标准化革命”——WFC与WFD如何破解行业三大痛点
  • 【论文阅读】-《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》
  • AutoLayout与Masonry:简化iOS布局
  • (E题|AI 辅助智能体测)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
  • 解密llama.cpp:Prompt Processing如何实现高效推理?
  • Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装
  • Scikit-learn Python机器学习 - 特征预处理 - 归一化 (Normalization):MinMaxScaler
  • 孩子学手机里的坏毛病,怎样限制他打开某些APP?
  • Flutter 3.35.2 以上版本中 数字转字符串的方法指南
  • 机器学习基础-day05-深度学习框架PyTorch的tensor及PyTorch进行线性回归
  • 猫头虎AI 荐研|腾讯开源长篇叙事音频生成模型 AudioStory:统一模型,让 AI 会讲故事
  • 数据结构 之 【哈希的相关概念】
  • npm/pnpm软链接的优点和使用场景
  • 2025精选榜:4款好用的企业即时通讯软件推荐!安全有保障
  • 【Proteus仿真】AT89C51单片机中断系列仿真——INT0中断控制LED小灯/INT0和INT1中断控制数码管
  • 小白也能看懂,HTTP中的文件上传与下载到底发生了什么?
  • Spring 框架(IoC、AOP、Spring Boot) 的必会知识点汇总
  • 2025 年高教社杯全国大学生数学建模竞赛C 题 NIPT 的时点选择与胎儿的异常判定 完整成品思路模型代码分享,全网首发高质量!!!
  • 【笔记】AI Agent发展趋势
  • PostgreSQL与SQL Server:为什么 PostgreSQL遥遥领先
  • 异地多活架构:从“机房炸了”到“用户无感”的逆袭之路
  • Linux里面安装Genetic Algorithm Toolbox for MATLAB R2023b
  • unittest自动化测试框架详解