介绍
# BVG Route Planner Skill
目的 - 使用 v6.bvg.transport.rest API 提供简明、可执行的柏林公共交通路线。
何时使用 - 用户询问柏林两个地点(地址、站点名称或坐标)之间的路线。 - 用户询问从某站点/车站出发的下一班车。 - 用户要求在特定时间到达 或在特定时间出发。
核心行为 1. 使用 GET /locations 或 /locations/nearby 将 `from` 和 `to` 解析为站点 ID(首选)或地址/POI 对象。 2. 按照请求使用到达或出发参数调用 GET /journeys,请求 results=3 和 stopovers=true 以构建逐步的行程段。 3. 格式化 2–3 个选项:显示总行程时间、换乘次数、步行时间以及预估的出发/到达时间。 4. 为所选行程提供逐步说明:步行至站点 A(距离/时间),乘坐 X 线前往 Y,在站点 B 下车(如有平台信息),最后步行至目的地。 5. 适当时包含行程 refreshToken 和一个 GET /journeys/:ref 刷新步骤以更新实时延误。 6. 对于简单的下一班次查询,使用 GET /stops/:id/departures 并设置 duration=20(或可配置),返回最近的 3 个发车班次。
输出 - 人类可读的路线,包含出发时间、换乘、步行距离、预计到达时间和简明的步骤列表。 - 机器友好的 JSON(可选),包含 journey id、refreshToken、legs 和站点 ID,用于程序化刷新。
参考 - 该技能预期使用 v6.bvg.transport.rest API (https://v6.bvg.transport.rest/api.html)。摘要和示例请参见 references/API.md。
示例(触发词) - "How do I get from Invalidenstraße 43 10115 to Leibnizstraße 62 by public transport?" - "When is the next U-Bahn from U Rosenthaler Platz?" - "Find journeys that arrive at Deutsche Oper by 17:50 tonight, fastest option first."
给实现者的注意事项 - **IBNR 格式(关键):** `/journeys` 端点**仅需要基础 IBNR 代码**(6 位数字),不需要带有 `::` 后缀的完整 ID。 - ❌ 错误:`de:11000:900110001::3` 或 `de:11000:900110001` - ✅ 正确:`900110001`(从 `/stops` 结果中提取 6 位基础代码) - 处理过程:首先调用 `/stops?query=...`,从结果中提取 6 位 `id`,将其用于 `/journeys`。 - **URL 编码(关键):** 所有查询字符串参数必须使用 `urllib.parse.quote()` 或等效方法进行正确的 URL 编码。示例: - 空格 → `%20` - `ö` → `%C3%B6` - `ü` → `%C3%BC` - `Ä` → `%C3%84` - 特殊字符如 `&`, `?`, `#` → 其百分号编码等效形式 - 示例:`Schönhauser Allee` → `Sch%C3%B6nhauser%20Allee` - 每个在查询参数中包含地址/站点名称字符串的 API 调用在构建 URL 之前都必须进行编码。 - 调用 /journeys 时首选站点/车站 ID(比模糊名称更可靠):使用 `/stops?query=...` 解析名称 → 基础 IBNR。 - 使用 `stopovers=true` 构建可读的步骤列表;当步行到入口的准确性很重要时,包含 `entrances=true`。 - 请求 `results=3` 然后向用户提供前 2–3 个选项。 - 处理时区感知的 ISO 日期时间;如果未提供,默认为 Europe/Berlin。