Ollama框架及MCP、MCPO协议/工具部署

文章内容来自WTY共享编辑,位山城重庆,2025年6月1日,儿童节快乐!

一、Ollama基础及部署教程

(一)Ollama是什么

Ollama是一个开源的本地大语言模型运行框架,通过提供便捷的模型管理、丰富的预建模型库、跨平台支持以及灵活的自定义选项,使得开发者和研究人员能够在本地环境中高效利用大型语言模型进行各种自然语言处理任务,而无需依赖云服务或复杂的基础设施设置。Ollama 目标在于简化在 Docker 容器中部署大型语言模型的过程,使得非专业用户也能方便地管理和运行这些复杂的模型。同时作为轻量级框架,Ollama 保持了较小的资源占用,同时具备良好的可扩展性,允许用户根据需要调整配置以适应不同规模的项目和硬件条件。官网地址:Ollama

Dify、Open-WebUI 和 Chatbox 是当前主流的开源 LLM 应用工具,但在功能定位、技术架构和适用场景上有显著差异。以下是三者的对比分析:dify、open-webui、chatbox 对比

简单来说:Dify适合企业开发复杂 AI 应用,如智能客服、合同处理系统等,支持多模型协作和业务流程自动化,适合需要快速原型开发到生产部署的团队,尤其是需结合 RAG 和复杂工作流的场景,扩展性较高。​Open-WebUI适合个人开发者快速测试本地模型(如 Ollama 部署的 Llama3),或作为 ChatGPT 替代品进行日常交互。​Chatbox面向非技术用户,提供无需代码的对话界面,支持快速体验多模型(如 GPT、Claude)的聊天能力。

(二)如何安装部署Ollama

整体思路:Docker安装Ollama框架,通过Ollama部署大模型。

Docker安装Ollama

官方文档地址:ollama/docs/docker.md at main · ollama/ollama · GitHub

成功部署Docker后,执行启动Docker命令

systemctl start docker

执行Ollama安装命令

首先安装部署Docker,检查Docker运行状态正常。

systemctl status docker

若没有正常启动,执行启动命令。

systemctl start docker

启动Docker后,执行Ollma安装命令:

docker run -d -p 3000:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama

-v ollama:/root/.ollama 

说明:将宿主机的ollma目录挂载到容器内的/root/.ollama目录,容器中的/root/.ollama 通常是 Ollama 的配置和数据存储目录,挂载后数据会持久化到宿主机,避免容器删除后数据丢失。

--restart always ghcr.io/open-webui/open-webui:ollama

说明:启动一个Docker容器,并设置其重启策略为“总是重启”,ghcr.io/open-webui/open-webui:ollama‌:这是要运行的Docker镜像的完整名称。ghcr.io是GitHub Container Registry的地址,open-webui/open-webui是镜像的仓库和名称,:ollama是镜像的标签。这个镜像包含了Open WebUI应用.

Open WebU是一个开源的、用户友好的 Web 界面,专为本地运行的大语言模型(LLM)设计,通常与 Ollama 配合使用。它允许用户通过浏览器轻松地与本地部署的模型交互,无需编写命令行代码,提供类似 ChatGPT 的体验。

这里由于ghcr.io是国外服务器网速较慢,可能导致传输失败,可以把地址改为国内的镜像站点,把ghcr.io替换成ghcr.nju.edu.cn。

docker run -d -p 3000:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.nju.edu.cn/open-webui/open-webui:ollama

到此就完成了ollama+openweb-ui的镜像部署。

( 三)如何下载导入模型

官方指令:ollama pull XXXXX 就可以下载相关模型

由于服务器原因在线拉取模型经常失败,可以在modelscope社区下载相关模型GGUF文件,通过离线导入的方式创建模型。 

然后在模型文件的目录地址下创建一个Modefile文件,输入下列内容,用于指向对应的模型文件。

(此处图片为向量化模型的Modefile , 如果是其他大语言模型,则需要添加更多的东西,比如回答示例模板等,具体请查阅标准Modefile,修改FROM的值)

运行下列指令,就可以将模型导入Ollama。

ollama create [自定义的模型名称] -f [Modefile文件名]

模型导入成功后,可以使用ollama list指令查看模型列表。

使用Ollama run <模型名称>就可以运行导入的模型。

二、MCP和MCPO工具协议及部署教程

(一)什么是MCP?

MCP(Model Context Protocol,模型上下文协议),由Claude母公司Anthropic于去年11月主导推出的开放标准协议。核心目标是统一AI模型与外部工具、数据源的交互接口,类似于AI领域的“USB-C接口”。它通过标准化协议实现LLM与本地文件、数据库、API等资源的双向交互,从而解决传统集成中的碎片化问题。‌‌

