酒店预订MCP助理与Elicitation
如何将模型上下文协议与本地Llama 3模型配对,以处理明确依赖于启发式的酒店预订流程。MCP服务器公开了一个 book_room 了解日期和房间类别的工具。当请求的房间售罄(或缺少详细信息)时,服务器会通过以下方式进行诱导 ctx.elicit() 在返回之前收集替代指令 [SUCCESS] 或 [CANCELLED] 消息。
需求
- Python 3.10+
fastmcp>= 0.2.0pydantic>= 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 工具,并在需要预订操作时调用它。
激励流程
- 用户:“预订2025年12月31日的豪华客房。”
- Python服务器检查
data/rooms.json在那个日期找不到豪华客房。
- 服务器调用
ctx.elicit()随着BookingPreferences模式向LLM询问另一个日期或房间类型(或确认取消)。
- LLM与用户对话并发送结构化数据,例如,“试试标准房间。”
- 服务器重新检查库存,并使用确定性文本进行响应,例如:
[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 () 如果存在库存 |
