如何实现本地大模型与MCP集成

1.概述

本文将围绕构建兼具本地运行大型语言模型(LLM)与MCP 集成能力的 AI 驱动工具展开,为读者提供从原理到实践的全流程指南。通过深度整合本地大模型的隐私性、可控性优势与 MCP 工具的自动化执行能力,帮助用户以低门槛、高效率的方式,打造个性化 AI 助手,实现任务自动化 —— 无论是文档处理、数据分析,还是流程调度等场景,均可通过这一集成方案,借助大模型的语义理解与推理能力,结合 MCP 工具的标准化接口,构建端到端的智能工作流,让 AI 真正成为提升生产力的核心引擎。

2.内容

2.1 环境准备

  • ollama
  • python==3.13.2
  • uv 0.6.12
  • Linux / macOS

大模型服务部署

  • 安装ollama服务框架
  • 通过ollama部署所需的大语言模型

开发环境配置

  • 准备Python 3.13运行环境(推荐使用最新稳定版)
  • 安装mcp服务开发所需的Python包

开发工具推荐

  • 使用uv工具链(新一代Python项目管理工具)
  • 功能覆盖:
    • Python版本管理
    • 虚拟环境控制
    • 依赖包管理
    • 项目依赖维护
  • 优势:提供全流程的Python开发环境管理方案

2.2 ollama安装

访问ollama地址:https://ollama.com/,然后根据自己的环境下载对应的安装包,如下图所示:

安装好ollama后,启动服务后,可以执行命令来检查服务是否启动成功,如下图所示:

 然后,我们在ollama的模型页面选择我们需要下载的大模型,可以根据自身机器的性能来选择不同规模的模型,如图所示:

安装完成对应的模型后,可以通过http://localhost:11434/api/tags访问查看安装在本地的模型信息,如图所示:

 2.3 安装uv工具

安装 uv(通常指 Rust 编写的超快 Python 包安装工具 uv,由 Astral 团队开发)的常用方法如下:

1. 使用官方安装脚本(推荐)
运行以下命令一键安装(适合 Linux/macOS):

curl -LsSf https://astral.sh/uv/install.sh | sh

安装后按提示将 uv 加入 PATH 环境变量,或直接重启终端。

2. 通过 pip 安装
如果已配置 Python 环境,可直接用 pip 安装:

pip install uv

3. 验证安装
运行以下命令检查是否成功:

uv --version

3.编写MCP服务

环境准备好之后,我们就可以开始编写MCP服务了,这里我们编写一个简单的MCP服务,用于读取本地文件,实现代码如下所示:

复制代码

import os
import uvicorn
import logging
from dotenv import load_dotenv
from argparse import ArgumentParser
from mcp.server.fastmcp import FastMCP
from starlette.applications import Starlette
from starlette.requests import Request
from starlette.routing import Route, Mount
from mcp.server import Server
from mcp.server.sse import SseServerTransport

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

# 加载环境变量
load_dotenv()


class Config:
    """应用配置类"""
    HOST = os.getenv('HOST', '0.0.0.0')
    PORT = int(os.getenv('PORT', 8020))
    DEBUG = os.getenv('DEBUG', 'False').lower() == 'true'
    FILE_PATH = os.getenv(
        'FILE_PATH',
        '/Users/smartloli/workspace/vscode/1/data.txt'
    )


# 初始化MCP
mcp = FastMCP("file_reader")


@mcp.tool()
async def read_file():
    """
    读取配置文件中的数据

    Returns:
        文件内容或错误信息
    """
    file_path = Config.FILE_PATH
    try:
        logger.info(f"Reading file: {file_path}")
        with open(file_path, 'r', encoding='utf-8') as file:
            return file.read()
    except FileNotFoundError as e:
        logger.error(f"File not found: {file_path}")
        return {"error": "File not found", "details": str(e)}
    except Exception as e:
        logger.exception(f"Error reading file: {file_path}")
        return {"error": "Unexpected error", "details": str(e)}


def create_starlette_app(mcp_server: Server) -> Starlette:
    """创建基于Starlette的MCP服务器应用

    Args:
        mcp_server: MCP服务器实例

    Returns:
        Starlette应用实例
    """
    sse = SseServerTransport("/messages/")

    async def handle_sse(request: Request) -> None:
        async with sse.connect_sse(
            request.scope,
            request.receive,
            request._send
        ) as (read_stream, write_stream):
            await mcp_server.run(
                read_stream,
                write_stream,
                mcp_server.create_initialization_options(),
            )

    return Starlette(
        debug=Config.DEBUG,
        routes=[
            Route("/sse", endpoint=handle_sse),
            Mount("/messages/", app=sse.handle_post_message),
        ],
        on_startup=[lambda: logger.info("Server starting...")],
        on_shutdown=[lambda: logger.info("Server shutting down...")]
    )


def parse_arguments():
    """解析命令行参数"""
    parser = ArgumentParser(description='Run MCP SSE-based server')
    parser.add_argument('--host', default=Config.HOST, help='Host to bind to')
    parser.add_argument('--port', type=int,
                        default=Config.PORT, help='Port to listen on')
    parser.add_argument('--debug', action='store_true',
                        help='Enable debug mode')
    return parser.parse_args()


if __name__ == "__main__":
    args = parse_arguments()

    # 更新配置
    Config.HOST = args.host
    Config.PORT = args.port
    Config.DEBUG = args.debug

    # 启动服务器
    mcp_server = mcp._mcp_server
    starlette_app = create_starlette_app(mcp_server)

    logger.info(f"Starting server on {Config.HOST}:{Config.PORT}")
    uvicorn.run(
        starlette_app,
        host=Config.HOST,
        port=Config.PORT,
        log_level="info" if not Config.DEBUG else "debug"
    )

