周边去哪儿:基于高德的地点推荐助手
适用场景
- 用户给出起点(经纬度或地名)和一句话需求,例如:“我在杭州东站,想找一家咖啡馆,步行不超过 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 家。
助手(内部步骤):
maps_geo(address="杭州东站", city="杭州")→120.21,30.29maps_around_search(location="120.21,30.29", keywords="咖啡", radius="800")- 对最近的 5 个候选分别调用
maps_direction_walking - 保留 ≤10 分钟的前 2 个,按步行时间升序输出表格
回答(示例结构,数据以实际调用为准):
| 地点 | 地址 | 步行距离 | 步行时间 | 推荐理由 | | --- | --- | --- | --- | --- | | 星巴克(杭州东站店) | 浙江省杭州市上城区… | 320 米 | 约 5 分钟 | 步行 5 分钟可达,是候选中最近的一家 | | Manner Coffee(东站西广场店) | 浙江省杭州市上城区… | 540 米 | 约 8 分钟 | 步行 8 分钟,仍在 10 分钟范围内 |
说明:起点由“杭州东站”解析得到(120.21,30.29),搜索半径 800 米;营业状态与排队情况未核实。
<!-- OB-S:5QIYa8keZwZukOBjpAR4MA -->
Scan to join WeChat group