🚆 聊天时刻表 – 瑞士时刻表MCP服务器
A. Spring AI/MCP兼容服务器 这提供了 SBB时刻表信息 语言模型。\ 启用 *带上你自己的法学硕士* 与SBB时间表交互的场景。\ 这是一个 实验研究项目 随着 无担保 关于准确性、完整性或运行时行为。
灵感来自SBB 1996年的“Sprechender Fahrplan”
______________________________________________________________________
概述
该存储库使用五个LLM工具扩展了与MCP兼容的Spring Boot服务器,用于瑞士铁路行程规划。
这些工具允许大型语言模型直接查询SBB Journey API,根据用户意图和时间上下文选择正确的函数。
工具
- 下一个旅程 –返回两个车站之间下一个可用连接的自然语言描述(用于“现在”、“下一班火车”、“很快”)。
- 计划行程 –返回特定ISO日期时间(用于“今天14:35”、“明天07:10”)后的下一个可用连接。
- list旅程 –以JSON格式返回今天即将到来的几个连接(用于“显示选项”)。
- 列表和计划行程 –以JSON格式返回从给定日期时间开始的多个连接(用于“16:00后显示列车”)。
- 原始 –从SBB Journey Service返回未处理的JSON响应(用于调试或分析)。\
*注意:由于JSON有效载荷较大,这种方法通常会淹没上下文窗口有限的较小语言模型。*
附加辅助工具 数据 以ISO格式提供今天的日期以进行日期解析。
______________________________________________________________________
存储库中的组件
- 基础设施 –基础设施和安全组件
- 旅行服务 –与SBB旅行服务集成
- 映射 –从旅程服务数据映射到LLM可消化的数据类型
- 时间表工具 –公开MCP工具
- 最小Jinja模板 –用于LM Studio与Apertus的集成
- MCP代码段示例 –显示如何将本地MCP服务器与LM Studio连接
______________________________________________________________________
与LLM集成
MCP服务器可以连接到各种LLM运行时和前端。\ 以下是测试集成的概述:
| 接口 | LLM供应商 | LLM型号 | MCP运行时 | 文本 | 语音输入 | 语音输出 |
|---|---|---|---|---|---|---|
| LM工作室 | 谷歌 | Gemma-3 270米 | 本地 | ❌ | ❌ | ❌ |
| LM工作室 | 谷歌 | Gemma-3 1b | 本地 | ❌ | ❌ | ❌ |
| LM工作室 | 谷歌 | Gemma-3 4b | 本地 | ✅ | ❌ | ❌ |
| LM工作室 | 瑞士AI | Apertus 8B | 本地 | ❌ | ❌ | ❌ |
| LM工作室 | 阿里云 | Qwen3 8B | 本地 | ✅ | ❌ | ❌ |
| LM工作室 | OpenAI | OSS GPT 20B | 本地 | ✅ | ❌ | ❌ |
| Le Chat | 西北风AI | 西北风123B | GCP | ✅ | ✅ | ❌ |
| 克劳德 | 人类学 | 克劳德十四行诗4.5 | GCP | ✅ | ✅ | ✅ |
| ChatGPT | OpenAI | GPT-5 | GCP | ✅ | ✅ | ❌ |
传说:
✅ = 验证工作 ❌ = 不支持/不起作用
结果
以下用例和好处已经过测试:
- 与起点和终点的下一个连接
- 计划连接
- 多项选择
- (多次)中途停留的旅程
- 行程规划
- 多语言支持
以下是与各种MCP主机和型号集成的运行原型的一些截图

与Claude web集成,显示请求和响应

与LMStudio和谷歌的gemma3-4b集成。这是可以与MCP服务器成功集成的最小模型。

与ChatGPT集成。出于安全原因,需要开发人员模式。

非常好的语音转文本模型(瑞士电台名称很重要!)。
挑战
必须克服以下挑战:
- 保持指令的令牌大小尽可能小,以便将其与较小的模型集成
- 创建数据格式和结构,使令牌大小有限的较小模型能够与mcp服务器协同工作,同时仍能从较大的云模型中受益
- 防止服务器响应语言引起的语言切换
- 日期和时间计算:测试的MCP主机/LLM在日期/时间方面没有相同的行为。有时日期是存在的,确切的时间几乎从来没有。
- 安全/隔离
______________________________________________________________________
运行时
MCP服务器运行在:
- 本地 需要Java 21;定义
- JOURNEY_SERVICE_BASE - MCP_API_KEY - JOURNEY_SERVICE_CLIENT_ID - JOURNEY_SERVICE_CLIENT_SECRET
- 谷歌云平台 –可在Cloud Run上部署(请参阅
cloudbuild.yaml和project.toml);配置为苏黎世。\
定义与上述相同的环境变量。\ 云部署需要与公开可用的模型(例如Mistral)进行交互。
______________________________________________________________________
局限性
- Apertus模型 集成失败的主要原因是缺少工具支持。
- 旅程服务集成 目前无法处理所有边缘情况。缺乏情况,选择第一站比赛,如果火车晚点,沟通不畅。
- 双子座 不支持,因为MCP功能仅在cli/sdk中可用。
- 认证 没有完成干净的OAuth集成。仅限MCP规范不支持的API-keys
______________________________________________________________________
未来工作
CAS论文阶段的GCP部署已经退役。开发继续进行类似的整合。 这次不是使用SBB API,而是使用来自https://opentransportdata.swiss/. 这https://github.com/thpeng/unendliche-reise-mcp专注于更好的用户体验(如启发)和改进的安全性 与配套材料一起显示的漏洞https://github.com/thpeng/lokis-mcp.
致谢
- 瑞士AI –对于Apertus模型(由于缺少MCP/工具支持以及声称“Totemügerli”是瓦莱州的一个高峰,因此有点令人失望;)
- DSO-KIS –提供旅行服务通道
- @blancsw –Jinja模板基础(见 拥抱脸讨论)
- ChatGPT –用于氛围编码会议
______________________________________________________________________
