← Back to skills
extension
Category: Productivity & OfficeAPI key requirement unconfirmed

周边去哪儿:基于高德的地点推荐助手

使用高德 MCP 的周边地点推荐 Skill:解析起点,周边搜索候选,逐个查询步行路线,按步行时间筛选排序,最多推荐 3 个地点并给出步行距离、预计时间和推荐理由。

personAuthor: fuyeyeyehubOpenAPI

周边去哪儿:基于高德的地点推荐助手

适用场景

  • 用户给出起点(经纬度或地名)和一句话需求,例如:“我在杭州东站,想找一家咖啡馆,步行不超过 15 分钟,推荐最多 3 家,优先近一点的。”
  • 希望得到可核对的推荐:地点名称、地址来自高德搜索结果,步行距离与时间来自高德步行路线规划,而不是模型估算。

不适用于:需要驾车/公交方案、跨城市行程规划、需要预订或排队信息的场景。

可用工具

| 工具 | 用途 | 关键参数 | | --- | --- | --- | | maps_geo | 地名 → 经纬度 | address,可选 city | | maps_text_search | 关键字搜索 POI | keywords,可选 city、types | | maps_around_search | 周边搜索(首选) | location(必填,经度,纬度)、keywords、radius(米) | | maps_search_detail | 按 POI ID 取详情 | id | | maps_direction_walking | 步行路线规划(必用) | origin、destination(均为 经度,纬度) |

硬性规则:

  • 坐标格式一律为 经度,纬度,不要写反。
  • 步行时间只能取自 maps_direction_walking;不得用直线距离或“大约几分钟”代替。
  • 不得编造地点、地址、距离、时间;不得声称营业中、无需排队、环境安静等未经工具核实的信息。

执行步骤

1. 解析需求

提取:城市、起点、地点类型、步行时间上限、推荐数量、排序偏好。起点是地名时先用 maps_geo 解析;失败再用 maps_text_search 取坐标;仍失败则请用户提供经纬度。

关键词映射:咖啡馆→咖啡、餐厅→美食或餐厅、公园→公园、便利店→便利店、药店→药店、景点→景点。

2. 周边搜索

maps_around_search(location="120.21,30.29", keywords="咖啡", radius="1200")

半径策略:初始 radius ≈ 步行分钟数 × 80(下限 500,上限 3000;未给时间上限时用 1000)。候选不足时扩大一档(1500 → 2500 → 3000)重试一次;仍不足则如实说明并建议放宽条件。

3. 逐个查询步行路线

maps_direction_walking(origin="120.21,30.29", destination="<候选经纬度>")

取 paths[0].distance(米)与 paths[0].duration(秒,换算成分钟并向上取整)。路线查询失败先重试一次,仍失败则跳过该候选并在回答中说明。

4. 筛选与排序

  • 只保留步行时间 ≤ 用户上限的地点,超时地点不得列为推荐;
  • 用户说“优先近一点”或无偏好时,按步行时间升序(同时间按距离升序);
  • 最多返回用户要求的数量,未指定时最多 3 个;
  • 每个地点一句有数据依据的理由(如“步行 6 分钟、约 450 米,是本次候选中最近的咖啡馆”)。

5. 回答格式

| 地点 | 地址 | 步行距离 | 步行时间 | 推荐理由 | | --- | --- | --- | --- | --- | | 名称(高德返回) | 地址(高德返回) | 450 米 | 约 6 分钟 | 本次候选中最接近起点 |

表格后补充:起点坐标(若由地名解析得到需注明)、搜索半径与筛选条件、未核实信息标注、结果不足或工具失败说明。

异常处理

| 情况 | 处理 | | --- | --- | | 周边搜索无结果 | 换更宽关键词或扩大半径重试一次;仍无结果如实说明并建议放宽类型/范围 | | 符合条件不足 3 个 | 只推荐符合条件的,说明数量不足并给出放宽建议,不用超时地点补足 | | 路线查询失败 | 重试一次;仍失败则排除并说明,不得用直线距离估算 | | 用户没给时间上限 | 不设硬性过滤,但仍查询并展示步行时间 | | 需求有歧义 | 按最合理解释执行并说明假设,不要反问后停住 |

使用示例

用户:

我在杭州东站附近,想找一家步行 10 分钟内的咖啡馆,推荐 2 家。

助手(内部步骤):

  1. maps_geo(address="杭州东站", city="杭州") → 120.21,30.29
  2. maps_around_search(location="120.21,30.29", keywords="咖啡", radius="800")
  3. 对最近的 5 个候选分别调用 maps_direction_walking
  4. 保留 ≤10 分钟的前 2 个,按步行时间升序输出表格

回答(示例结构,数据以实际调用为准):

| 地点 | 地址 | 步行距离 | 步行时间 | 推荐理由 | | --- | --- | --- | --- | --- | | 星巴克(杭州东站店) | 浙江省杭州市上城区… | 320 米 | 约 5 分钟 | 步行 5 分钟可达,是候选中最近的一家 | | Manner Coffee(东站西广场店) | 浙江省杭州市上城区… | 540 米 | 约 8 分钟 | 步行 8 分钟,仍在 10 分钟范围内 |

说明:起点由“杭州东站”解析得到(120.21,30.29),搜索半径 800 米;营业状态与排队情况未核实。

<!-- OB-S:5QIYa8keZwZukOBjpAR4MA -->