以前大模型调用外部工具或库需要单独开发函数,现在MCP提供了统一的规范和接口,也就是只要安装了相关的库,仅需几行代码即可接入这些海量的外部工具。MCP把大模型运行环境称作 MCP Client,也就是MCP客户端,同时,把外部函数运行环境称作MCP Server,也就是MCP服务器,图中展示了如何通过MCP访问不同的MCP server,然后调用不同外部工具。

(二)什么是MCPO?

 MCPO ‌是一个创新的解决方案,旨在将基于 MCP协议 的工具无缝集成到 OpenAPI 中。MCPO(Model Context Protocol-to-OpenAPI Proxy Server)是一个简单、可靠的代理服务器,能够将任何基于MCP协议的工具转换为兼容OpenAPI的HTTP服务器。

官方文档:🛰️ MCP Support | Open WebUI

简单来说,mcpo将所有的MCP服务暴露为http接口,使其能够在openwebui中以简单的方式添加为工具并调用,解决了MCP工具的一些局限。

 (三)MCP部署案例

需求:利用大模型访问自己的Postgresql数据库,得到更精准的回答。.

需要用到的包MCP servers是MCP官方写的gostgres(服务名),它可以通过docker运行,也可以通过Npx(npx是npm 5.2.0及以上版本内置的Node.js包执行工具,‌主要用于无需全局安装即可直接运行npm包中的可执行命令‌,支持临时使用远程包、执行项目本地依赖等场景。‌‌ )调用某个包执行,同时参数是你的数据库ip、端口、密码等

MCP的本地部署方案:Cherry studio + MCP servers

Cherry Studio是一款支持多模型服务的跨平台桌面客户端工具‌,主要功能包括集成多种大语言模型(如OpenAI、Gemini等)、提供预配置AI助手、支持文档处理与实用工具集成,

通过以上设置界面调用MCP服务,如果是npx的运行包,他会自动下载图中

@modelcontextprotocol/server-postgres

这个包,并带入参数执行,在本地创建运行一个服务。

(四)MCPO:内网离线部署方案(Postgres数据库访问协议代理)

(1)构建Docker镜像

构建一个docker,分别安装好mcpo,uv,python,npx环境,并试运行(运行一次要执行的npx包,确保在缓存中存在),然后打包导入内网环境。

其中基础的dockerfile文件内容如下图:

# 使用官方的Python 3.11镜像作为基础
FROM python:3.11-slim
​
# 设置环境变量
ENV PYTHONUNBUFFERED=1
ENV PIP_NO_CACHE_DIR=off
ENV PIP_SOURCE_URL=https://pypi.tuna.tsinghua.edu.cn/simple
ENV NODE_VERSION=18.x
​
# 创建并配置sources.list,然后安装必要的系统依赖
RUN echo "deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free" > /etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free" >> /etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/debian/ bookworm-backports main contrib non-free" >> /etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/debian-security/ bookworm-security main contrib non-free" >> /etc/apt/sources.list && \
    apt-get update && apt-get install -y --no-install-recommends \
    curl \
    gnupg \
    build-essential \
    && rm -rf /var/lib/apt/lists/*