复制代码

然后,我们使用uv来启动MCP服务,执行命令如下:

uv run file_list.py --host 0.0.0.0 --port 8020

启动成功后,显示如下图所示信息:

4.集成LLM 和 MCP

 准备好LLM服务和MCP服务之后,我们在Cherry Studio客户端上集成我们本地部署的LLM 和 MCP 服务,如下图所示:

1.配置本地文件搜索MCP服务

 2.集成本地LLM

 然后,在设置里面勾选“工具”就可以使用MCP服务了,如图所示:

 3.测试本地LLM回答

 4.测试本地LLM & MCP调用

 当我们开启MCP服务后,输入的搜索词中LLM会自行判断是否需要调用本地的MCP服务,这里我们通过搜索词触发LLM通过function去调用本地MCP服务。

5.总结

本文围绕本地大模型与模型上下文协议(MCP)的集成展开探索,重点揭示了通过 MCP 构建自定义 AI 工具的路径。通过适配不同开发环境与实际用例,MCP 为 AI 功能的跨场景整合提供了灵活框架,其核心优势体现在定制化能力上 —— 从模型选型到集成策略的全流程可调节性,使开发者能够基于具体需求打造精准适配的 AI 解决方案,展现了 MCP 在整合本地大模型时的多功能性与实践价值。

6.结束语

这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

内容概要:模型上下文协议(MCP)是由Anthropic于2024年底推出的一种开放标准,旨在标准化大型语言模型(LLM)外部数据源、工具和系统的连接。MCP采用客户端-服务器架构,包含宿主、客户端、服务器、工具、资源、提示、采样、根、传输等关键组件,使用JSON-RPC 2.0作为消息传递格式。MCP解决了传统API集成的复杂性和碎片化问题,简化了LLM外部系统的集成MCP的发展历程包括2024年11月的开源发布,随后OpenAI和Google DeepMind等公司相继支持。MCP生态系统迅速扩展,涵盖了Google Drive、Slack、GitHub等多个平台,并引入了FastMCP、Haystack等支持工具。MCP大模型应用开发中的用例包括增强LLM的上下文理解、知识库集成、自动化工作流程等。MCP强调安全性,设计为“本地优先”,并通过OAuth 2.1进行身份验证和授权。未来,MCP将继续扩展其功能,支持更多模态和流式传输。 适合人群:具备一定编程基础,特别是熟悉大模型应用开发的工程师和技术人员。 使用场景及目标:①简化LLM外部数据源和工具的集成,解决传统API集成的复杂性;②构建能够访问实时数据、自动化工作流程、知识库集成的智能应用;③提高LLM的上下文理解和响应准确性;④确保数据访问的安全性和用户控制。 其他说明:MCP不仅提供了一种标准化的集成方式,还为开发人员提供了丰富的工具和库,如FastMCP和Haystack集成,简化了开发流程。随着主要AI平台的积极采纳,MCP有望成为未来AI应用开发的关键组成部分。开发人员应关注MCP的持续更新和增强,以充分利用其功能和优势。
### 本地大模型 MCP 使用指南 #### 什么是MCPMCP(Model Context Protocol,模型上下文协议)是一种用于连接大型语言模型(LLMs)外部工具的标准协议[^2]。其设计目标是简化AI模型对外部资源的访问过程,使得开发者能够轻松实现复杂的任务处理,例如数据查询、分析以及路径规划等功能。 #### MCP的核心功能 MCP的主要作用在于为不同类型的AI代理提供了一种统一的方式去调用第三方服务或应用程序接口(API)[^3]。这就好比给计算机硬件添加了一个通用插槽——类似于USB端口的功能,任何遵循该标准的服务都可以被快速集成到基于MCP构建的应用程序当中。 #### 如何在本地环境中设置MCP? 为了能够在个人设备或者私有网络内部署并利用MCP技术,以下是几个关键步骤: 1. **安装必要的依赖项** 开始之前,请确保您的系统已安装Python环境以及其他可能需要用到的支持库。对于某些特定项目来说,还可能需要额外配置Docker容器来运行预训练好的神经网络权重文件。 2. **下载合适的开源框架** 当前市面上有许多优秀的解决方案可供选择,比如Ollama, DeepSeek 和 Qwen等都提供了良好的文档说明帮助初学者入门学习如何操作这些先进的算法结构[^3]。 3. **编写自定义逻辑代码** 下面展示了一段简单的Python脚本作为例子演示怎样通过HTTP请求向远程Web API发送指令获取返回结果后再交给NLP引擎进一步解释理解含义: ```python import requests def call_external_api(url, params=None): response = requests.get(url, params=params) if response.status_code == 200: return response.json() else: raise Exception(f"Error calling {url}: {response.text}") # Example usage of the function above within an NLP pipeline context. if __name__ == "__main__": api_result = call_external_api("https://example.com/api", {"query": "weather forecast"}) print(api_result) ``` 4. **测试整个流程是否正常工作** 完成以上准备工作之后就可以尝试模拟一些实际应用场景看看效果怎么样啦! #### 总结 综上所述,借助于像MCP这样的先进技术手段可以让原本孤立存在的各个组件之间建立起紧密联系从而形成完整的生态系统;此同时也要注意到由于涉及到多方协作所以必然伴随着一定复杂度增加的风险挑战等问题亟待解决优化改进之处还有很多等待探索发现的机会空间巨大无比值得投入精力深入研究下去不断追求进步成长壮大自我价值体现出来造福社会大众群体共同前进发展迈向美好未来世界吧[^4]!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值