周边去哪儿:高德地点推荐
什么时候用
用户想在当前位置附近找一个去处,例如「我在杭州龙翔桥地铁站,想找咖啡馆,步行不超过 15 分钟,推荐最多 3 家,优先近一点的」。 每个推荐都是从同一起点出发的独立选项,不排成多站行程。
第 1 步:读出需求
从用户的话里取出下面几项,没说的用默认值:
| 项 | 默认值 |
| --- | --- |
| 城市 | 用户给的城市 |
| 起点坐标 | 用户给了坐标就直接用(经度,纬度);只给地名就先调 maps_geo(带上城市)换成坐标 |
| 地点类型关键词 | 必填,如「咖啡馆」「公园」「火锅」 |
| 步行时间上限 | 没说就不设上限,但搜索半径仍取 1500 米 |
| 推荐数量 N | 没说取 3,最多 3 |
| 排序偏好 | 没说按步行时间从短到长 |
步行速度按每分钟约 80 米估搜索半径:半径 = 上限分钟 × 80,最少 500 米,最多 3000 米。这个半径只用来搜候选,不能用来判断是否满足时间要求。
第 2 步:搜候选地点
调 maps_around_search:
location:起点坐标keywords:地点类型关键词radius:上一步算出的半径
结果为空时,换一个更常见的同义词再搜一次(如「咖啡馆」→「咖啡」),仍为空就进入第 5 步的「没有结果」。 保留前 8 个候选,记下每个的名称、地址、坐标、类型。类型明显不符合需求的(比如搜咖啡馆搜出了写字楼)直接去掉。
第 3 步:逐个查步行路线
对每个候选调 maps_direction_walking:
origin:起点坐标destination:候选坐标
记下返回的步行距离(米)和耗时(秒,换算成分钟,向上取整)。
- 步行时间只能来自这一步的路线结果,不能用直线距离推算。
- 某个候选路线查询失败,就跳过它,不要自己估。
第 4 步:筛选和排序
- 去掉步行时间超过上限的候选。
- 按用户偏好排序;用户说「优先近一点」或没说时,按步行时间从短到长,时间相同按距离。
- 取前 N 个。
第 5 步:回答
用表格回答,每行一个地点:
| # | 名称 | 地址 | 步行距离 | 步行时间 | 推荐理由 | | --- | --- | --- | --- | --- | --- | | 1 | 名称(照抄高德返回) | 地址(照抄高德返回) | 420 米 | 约 6 分钟 | 一句话,只用查到的数据,如「三家里最近」「评分 4.6,步行 6 分钟」 |
表格后按需补一两句说明:
- 结果不足 N 个:写明「起点 X 米范围内步行 Y 分钟内只找到 K 家」,建议放宽时间或换关键词。
- 没有结果:直接说没找到,不编地点,建议放宽条件。
- 工具调用失败:说明是哪一步查询失败,不拿猜测补上。
- 未核实的信息:安静程度、是否排队、是否营业中这类高德没返回的内容,写成「未核实」,不要断言。
硬性规则
- 名称、地址、距离、时间都必须来自本次高德工具返回,不得编造或改写数字。
- 超过时间上限的地点不出现在推荐表里。
- 推荐数量不超过用户要求,也不超过 3。
- 不在回答里写 API Key 或任何密钥。
微信扫一扫