​
# 安装Node.js和npm
RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_VERSION} | bash - && \
    apt-get install -y nodejs && \
    rm -rf /var/lib/apt/lists/*
​
# 设置npm源为淘宝源并安装@modelcontextprotocol/server-postgres
RUN npm config set registry https://registry.npmmirror.com && \
    npm install -g @modelcontextprotocol/server-postgres
​
# 使用pip安装mcpo(Python包)
RUN pip install -i ${PIP_SOURCE_URL} mcpo
​
# 清理工作
RUN apt-get purge -y --auto-remove build-essential && \
    rm -rf /tmp/*
​
# 暴露端口8000
EXPOSE 8000
​
# 设置工作目录
WORKDIR /app
​
# 容器启动时的默认命令
CMD ["bash"]    

dockerfile建立镜像的命令:

docker build -t image-name .

运行容器的命令:

docker run -p 8000:8000 image-name

在容器中执行

mcpo --port 8000 -- npx -y @modelcontextprotocol/server-postgres postgresql://root:123456@localhost:5432/xbldb

这段执行代码的含义是,指mcpo启动一个代理服务,代理执行npx -y @modelcontextprotocol/server-postgres 启动实际的 MCP 服务,将postgres这个mcp服务转化为mcpo,并暴露给8000端口。该服务允许客户端通过 MCP 协议与 PostgreSQL 数据库交互。

等待命令执行

此时可以通过localhost:8000/docs查看服务状态,如图即成功

c此时在openwebui端,添加工具 x.x.x.x:8000即可

(2)docker打包导入

1. 创建并运行容器

首先需要有一个运行中的容器(或使用已有容器):

# 示例:创建并运行一个基于 Ubuntu 的容器 
docker run -itd --name mycontainer ubuntu:20.04

2. 提交容器为镜像

将容器的当前状态保存为新镜像:

docker commit mycontainer mycustomimage:v1
# mycontainer:容器名称或 ID
# mycustomimage:v1:新镜像的名称和标签

3. 导出镜像为 tar 文件

将镜像打包为可传输的 tar 文件

docker save -o myimage.tar mycustomimage:v1
# o:指定输出文件路径

    4. 将 tar 文件传输到目标机器

    使用工具(如 scp、U 盘、网盘等)将 myimage.tar 复制到目标 Docker 环境。

    5. 在目标机器上导入镜像

    加载 tar 文件为本地镜像:

    docker load -i myimage.tar
    # i:指定输入文件路径

    6. 验证导入结果

    检查镜像是否成功导入:

    docker images | grep mycustomimage

    7. 运行导入的镜像

    使用导入的镜像创建容器:

    docker run -it --name imported-container mycustomimage:v1 bash

    (五)部署用于访问Mysql的MCP

    这里直接用别人打包好的基于go语言开发的mcp文件包。

    https://github.com/Zhwt/go-mcp-mysql

    将该文件导入内网环境中,使用命令和参数的方式创建:

    mcpo --port 8000 -- ./go-mcp-mysql —host XXX —user XXX —pass XXX —port 3306 —db XXX

    TIPS:百度创建了MCPservers广场,收罗了很多服务,可以在上面检索有没有直接想要的东西。

    百度搜索开放平台

    <think>好的,我现在需要帮助用户了解如何在Langchain框架中集成和使用MCP协议进行工具开发。首先,我需要回顾用户提供的引用内容,尤其是引用[3]中的示例代码,这可能直接相关。 用户的问题涉及Langchain和MCP协议的集成,但引用中提到的示例是使用uv工具创建工程,并通过Python脚本配置StdioServerParameters来连接MCP服务器。因此,可能需要将类似的配置方法应用到Langchain的环境中。 首先,我应该确认Langchain是否支持MCP协议,或者需要自定义工具来实现。根据引用[2],MCP是专为控制大型语言模型设计的协议,可能在Langchain中需要通过自定义接口或适配器来集成。 接下来,步骤可能包括安装MCP库,配置服务器参数,创建工具类,并将工具集成到Langchain的流程中。需要参考引用[3]中的代码示例,比如设置StdioServerParameters,并在Langchain中调用这些配置。 此外,用户可能需要具体的代码示例,所以需要构造一个简单的例子,比如创建一个数学计算工具,通过MCP协议与服务器通信。同时,需要确保代码符合用户提到的格式要求,比如使用$...$和$$...$$的数学表达式,以及正确的中文回答。 还需要考虑可能的相关问题,比如调试技巧、性能优化和应用场景,这些都可以在相关问题部分提出。同时,确保引用标记正确添加,如引用[3]在代码示例部分。 最后,验证整个流程的逻辑是否正确,代码示例是否能实际运行,或者至少结构正确,符合用户提供的引用内容。确保回答清晰,逐步引导用户完成集成过程。</think>在Langchain框架中集成MCP协议需要结合MCP的通信协议与Langchain的工具调用机制。以下是分步实现方法及示例代码: ### 一、环境搭建 1. 安装MCP库(参考引用[3]): ```bash uv add mcp ``` ### 二、基础配置 ```python from mcp import StdioServerParameters # 配置MCP服务端连接(如引用[3]示例) server_params = StdioServerParameters( command="python", args=['/path/to/your/server.py'], env={'MCP_VERBOSE': '1'} ) ``` ### 三、工具类开发 假设要创建数学公式处理工具: ```python from langchain.tools import BaseTool from mcp import ModelClient class MathTool(BaseTool): name = "mcp_math_processor" description = "通过MCP协议执行高级数学运算" def _run(self, expression: str) -> str: client = ModelClient(server_params) response = client.execute( task_type="math_processing", input_data={"expression": expression} ) return response['result'] async def _arun(self, *args, **kwargs): raise NotImplementedError("异步暂不支持MCP协议") ``` ### 四、Langchain集成 ```python from langchain.agents import initialize_agent from langchain.llms import OpenAI llm = OpenAI(temperature=0) tools = [MathTool()] agent = initialize_agent(tools, llm, agent="zero-shot-react-description") # 示例调用 result = agent.run("计算积分$\int_{0}^{1} x^2 dx$") print(result) # 输出应包含$\frac{1}{3}$的LaTeX表达式 ``` ### 五、协议交互原理 数学表达式通过MCP协议传输时,会保持LaTeX格式: $$ \int_{a}^{b} f(x)dx \Rightarrow \text{MCP序列化} \Rightarrow JSON+LaTeX $$ 该过程满足引用[2]中MCP协议对结构化数据交换的要求。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    nudtcz

    要是帮助到您可以打赏1元激励我

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值