在本地 LLM 上运行MCP

无限制地使用本地LLM来实际检验MCP

学习生成式人工智能应用

上次我思考如何在本地设置LLM API时, 你将能够在应用程序开发中进行无限制的LLM实验.

在本地机器上离线部署LLM API
在本地和离线环境中探索LLM开发, 无需依赖付费的ChatGPT服务

如果我们能将LLM连接到提供的MCP(模型上下文协议), 那该多好啊! 这样我们不仅可以进行聊天, 还可以执行MCP提供的某些任务.

在MCP服务器上提供了许多MCP供我们探索. 在本例中, 我们将尝试Airbnb提供的MCP, 该MCP在AirBnb MCP 服务器中有详细文档, 用户可以在其中进行聊天并列出Airbnb上的房源.

1. 启动Ollama服务

首先, 我们需要安装 LLM 引擎, 并确保 LLM 模型已安装, 具体操作可参考这篇文章(medium.com/tech-ai-cha...? sk=75234e581f73a8c577011c278dcfbd75)

然后, 我们将启动本地 LLM 引擎 Ollama, 使用以下方式之一:

sql 复制代码
brew services start ollama

或

复制代码
ollama serve

指向服务 API

现在, 我们需要为本地 Ollama 服务提供入口点. API 设置的详细说明请参阅这篇文章.

ini 复制代码
export OPENAI_API_KEY=not-needed 

export OPENAI_API_BASE="http://localhost:11434/api/generate"
# OR, for continuous chat base
export OPENAI_API_BASE="http://localhost:11434/api/chat" 

注意: 若拥有 API 密钥, 也可指向 ChatGPT 服务器, 但本例中设置为本地模式

2. 安装本地 MCP 服务包

为实现与 MCP 的连接, 我们使用 PraisonAI, 其源代码可在此处获取: PraisonAI

我们将在此 Python 环境中进行安装. 因此, 建议先按照此处文档设置本地虚拟 Python 环境.

可通过以下方式安装:

arduino 复制代码
pip install -U "praisonaiagents[llm]" gradio

安装完成后, 即可在 Python 项目中连接 MCP

3. 首个 Ollama 应用程序

编写以下应用程序:

ini 复制代码
from praisonaiagents import Agent, MCP

search_agent = Agent(
    instructions="""You help book apartments on Airbnb.""", 
    llm="ollama/llama3",
    tools=MCP("npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt")
)

search_agent.start("Search for Apartmnets in Melbourne for 2 nights. 13/06/25 - 15/06/25")

Agent 参数可根据 github.com/openbnb-org... 提供的说明设置 MCP

之后, 我们可以进行搜索. (注意: 你需要运行 Ollama 服务, 如上文步骤 1 所示), 它应运行并显示如下结果:

基于你的提示自动生成的初始参数

MCP 的输出 JSON 结果(比屏幕上显示的要长得多)

生成的输出

同时显示提示和输出

带本地 LLM 的聊天式 MCP

在上述示例中, 提示语是直接写在程序中的. 如果我们希望提示语由用户输入, 并且具有聊天的上下文, 该怎么办?

为此, 我们需要确保导出本地 Ollama 聊天 API 而不是:

ini 复制代码
export OPENAI_API_KEY=not-needed 

export OPENAI_API_BASE="http://localhost:11434/api/chat"

然后我们可以编写一个聊天程序, 该程序将持续提示用户输入(代码修改自这篇文章(medium.com/tech-ai-cha...? sk=3599805d6f5491dc3824aa14e64f7c88)

python 复制代码
from praisonaiagents import Agent, MCP

search_agent = Agent(
    instructions="""You help book apartments on Airbnb.""", 
    llm="ollama/llama3",
    tools=MCP("npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt")
)

def stream_chat(prompt, messages):
    messages.append({"role": "user", "content": prompt})

    try:
        search_agent.start(prompt)

    except requests.exceptions.RequestException as e:
        print(f"\n❌ Error: {e}")

if __name__ == "__main__":
    print("=== Ollama Chat with Context ===")
    print("Type 'exit' or 'quit' to leave.\n")

    messages = []  # 💡 This holds the conversation history

    try:
        while True:
            prompt = input("Chat with Airbnb: ")
            if prompt.strip().lower() in ["exit", "quit"]:
                print("👋 Goodbye!")
                break
            stream_chat(prompt, messages)

    except KeyboardInterrupt:
        print("\n👋 Interrupted. Goodbye!")

运行程序后, 现在你可以与Airbnb MCP进行连续聊天, 如下所示:

我尝试了一些关于狗的查询, 并得到了些有趣的结果.

适当的用户界面示例

以上均为命令提示符界面. 若要实现如下所示的适当用户网页界面, 可使用github.com/gradio-app/..., 这是一个开源 Python 包, 可帮助你快速构建机器学习模型, API 或任意 Python 函数的演示或网页应用程序.

我们之前已在 Python 环境中下载了该包, 使用:

arduino 复制代码
pip install -U "praisonaiagents[llm]" gradioCredits

要使用它, 只需编写以下代码:

ini 复制代码
from praisonaiagents import Agent, MCP
import gradio as gr

def search_airbnb(query):
    agent = Agent(
        instructions="""You help book apartments on Airbnb.""", 
        llm="ollama/llama3",
        tools=MCP("npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt")
     )
    result = agent.start(query)
    return f"## Airbnb Search Results\n\n{result}"

demo = gr.Interface(
    fn=search_airbnb,
    inputs=gr.Textbox(placeholder="I want to book an apartment in Place for X night..."),
    outputs=gr.Markdown(),
    title="Airbnb Booking Assistant",
    description="Enter your booking requirements below!"
)

demo.launch()

运行后, 将显示:

你可通过 http://127.0.0.1:7860/ 访问 Web 界面.

提交查询后, 结果将显示在左侧面板:

致谢

本教程主要基于此 YouTube 视频, 并添加了补充信息以完善缺失部分(例如启动 Ollama 服务器, 导出所需参数以及实现交互式应用程序)

好吧, 今天的内容就分享到这里啦!

一家之言, 欢迎拍砖!

Happy coding! Stay GOLDEN!

相关推荐
Danny转行做跨境8 小时前
MCP 配置连不上?我把亚马逊选品数据的接入坑填了一遍
跨境电商·mcp·sorftime
老周聊架构9 小时前
工具与 MCP:让 Agent 长出手脚
agent·mcp
小金的研发日志12 小时前
ASP.NET 手搓 MCP 服务(四):刷新令牌的轮换与重放检测
mcp
Dumbness13 小时前
写 MCP 服务器踩的坑:stdout 是协议通道,一行不带换行的日志就能让客户端超时
node.js·mcp
黑黑的脸蛋14 小时前
同时用 Claude Code 和 Codex,我做了个 Agent 资产库:能预览、能投递、能追更新
ai编程·claude·mcp
xrlfreedom1 天前
MCP 面试高频考点:如何用 TypeScript SDK 设计带人工确认的高风险 Tool?
mcp·最小权限与审计日志·stdio 传输·typescript mcp sdk
余槐i1 天前
Claude Code 切换中转站后 401 不断:先查环境变量覆盖顺序
api·开发工具·mcp·claude code·cc-switch
小金的研发日志1 天前
ASP.NET 手搓 MCP 服务(三):让 MCP 服务只认访问令牌
mcp
Danny转行做跨境2 天前
我用 MCP 盯亚马逊选品排名?47 题自动监控这样搭
跨境电商·mcp·sorftime
挖掘狂人2 天前
2026 年,为什么一线团队开始从 MCP 撤回 CLI?
人工智能·agent·mcp