用于本项目的两点距离与耗时估算。只要用户提到两点距离、两点时间、起点终点、车巡、徒步、骑行、预计耗时,或明确说没有道路数据只能按直线距离估算,就要使用这个 skill。即使用户没有点名 skill,只要需求本质是“两点之间多远、多久”,也应优先触发。
这个 skill 用于回答本项目里的“两点之间距离和耗时估算”问题。
它只负责两点估算,不负责以下内容:
如果用户的问题已经扩展到完整巡逻规划,要明确说明超出当前 skill 范围,并建议切换到更完整的规划方案。
在以下场景使用本 skill:
在以下场景不要硬套本 skill:
优先从用户输入中归一化出这些字段:
origindestinationmoderoad_distance_km 可选road_duration_min 可选origin_lat / origin_lng 可选destination_lat / destination_lng 可选speed_kmh 可选route_points 可选,道路线经过的坐标点数组按下面的规则归一化交通方式:
车巡:车巡、驾车徒步:徒步、步行骑行:骑行、自行车如果用户没有提供 mode,默认使用 车巡,并在 assumptions 中明确写出。
严格按这个顺序处理,不要跳步:
road_duration_min,直接把它作为最终耗时。road_distance_km,但没给道路耗时,用道路距离和交通方式速度估算耗时。如果用户没有显式给出速度,使用以下默认值:
车巡: 40 km/h徒步: 5 km/h骑行: 15 km/h如果用户明确给了速度,优先使用用户值,并在输出中回显:
speed_kmh_usedassumptions 中补充“用户指定速度覆盖默认值”当没有道路数据但有两点坐标时:
data_source 必须写为 "straight_line"assumptions 中明确说明“没有道路数据,本次为直线估算”这类结果是估算值,不代表真实道路距离和实际通行时间。
这个 skill 目录内置了一个确定性 Python 脚本:
scripts/calc_point_route.py只要用户提供的信息足够,就优先调用这个脚本,而不是让模型自己手算。这样可以减少 token 消耗,降低格式漂移,并保证同样输入得到稳定输出。
优先用脚本处理这些工作:
当用户给出两点坐标时,使用类似下面的命令:
python .codex/skills/point-route-estimator/scripts/calc_point_route.py `
--origin "起点" `
--destination "终点" `
--mode "车巡" `
--origin-lat 39.9042 `
--origin-lng 116.4074 `
--destination-lat 39.9142 `
--destination-lng 116.4174
当用户已经给出道路距离和道路耗时时,使用类似下面的命令:
python .codex/skills/point-route-estimator/scripts/calc_point_route.py `
--origin "派出所" `
--destination "巡点A" `
--mode "车巡" `
--road-distance-km 6.8 `
--road-duration-min 14
当上游已经提供道路经过点时,优先使用重复参数 --route-point lat,lng 传入,例如:
python .codex/skills/point-route-estimator/scripts/calc_point_route.py `
--origin "派出所" `
--destination "巡点A" `
--mode "车巡" `
--road-distance-km 6.8 `
--road-duration-min 14 `
--route-point 39.9042,116.4074 `
--route-point 39.9050,116.4100 `
--route-point 39.9062,116.4125
如果上游已经有完整 JSON 数组,也可以继续使用 --route-points-json。
如果信息不足以调用脚本,再回到自然语言追问,不要自行脑补参数。
默认输出 JSON。只有当用户明确要求其他格式时,才切换成自然语言或 Markdown。
使用下面这个固定模板:
{
"conclusion": "从[起点]到[终点],按[交通方式]估算,距离约 [distance_km] km,耗时约 [duration_min] 分钟。",
"distance_km": [数值],
"duration_min": [数值],
"mode": "[车巡/徒步/骑行]",
"data_source": "[road/straight_line]",
"speed_kmh_used": [数值或 "N/A"],
"route_points": [
{"lat": [数值], "lng": [数值]}
],
"assumptions": [
"[假设1]",
"[假设2]"
]
}
distance_km 保留合理小数位,避免虚假精确duration_min 使用分钟值road_duration_min,则 speed_kmh_used 写 "N/A"data_source 只能是 "road" 或 "straight_line"route_points 用于后续渲染route_points 至少输出起点和终点两点assumptions 至少写出数据来源和默认值使用情况以下情况必须追问,而不是自行脑补:
追问尽量简短,例如:
“现在缺少两点坐标或道路距离数据,我没法可靠估算。请补充起点和终点坐标,或直接给道路距离/道路耗时。”
输入:
帮我估一下,从派出所到巡点 A,车巡,道路距离 6.8km,道路耗时 14 分钟。
输出:
{
"conclusion": "从派出所到巡点 A,按车巡估算,距离约 6.8 km,耗时约 14 分钟。",
"distance_km": 6.8,
"duration_min": 14,
"mode": "车巡",
"data_source": "road",
"speed_kmh_used": "N/A",
"route_points": [
{"lat": 39.9042, "lng": 116.4074},
{"lat": 39.9050, "lng": 116.4100},
{"lat": 39.9062, "lng": 116.4125}
],
"assumptions": [
"直接使用了用户提供的道路距离和道路耗时",
"未进行直线距离退化估算",
"使用了上游提供的道路坐标点"
]
}
输入:
从点 A 到点 B 徒步,没有道路数据,只按直线距离估算。A: 39.9042,116.4074 B: 39.9142,116.4174
输出应体现:
data_source 为 "straight_line"mode 为 "徒步"speed_kmh_used 为 5route_points 至少包含起点和终点assumptions 中说明“没有道路数据,本次为直线估算”