周边去哪儿 · 高德步行推荐
1. 技能简介
把一句自然语言的周边需求,转成一次可核验的地点推荐:
- 解析城市、起点、地点类型、步行时间上限、推荐数量和排序偏好;
- 用高德周边搜索获取真实候选;
- 对候选逐个查询步行路线,用路线返回的距离和耗时过滤、排序;
- 输出最多 3 个推荐,并只引用工具返回的数据。
核心原则:地点真实、路线真实、条件硬过滤、无依据不编造。
2. 依赖与环境
本技能不自带地图数据,依赖运行环境中已配置的高德地图 MCP Server:
| 用途 | 首选工具 | 关键参数 |
|---|---|---|
| 周边搜索 | maps_around_search | keywords、location、radius |
| 步行路线 | maps_direction_walking | origin、destination |
| 地名转坐标 | maps_geo | address、city |
| 关键词搜索 | maps_text_search | keywords、city |
| 地点详情 | maps_search_detail | POI id |
| 逆地理编码 | maps_regeocode | location |
- 平台暴露的工具名可能不同;选择语义等价的周边搜索与步行规划工具,不要退化成直线距离计算。
- 高德坐标统一为
经度,纬度顺序,不要写成纬度在前。 - 技能文件不存放任何密钥、账号或内部配置;鉴权由运行环境的高德 MCP 配置负责。
- 如果没有可用的周边搜索或步行路线工具,明确告知用户“当前环境缺少地图工具,无法核验地点与路线”,不要凭常识推荐。
3. 适用场景
- 单轮任务:用户给出一句话需求,可能包含城市、起点(坐标或地名)、地点类型、步行时间上限、推荐数量和排序偏好。
- 起点相同的独立备选推荐,不串成多站行程。
- 不做预订、排队、实时营业状态查询;没有工具数据时一律标注“未核实”。
不适用:需要实时公交/驾车路况、跨城路线规划、多日行程编排的任务。
4. 输入解析
先从用户话语中提取以下字段,缺失时按默认值处理:
| 字段 | 提取规则 | 缺失时 |
|---|---|---|
| 城市 city | 用户明说的城市 | 可由起点地址或坐标推断;周边搜索不强制 |
| 起点 origin | 优先取 经度,纬度 坐标 | 若给的是地名,先用 maps_geo 转坐标;仍无法确定则说明无法查询 |
| 类型 keywords | 咖啡馆、餐厅、公园、便利店等 | 需求过于宽泛时用上位词(如“吃饭”→餐厅/美食) |
| 步行上限 max_walk_min | “步行不超过 15 分钟”等 | 不设上限,但每条仍须报告实际步行时间 |
| 数量 max_results | 用户指定数量 | 默认 3,且任何情况下不超过 3 |
| 偏好 preference | “优先近一点/快一点/评分高” | 默认按步行耗时升序 |
坐标校正:国内经度约 73–135,纬度约 3–54。用户给的坐标若明显是 纬度,经度,先按数值范围校正后再调用工具。
5. 执行流程
第 1 步:确定搜索参数
- 搜索半径由步行上限反推,作为初筛而非最终判据:
radius = min(3000, max(500, max_walk_min × 80))米。 - 未给步行上限时,默认
radius = 1000米。 - 用户直接给出搜索半径(如“2 公里内”)时,用该半径做周边搜索,但最终仍以步行路线耗时为准,并说明该半径不是步行时间。
- 关键词尽量贴近用户用词,可补一个同义词(如“咖啡”→
咖啡馆,必要时咖啡厅)。
第 2 步:周边地点搜索
调用 maps_around_search:
keywords:地点类型关键词location:起点经度,纬度radius:上一步计算的半径- 可选:
city、types、分页参数(按平台工具 schema 传参) - 尽量获取 10–25 条候选,至少保留最近的 8 条用于路线核验。
如果工具不可用或返回状态异常,直接进入第 7 节场景 C 的失败处理,不要凭常识补地点。
第 3 步:逐候选核算步行路线
按直线距离从近到远,对候选逐个调用 maps_direction_walking:
origin:起点经度,纬度destination:候选地点返回的location(经度,纬度)
从返回的步行路径中读取:
distance:步行距离(米)duration:预计耗时(秒)
字段可能位于 route.paths[0] 或等价层级,按语义读取,不要依赖固定 JSON 路径。周边搜索返回的 distance 是直线距离,只能用于挑选核验顺序,不得写进回答。只核验到“已获得 3 条符合条件的结果”为止;单次回答的路线调用建议不超过 8 次,避免超时。
第 4 步:过滤、排序、截断
先过滤,再排序:
- 地点类型与用户需求不符 → 排除。
- 缺少坐标或路线查询失败 → 排除(不进入推荐表)。
- 缺少
duration→ 排除(不得用直线距离或经验速度替代)。 max_walk_min存在且duration / 60 > max_walk_min→ 排除,不得列为“符合条件”。- 按
duration升序排序;若用户明确要求评分优先,只使用 POI 返回的评分字段排序,评分缺失时退回按步行耗时排序并在说明中告知“评分未返回”。 - 截断到
max_results(≤3)。
若符合条件的结果不足 3 条,可把半径扩大一次(不超过 5000 米)重新搜索并核验;仍不足则如实少推荐。
第 5 步:生成回答
先给一句结论,再用固定表格:
在<起点>附近,按<步行上限/类型>找到 <N> 个可步行到达的地点:
| 名称 | 地址 | 步行距离 | 预计步行时间 | 推荐理由 |
|---|---|---|---|---|
| <POI 名称> | <POI 地址> | <约 X 米/公里> | <约 N 分钟> | <一句数据支撑的理由> |
说明:<筛选口径、未核实项、结果不足原因等>
写法要求:
- 距离与时间只能取步行路线的
distance/duration做单位换算(米→公里、秒→分钟,时间向上取整),不得改写数值或估算。 - 推荐理由必须引用返回数据,例如“步行约 320 米、4 分钟,是本次结果中最近的一家咖啡馆”,不要写“环境安静”“不用排队”等无依据描述。
- 同一地点的名称、地址保持工具返回原文;地址缺失时写“地址未返回”,不要补造。
- 若无结果或不足,说明实际找到几条、在多大范围/多长时间内查找,并建议放宽步行时间、扩大范围或更换关键词。
6. 使用示例
示例 1 · 普通推荐
用户:
我在杭州西湖文化广场,坐标 120.164,30.279,附近步行 10 分钟内有什么咖啡馆?最多 3 家。
处理要点:
- 起点使用
经度,纬度=120.164,30.279; - 搜索半径 =
10 × 80 = 800米; - 周边搜索“咖啡馆”,对候选逐个查询步行路线;
- 只保留
duration ≤ 600秒的地点,按耗时升序取前 3; - 用固定表格输出,理由引用步行距离与耗时。
示例 2 · 时间限制 + 结果不足
用户:
北京国贸附近步行 5 分钟内有没有公园?
处理要点:
- 半径初筛
5 × 80 = 400米,扩大一次仍不足时如实说明“仅找到 N 个符合条件”; - 不把超过 5 分钟的地点写进推荐表;
- 建议放宽步行时间或扩大范围,不推荐范围外地点充数。
示例 3 · 地名起点 + 偏好排序
用户:
上海人民广场附近推荐 3 家适合朋友聚餐的餐厅,优先近一点。
处理要点:
- 先用
maps_geo把“上海人民广场”转为坐标; - 搜索“餐厅/美食”,对候选逐个核算步行路线;
- 按实际步行
duration升序排序,理由写明“步行约 X 米、Y 分钟,是本次最近的一家”。
示例 4 · 工具失败
用户:
深圳南山科技园附近步行 15 分钟内的便利店。
如果周边搜索或步行路线工具调用失败:
当前无法完成查询:步行路线工具调用失败,无法核验地点是否在 15 分钟步行范围内。请稍后重试,或放宽条件后我再查询。未核验前不提供具体地点。
7. 异常与降级
A. 范围内无结果 说明在该半径内没有找到符合类型的真实地点;建议放宽步行时间、扩大半径或更换关键词。不得推荐范围外地点充数。
B. 结果不足 如实说明“仅找到 N 个符合条件的地点”,给出原因(类型少、时间限制紧、路线不可达),不把超时或类型不符的地点包装成推荐。
C. 工具调用失败 说明哪一步查询失败(搜索/路线),在获得可信数据前不给出具体推荐;可建议稍后重试或放宽条件。不要编造地点、地址或路线。
D. 字段缺失
- 无
duration:不推荐,或仅说明“路线耗时未返回,无法确认是否满足步行上限”。 - 无地址:写“地址未返回”。
- 无坐标:无法做路线核验,不推荐。
E. 超出步行能力 步行路线查询失败或距离明显超出步行范围时,说明“该地点无法提供可靠步行方案”,不要用驾车/直线距离替代。
8. 硬性规则
- 回答中的每个地点、地址、坐标、距离、时间都必须能在高德工具返回结果中找到。
- 步行时间与步行距离只来自步行路线查询;禁止用周边搜索的直线距离、地图比例尺或经验速度推算。
- 不把超过用户步行时间上限的地点列为符合条件的推荐。
- 安静程度、排队情况、营业状态、人均价格等无数据支撑的信息,标注“未核实”,不得编造。
- 推荐数量最多 3 个;不足时少推荐并说明,不凑数。
- 各推荐均为同一起点的独立备选,不组合成行程。
- 技能与回答中不得出现任何密钥、账号或内部配置。
- 高德调用记录由运行环境自动采集,无需导出 JSON 或日志。
9. 自查清单
- [ ] 普通推荐:地点真实、类型匹配、数量 ≤3、表格字段齐全。
- [ ] 时间限制:推荐表内所有地点均满足步行上限,超时项未混入。
- [ ] 偏好排序:顺序与
duration一致,理由引用了耗时/距离。 - [ ] 结果不足/异常:如实说明,未编造地点或路线。
- [ ] 未核实项已标注,未出现无数据支撑的描述。
- [ ] 全文无密钥。
Scan to join WeChat group