以下是一篇简洁且实用的技术教程,介绍如何基于 Ollama 作为大型语言模型(LLM)服务提供者,快速搭建一个 Model Context Protocol (MCP) 客户端。教程将包括步骤说明、代码示例以及与 pipconda 的环境管理对比,最后提供一些注意事项。


快速搭建基于 Ollama 的 MCP 客户端

Model Context Protocol (MCP) 是一种标准化协议,用于连接大型语言模型(LLM)与外部工具和数据源,帮助开发者构建智能、交互式的 AI 应用。Ollama 是一个开源工具,允许在本地运行 LLM,具有隐私性强、易于部署的特点。本文将指导你使用 Ollama 作为 LLM 服务提供者,快速搭建一个 MCP 客户端,并与 pipconda 的环境管理方式进行对比。

前提条件

在开始之前,请确保你的环境满足以下要求:

  • 操作系统:Windows、macOS 或 Linux
  • Ollama:已安装并运行,参考 Ollama 官网 下载并安装
  • Python:3.10 或以上版本
  • 支持工具调用的模型:如 llama3.1qwen2.5,可通过 ollama pull <model-name> 下载
  • 依赖管理工具:推荐使用 uv(或 pip/conda 作为替代)

步骤指南

1. 安装并配置 Ollama

  1. 安装 Ollama

    • 根据你的操作系统,从 Ollama 官网 下载并安装。
    • Linux 用户可运行以下命令:
      curl -fsSL https://ollama.com/install.sh | sh
      
    • 安装完成后,启动 Ollama 服务:
      ollama serve
      
  2. 拉取支持工具调用的模型

    • 选择一个支持工具调用的模型(如 llama3.1):
      ollama pull llama3.1:8b
      
    • 验证模型是否支持工具调用,可参考 Ollama 模型库

2. 设置开发环境

推荐使用 uv 作为依赖管理工具,因其速度快、虚拟环境管理便捷。以下是使用 uvpipconda 的配置步骤对比:

使用 uv(推荐)
# 安装 uv
pip install uv

# 创建项目目录并初始化虚拟环境
mkdir mcp-client
cd mcp-client
uv venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# 安装必要依赖
uv pip install langchain langchain-ollama langchain-mcp-adapters fastmcp
使用 pip
# 创建虚拟环境
python -m venv mcp-client-venv
source mcp-client-venv/bin/activate  # Windows: mcp-client-venv\Scripts\activate

# 安装依赖
pip install langchain langchain-ollama langchain-mcp-adapters fastmcp
使用 conda
# 创建并激活 Conda 环境
conda create -n mcp-client python=3.10
conda activate mcp-client

# 安装依赖
conda install pip
pip install langchain langchain-ollama langchain-mcp-adapters fastmcp

uv vs. pip vs. conda 对比

特性 uv pip conda
速度 极快(Rust 实现) 较慢 最慢(解析复杂依赖)
虚拟环境管理 内置,简单 需要配合 venv 内置,功能强大但复杂
非 Python 依赖 有限 有限 强大(如 C 库、R 包)
生态成熟度 新兴,社区成长中 成熟,广泛使用 成熟,数据科学领域首选
适合场景 快速开发,现代工作流 轻量级项目,PyPI 依赖 数据科学,复杂依赖管理

推荐:使用 uv 来获得最佳性能和简洁体验,尤其适合快速原型开发。

3. 创建 MCP 客户端

以下是一个简单的 Python 脚本,用于构建一个基于 Ollama 的 MCP 客户端,连接到一个示例 MCP 服务器(如文件系统工具)。

import asyncio
import nest_asyncio
from langchain_ollama import ChatOllama
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_mcp_adapters.tools import MCPTool
from langchain.agents import AgentExecutor, create_react_agent
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

# 允许嵌套异步运行(适用于 Jupyter 或交互环境)
nest_asyncio.apply()

# 配置 MCP 服务器(示例:文件系统 MCP 服务器)
MCP_CONFIG = {
    "mcpServers": {
        "filesystem": {
            "command": "uvx",
            "args": ["mcp-server-filesystem", "/path/to/your/folder"]
        }
    }
}

# 初始化 Ollama LLM
llm = ChatOllama(model="llama3.1:8b", temperature=0.7)

# 设置系统提示
SYSTEM_PROMPT = """
You are an AI assistant that uses MCP servers to interact with external tools.
Answer user queries by leveraging available tools and provide clear, concise responses.
"""

async def setup_agent():
    # 初始化 MCP 客户端并获取工具
    mcp_client = MultiServerMCPClient(MCP_CONFIG)
    tools = await MCPTool.from_mcp_client(mcp_client)

    # 创建 ReAct 代理
    prompt = ChatPromptTemplate.from_messages([
        ("system", SYSTEM_PROMPT),
        MessagesPlaceholder(variable_name="chat_history"),
        ("human", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad")
    ])
    agent = create_react_agent(llm, tools, prompt)
    return AgentExecutor(agent=agent, tools=tools, verbose=True)

async def main():
    agent_executor = await setup_agent()
    # 示例查询
    response = await agent_executor.ainvoke({
        "input": "List all files in /path/to/your/folder",
        "chat_history": []
    })
    print(response["output"])

# 运行客户端
if __name__ == "__main__":
    asyncio.run(main())

4. 配置 MCP 服务器

  • 保存配置:将 MCP_CONFIG 保存为 mcp_config.json 文件,或者通过命令行参数传递。
  • 启动 MCP 服务器:确保 MCP 服务器已运行。例如,使用 uvx mcp-server-filesystem /path/to/your/folder 启动文件系统服务器。
  • 验证连接:运行脚本,检查是否能正确调用工具(如列出文件)。

5. 测试与调试

  • 测试命令

    python mcp_client.py
    

    预期输出:列出指定文件夹中的文件列表。

  • 调试提示

    • 确保 Ollama 服务正在运行(ollama serve)。
    • 检查模型是否支持工具调用(参考 Ollama 文档)。
    • 使用 MCP Inspector(http://localhost:3001)查看可用工具和调试。

注意事项

  1. 模型选择:确保使用的 Ollama 模型支持工具调用(如 llama3.1:8bqwen2.5)。
  2. 性能优化:对于大型项目,uv 的速度优势显著,建议优先使用。
  3. 安全性:运行本地 MCP 客户端和 Ollama 确保数据隐私,但需检查工具调用是否涉及敏感操作。
  4. 社区资源:参考 Ollama GitHubMCP 文档 获取最新信息。

总结

通过以上步骤,你可以使用 Ollama 快速搭建一个 MCP 客户端,结合 uv 的高效依赖管理,实现本地化、隐私安全的 AI 工具调用。相比 pipcondauv 在速度和简洁性上更适合快速开发,而 conda 更适合需要复杂依赖的场景。希望这篇教程能帮助你快速上手 MCP 和 Ollama,构建强大的 AI 应用!

参考资料

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