酒店预订MCP助手

一个结合本地Llama 3模型和Model Context Protocol(MCP)的酒店预订助手,通过对话引导处理房间预订流程,支持日期和房型选择,并在房间售罄或信息缺失时进行交互式引导。

  • by NijatZeynalov
  • Python
  • 混合部署
  • 更新于
在 GitHub 查看 NijatZeynalov/mcp_booking_assistant_elicitation

使用说明

酒店预订MCP助理与Elicitation

如何将模型上下文协议与本地Llama 3模型配对,以处理明确依赖于启发式的酒店预订流程。MCP服务器公开了一个 book_room 了解日期和房间类别的工具。当请求的房间售罄(或缺少详细信息)时,服务器会通过以下方式进行诱导 ctx.elicit() 在返回之前收集替代指令 [SUCCESS] 或 [CANCELLED] 消息。

需求

  • Python 3.10+
  • fastmcp >= 0.2.0
  • pydantic >= 2.0
  • 当地Ollama安装 llama3 家庭可用

LLM与服务器职责

  • LLM只处理对话:它解释用户意图,决定何时/如何调用MCP工具,并对服务器发出的启发提示做出响应。
  • 服务器持有业务规则:它验证有效载荷,读取 data/rooms.json,确定成功/取消,并精心制作启发过程中使用的每条消息。
  • 由于这种分割,最终的预订结果是确定的和可重复的,而由于LLM管理的对话,用户体验仍然感觉很自然。

在您的环境中安装Python依赖项:

pip install fastmcp pydantic

运行MCP服务器

python server/main.py

默认情况下,FastMCP在以下位置公开SSE端点 http://localhost:8000/sse.将Ollama配置指向此端点:

~/.ollama/config.json

{
  "mcp": {
    "servers": [
      {
        "name": "hotel-booking",
        "type": "sse",
        "url": "http://localhost:8000/sse"
      }
    ]
  }
}

重启 ollama serve 编辑配置后,运行首选的MCP感知界面。《Llama 3》将会发现 book_room 工具,并在需要预订操作时调用它。

激励流程

  1. 用户:“预订2025年12月31日的豪华客房。”

  2. Python服务器检查 data/rooms.json 在那个日期找不到豪华客房。

  3. 服务器调用 ctx.elicit() 随着 BookingPreferences 模式向LLM询问另一个日期或房间类型(或确认取消)。

  4. LLM与用户对话并发送结构化数据,例如,“试试标准房间。”

  5. 服务器重新检查库存,并使用确定性文本进行响应,例如:

    [SUCCESS] Booked for 2025-12-31 (standard)
    

如果用户拒绝提供替代方案(checkAlternative = False),服务器响应:

[CANCELLED] No booking made

该脚本直接调用预订逻辑,并使用本地提示/响应处理程序进行模拟 ctx.elicit()这对于验证测试计划中描述的快乐路径和启发场景非常方便。

测试场景

# 输入 预期结果
1 Book a standard room on 2026-01-01 [SUCCESS] Booked for 2026-01-01 (standard)
2 Book a deluxe room on 2025-12-31 诱导要求另一个日期或房间类型
3 用户回复如下 checkAlternative=false [CANCELLED] No booking made
4 用户提供替代日期/类型 [SUCCESS] Booked for <new_date> (<new_type>) 如果存在库存