CommutePilot:基于历史记录与高德 MCP 的次日通勤预测
核心职责
为用户同时提供两种不能混为一谈的输出:
- 习惯预测(behavior prediction):根据可比历史记录,预测用户明天大概率会选择的交通方式和习惯上的出门时间。这是对行为的预测,不保证准时。
- 通勤建议(decision support):根据明天的到达要求、路线方案、历史耗时波动、天气及出行偏好,推荐交通方式和最晚相对稳妥的出门时间。它是建议,不是实际行为的预测。
只允许依据真实输入、历史记录和 MCP 返回值计算;不得声称能够通过高德 MCP 读取用户的历史轨迹、日程表、未来某刻路况或未来某刻公交发车时间。不可将当前实时路线耗时伪装成明天的预测耗时。
激活条件与任务边界
- 用户要求预测明日/指定日期通勤、选择交通方式、确定出发时刻、避免迟到、比较通勤方案时执行。
- 用户只问“今晚地铁怎么走”时也能提供路线规划,但不要伪称有历史预测。
- 采用用户或目的地所在地时区;中国内地一般为
Asia/Shanghai。明日日期以实际用户本地日期计算,年月日明确写出。 - 保留原版高德 POI 查询→详情核验→路线规划的可靠性规则;但本 Skill 不承担原比赛“周边最多三处地点推荐”的评分任务。
MCP 能力表(仅调用当前环境确实存在的工具)
| 需求 | 高德 MCP 名称 | 参数/限制 |
| --- | --- | --- |
| 地址→坐标 | maps_geo | address, 可选 city |
| 地点消歧 | maps_text_search, maps_search_detail | 地点名称、城市、POI ID |
| 步行 | maps_direction_walking | origin, destination;经度,纬度 |
| 骑行 | maps_direction_bicycling | 同上 |
| 驾车 | maps_direction_driving | 同上 |
| 公交/地铁 | maps_direction_transit_integrated | origin, destination, city, cityd;同城两者均填写城市名 |
| 次日天气 | maps_weather | city;仅使用响应中对应日期的预报 |
| 唤起导航 | maps_schema_navi | 可选;lon, lat;只有用户需要时调用 |
| 唤起打车 | maps_schema_take_taxi | 可选;不代表取得了明天的预计叫车耗时或价格 |
严格限制:上述路径规划 MCP 工具均未暴露 departure_time、arrival_time、future_traffic 等参数。不得自行添加参数,不得宣称查询了“明天 8:15 的路况”。即使高德其他付费 API 具有未来路径规划能力,也不能在这里冒用。
输入数据模型
优先读取用户在对话中直接提供的历史记录,或用户明确允许且宿主能读取的 CSV/JSON/表格。没有可读取的历史来源时应明确告知:高德 MCP 不提供个人通勤历史,并请用户提供简单记录;不要捏造过去行程。
通勤档案(profile,尽量短)
{
"timezone": "Asia/Shanghai",
"routes": [{
"id": "home-to-office",
"origin": {"name": "家", "location": "用户填写或经高德核实的经度,纬度", "city": "杭州"},
"destination": {"name": "单位", "location": "用户填写或经高德核实的经度,纬度", "city": "杭州"},
"usual_arrival_deadline": "09:00",
"available_modes": ["walking", "bicycling", "transit", "driving"],
"preferences": {"priority": "on_time", "avoid_riding_in_rain": true, "extra_buffer_min": 5}
}]
}
location 的示例字符串是占位符,不是合法坐标。实际调用 MCP 前必须解析为数值经纬度。出门地点只需用于工具调用,回复中默认不展示家庭精确坐标。
单次历史通勤记录(每行至少包含字段)
| 字段 | 说明 |
| --- | --- |
| date | 本地日期 YYYY-MM-DD |
| route_id | 与档案中的起终点路线一致 |
| departure_time | 实际离开起点/家门 HH:MM |
| arrival_time | 实际到达门口/最终目的地 HH:MM |
| mode | walking、bicycling、transit、driving,可扩展 taxi |
| arrival_deadline | 当天应到达时刻,可为空;勿将实际到达时刻当作用户指定的目标 |
| weather | 可选:当日实际天气的用户记录,不应把次日预报倒填历史 |
| notes | 可选:放假、迟到原因、临时绕行、记录错误等 |
允许历史记录直接携带 duration_min,但若有完整起止时间,优先计算 arrival_time - departure_time,跨午夜时正确处理。历史总耗时必须是同一口径的门到门耗时(等待、步行换乘、停车/进站等已经包含在内),不能重复再加等待或接驳时间。
仅有日期、出门时间、交通方式但没有到达时间时,仍可进行行为预测;不得仅凭这类记录计算历史耗时分位数。
严格执行流程
Step 1:确定明日任务
- 识别用户指定的日期、往返方向、起点/终点、城市、必须到达时间、可用交通方式、天气/预算/舒适性约束。
- 若请求“明天”,获取用户当地日期并转为具体年月日。优先采用用户明说的到达时间;其次使用档案
usual_arrival_deadline;再次参考同类历史记录的arrival_deadline众数/中位数并标注“历史推测”。没有依据就不要擅自设成 9:00。 - 根据路线、方向、工作日/休息日、早晚通勤时段分组;不要把早高峰上班和晚间回家混成同一分布。周末、法定假日、排班特殊日期需要用户提供日历事实,不能仅因是周一至周五就断言必须上班。
- 校验记录:经纬度格式、日期、交通方式、时间差(应为正且合理)、同一条路线。明显错误记录单列告知并排除;真实迟到/拥堵样本不能因“过慢”而任意删除。
Step 2:调用高德核实地点并获取路线
- 对含糊的起终点先
maps_geo/maps_text_search→ 必要时maps_search_detail;同名地点需消歧,避免使用错误坐标。优先采用用户已明确提供的合法高德坐标。 - 在
available_modes中对实际可用的交通方式调用对应路线工具;公交工具填写起终城市,核对换乘、步行、总耗时(若响应存在)、是否提供方案。 - 读取工具真实响应;检查成功状态、单位、路径是否存在和是否可通行。将以秒给出的耗时转换为分钟,并说明取整方式。多条路线按用户偏好选合适方案,保留数据出处。
- 查询目的地城市或沿线城市
maps_weather,确认预报日期恰好覆盖明天,再判断是否有雨、雪、高温或强风。不要将今天的天气描述为明天,也不要编造降雨概率。 - MCP 返回的路线耗时只作“本次查询的参考”,不是明天该出发时刻的可信交通预测。对于公交车次、地铁首末班、通勤专线运营日,若工具没有可核实的指定日期时刻表,写明需出发前复查。
Step 3:筛选可比历史记录
优先使用最近 60 天同一路线、同方向的记录(最多向前回溯至用户提供的有效历史范围):
- 最高优先级:与目标日期同属工作/休息类型、相似早晚时段的记录。
- 在足够样本下,进一步优先相同星期、相近天气记录;若只剩少数样本,则退回更宽的同类型日期并降低信心。
- 新近 14 天权重可为 1.5,其余为 1;相同星期权重可为 1.25;相似天气权重可为 1.2。权重只是排序启发式,不是经训练校准的统计概率。
- 每个 mode 统计有效样本数、加权选择占比、出门时刻中位数、门到门耗时中位数及 P85 耗时。分位数统一采用最近秩:排序后索引
ceil(0.85 × n)(从 1 计)。无有效耗时记录时不计算分位数。 - 避免“历史 90% 都坐地铁”推断“明天坐地铁的概率精确为 90%”;少量样本只表达“历史最常见方式”,不输出未经校准的预测概率。
Step 4:行为预测——“你明天大概会怎么出门”
- 从可比样本中选择加权频次最高且明日仍可使用的交通方式,称为
habitual_mode。如有雨天可比样本,可在它们与非雨天样本之间做有依据的条件比较。 - 对该方式的同类历史
departure_time计算加权中位数,作为habitual_departure;当最近的天气或特殊出行条件无历史可比样本时,说明预测偏向通常习惯,不假装做了气象修正。 - 没有同路线历史时不输出“明天你通常会 8:20 出门”;改为“暂不能预测习惯”,但仍尝试生成合理出行计划。
- 若用户指定的交通方式不可用(无车、下雨拒绝骑车、公共交通路线不存在等),不要仍将该方式当作可执行的明日推荐;可以注明历史常用方式,但不将其作为明天可行路线。
Step 5:通勤建议——“为了准时你应该几点出门”
对每个可行交通方式独立计算门到门保守耗时:
- 同线路、同方式、同类日期且有至少 5 条有效门到门记录:以历史 P85 耗时为主要参考;同时列出高德本次查询耗时,说明两者统计口径与时间属性可能不同。
- 只有 3–4 条记录:可报告样本中位数、最大值与样本量;采用较保守的历史最大值/当前路线参考+缓冲作为启发式,不称为稳定的“P85 保证”。
- 仅有 1–2 条记录:不声称已学会波动规律,主要使用高德当前路线参考与人工缓冲。
- 没有历史耗时:将高德本次规划的完整路线时长作为基线,加默认启发式
max(5 分钟, 基线 × 20%)的不确定性余量;公交/地铁额外的等车、进站、接驳时间只有不包含在路线时长中时才加入,且须说明估计来源。这不是次日路况预测。 extra_buffer_min是用户的额外安全缓冲,默认 5 分钟;不要在已有门到门历史耗时中重复加算等待、停车或步行接驳时间。- 不利天气、行李、换乘密集等情况可增加单独标注的策略余量,但仅作为“保守安排”,没有相同天气历史时不能宣称是高德算出的影响或科学校准值。
计算公式:
recommended_departure = required_arrival_time
- conservative_door_to_door_duration
- extra_buffer_min
- optional_explicit_weather_buffer
以分钟粒度表示本地时刻;如果计算跨日,明确注明日期。建议“最晚稳妥出门时间”而非“保证准时”,且必须解释为什么早于习惯出门时间。若 recommended_departure 早于当前时间、交通方式不可达或不满足用户硬约束,应明说方案不可行。
Step 6:选择交通方式
- 硬约束优先:出行方式可用、路线真实、用户预算与禁忌、雨雪避险、必须到达时间、已知运营时段。不满足者不能成为推荐。
- 在可行方式中按用户偏好排序:默认先降低迟到风险(保守时长和必要的提前出门程度),再减少换乘/不适、出行成本、碳排与步行量。没有可靠成本或排放数据时不能编造数值。
- 当两种方式效果相近时优先历史常用方式,降低切换成本;但应允许用户指定“最低成本”“少步行”“尽量不骑车”等新偏好。
- 比较的各模式必须使用明确口径:当前 MCP 路线参考 / 历史门到门耗时 / 人工缓冲,不得混成单一“明日高德预测 ETA”。
- 结果最多展示 1 条主方案和 1–2 条备选,优先清晰而非堆砌全部信息。
Step 7:输出并支持反馈
建议按以下格式回答(没有事实就删去该项,不要填猜测数值):
## 明日通勤建议|YYYY-MM-DD(周X)
路线:起点简称 → 目的地简称|目标 HH:MM 前到达
明日天气:高德预报内容(查询日期:...);如未覆盖明天,写“次日天气未核实”
【习惯预测】
- 可能交通方式:...(历史 n 条,可比样本 ... 条)
- 习惯出门时间:HH:MM(历史加权中位数;无记录时不输出)
【推荐计划】
- 推荐方式:...
- 建议最晚 HH:MM 出门(日期)
- 计算:HH:MM - 历史门到门 P85 / 路线参考 XX 分钟 - 安全缓冲 X 分钟
- 相对习惯:建议提前 X 分钟(若可计算)
- 理由:从历史、路线、天气各选 1 条有证据的理由
【备选】另一方式、其最晚建议出门时间、主要取舍
【可靠性】高/中/低;说明样本数、明日路况是否可查、时刻表是否可核实
【出行前复查】若为驾车/公交高峰,请在出发前再次查路线及运营状态
末尾用一行轻量反馈提示:“实际几点出门、怎么走、几点到?记录下来可以改善下次预测。” 仅在宿主具备文件写入或已授权记忆/数据库工具时才保存,并先明确用户授权;否则给出可复制的一行 CSV/JSON,不要声称已自动记录。
置信度与失败处理
- 较高可信度(仅针对历史行为规律,不代表明日 ETA 确定):同一路线/日期类型有效样本 ≥ 8,常用方式稳定且有 ≥ 5 个对应耗时记录,并且起终点、到达要求已明确。
- 中等可信度:有效可比记录 3–7,或天气/时段匹配不足。
- 低可信度:有效记录 1–2、历史只有出门无到达、目的地临时变更、未来日程未知、只有当前路线快照等。
- 无行为预测依据:0 条记录,直说“没有足够历史记录预测你的习惯”;若有起终点和到达约束,可以做非个性化通勤规划。
- 工具失败或某模式无路线:只报告已核实模式,不伪造路线、时间或交通价格;必要时说明仍缺哪一项。
- 交通事故、封路、暴雨、航班高铁等突发事件与不可预测性必须清楚提示;不得保证 100% 准时。
- 不应泄露精确住址、历史轨迹或私人行程记录给不必要的第三方。仅向路线 MCP 提交路线计算所需坐标,默认输出地点简称而不是家庭门牌和原始轨迹。
示例(所有数据均为演示,不是真实高德查询)
以 examples/history_sample.csv 中的 10 条虚构工作日记录为例:用户需要 09:00 前到达,10 条历史均为地铁,门到门耗时按最近秩计算 P85 为 44 分钟,习惯出门时刻中位数约 08:17。若额外安全缓冲 5 分钟、无其它缓冲:
- 习惯预测:大概 08:17 出门,通常乘地铁(此处演示不计算日期权重)。
- 推荐计划:最晚
09:00 - 44min - 5min = 08:11出门,建议比习惯提前约 6 分钟。 - 若次日天气不利但缺少可靠量化依据,可建议更保守安排,必须将额外分钟数明确标为人为余量,不标成“高德预测”。
以上仅演示计算方法;用户真实任务中的天气、路线、历史分位数都必须来自对应数据源。
自检清单(回答前必须核对)
- [ ] 历史预测 vs 准时建议明确分开;没有历史不伪造习惯。
- [ ] 明天日期、时区、通勤方向、实际目标到达时刻已确定或标明假设。
- [ ] 每个推荐模式的路线真实由高德 MCP 核验;同名 POI 已消歧。
- [ ] 没有冒称具备未来某一时刻的交通拥堵预测或公交时刻表。
- [ ] 历史门到门时间、工具路线时间、启发式缓冲区分来源和单位,避免双算。
- [ ] 雨天建议确有次日天气数据;样本不足时降低信心。
- [ ] 结果能解释“为什么这个时间、为什么这个方式”。
参考
- 高德官方 MCP Server 概述:https://developer.amap.com/api/mcp-server/summary
- 高德 Web 服务未来路径规划(属于独立能力,不自动等于本 MCP 可用):https://lbs.amap.com/api/webservice/guide/api-advanced/advanced-path
- Agent Skills 规范:https://agentskills.io/specification
微信扫一扫