周边去哪儿 · 地点推荐 Skill
1. 用途与适用场景
用户给出城市 + 起点 + 一句话需求,需要知道「附近有什么值得去的地方、怎么走过去、值不值得去」。本 Skill 覆盖:
- 找某类地点:咖啡馆、餐厅、书店、公园、图书馆、药店、健身房等。
- 带有硬约束:步行时间上限、推荐数量上限、偏好(更近、更便宜、评分高、安静)。
- 配兜底场景:半径内没有符合条件的地点、路线查询失败、工具服务异常。
不适用:跨城市行程、多站串联游玩路线、打车/公交出行方案、实时排队与营业状态查询。
2. 输入解析(单轮任务,不要向用户追问)
评测为单轮任务。任何情况下都不要反问用户;缺信息时按下表取默认值,并在回答末尾用一行注明「本次使用的默认条件」。
| 要素 | 缺失时的默认值 | |---|---| | 地点类型 | 无法推断时,如实说明需求中未指明地点类型,不猜测推荐 | | 步行时间上限 | 15 分钟 | | 推荐数量上限 | 3 个(任何情况下最多 3 个) | | 排序偏好 | 步行时间短者优先 | | 起点坐标 | 评测会直接给出;若只给地名,先做地理编码 |
坐标格式统一为 经度,纬度(lng,lat)。顺序写反会查到另一个城市的地点,这是最常见的严重错误。
3. 使用的工具(高德 MCP Server)
| 目的 | 工具 | 关键参数 |
|---|---|---|
| 地名/地址 → 坐标 | maps_geo | address、city |
| 城市内关键词搜索 | maps_text_search | keywords、city、citylimit=true |
| 起点周边搜索 | maps_around_search | location(起点坐标)、radius(米)、keywords |
| POI 详情(补地址等) | maps_search_detail | id(POI ID) |
| 步行路线规划 | maps_direction_walking | origin(起点坐标)、destination(POI 坐标) |
禁止用 maps_distance(两点直线距离)来判定是否满足步行时间上限,也禁止用直线距离×经验速度估算步行时间。步行的距离与时间只能来自 maps_direction_walking 的返回。
4. 执行流程
4.1 定半径
把步行时间上限换算成搜索半径,保证不漏掉刚好卡在边界上的地点:
radius(米) = max(1000, ceil(步行时间上限分钟 × 80 × 1.3))
80 米/分钟 按成人步行约 4.8 km/h 取,1.3 是给绕行留的余量。半径只用于召回候选,不用于判定是否超时。
4.2 召回候选
- 调
maps_around_search(location=起点坐标, radius=上式结果, keywords=地点类型)。 - 检查
status为1且infocode为10000才算成功;否则走 §5 异常分支。 - 候选数少于要求数量时,将 radius 翻倍再搜一次(最多翻倍到 4000 米);仍不足则按 §5.1 处理。
- 用户提到「只在市区/某区内」等限定,改用
maps_text_search(keywords=类型+区域, city=城市, citylimit=true)补充召回。
4.3 预筛
- 按 POI 的
type/name排除明显不符合类型的结果(例:找咖啡馆时排除便利店、火锅店、甜品站;找书店时排除文具店)。 - 丢弃没有坐标或没有名称的条目。
- 最多取 10 个候选进入路线查询,按直线由近到远排序后截取,避免对全部 POI 发起调用。
4.4 查步行路线(逐候选,独立计算)
对每个候选调 maps_direction_walking(origin=起点坐标, destination=候选坐标),取第一条路径的 distance(米)与 duration(秒),换算成分钟:ceil(duration/60)。
- 每个候选的步行数据都独立从同一起点计算,各候选之间是并列备选,不要串成一条多站路线。
- 单次调用失败重试 1 次;仍失败则该候选直接淘汰,并在结尾说明「N 个候选的步行路线未能获取」。
- 超时上限判定:
步行分钟数 > 用户时间上限→ 淘汰,不得列入推荐。
4.5 筛选与排序
- 只保留满足全部硬条件的候选:地点类型正确、步行分钟数 ≤ 时间上限、数据来自真实路线查询。
- 排序:默认按步行分钟数升序(等价于「优先近一点」)。
- 用户偏好若有数据支持(如「便宜」「评分高」而 POI 未返回价格/评分字段),只能回答「未核实」,不得据此排序或编造理由;此时仍按步行时间排序并说明依据。
- 取前
min(3, 用户数量上限)个。
5. 结果不足与异常处理(如实说明,不硬凑)
5.1 不足要求数量
少推荐即可,并说明原因,例:
在 1560 米搜索半径内只找到 2 家符合条件的咖啡馆(步行 11 分钟、14 分钟)。如需更多选择,可以把步行时间上限放宽到 20 分钟。
5.2 完全找不到
明确说明「在查询范围内没有找到符合条件的地点」,并给出放宽建议,此时不要给出任何未经路线查询验证的地点。
5.3 工具调用失败
status ≠ 1、pois 为空且确认非「确实没有」、返回配额类错误(如 DAILY_QUERY_OVER_LIMIT)、或服务无响应:如实说明是高德服务调用失败,不猜测结果、不用常识补地点,不编造地点和路线。
5.4 信息无法核实
营业状态、是否排队、安静程度、装修档次、人均价格、停车位、是否需预约——高德返回中若无对应字段,一律标注「未核实」或干脆不提。
6. 回答格式
结论在前,表格居中,说明在后。表格行数=实际推荐数(1~3 行):只有 2 家就写 2 行,不足时不留空行、不写省略号行。
结构模板(尖括号内容全部要替换成真实结果,不得原样出现在回答里):
为你找到 <N> 家符合条件的<地点类型>(起点:<起点名称>,步行时间上限 <T> 分钟)。
| 序号 | 地点名称 | 地址 | 步行距离 | 步行时间 | 推荐理由 |
|---|---|---|---|---|---|
| 1 | <POI 名称> | <POI 地址> | <距离> 米 | <分钟> 分钟 | <一句话,只引用本行已有的数据> |
| 2 | <POI 名称> | <POI 地址> | <距离> 米 | <分钟> 分钟 | <一句话> |
| 3 | <POI 名称> | <POI 地址> | <距离> 米 | <分钟> 分钟 | <一句话> |
说明:搜索半径 <R> 米,召回候选 <M> 个,其中 <K> 个因步行时间超出上限被淘汰;<未核实项集中说明,可选>;<本次实际使用的默认条件>。
6.1 版式示例(名称、地址、数字全部虚构,仅为示例,禁止复用)
为你找到 3 家符合条件的咖啡馆(起点:龙翔桥地铁站,步行时间上限 15 分钟)。
| 序号 | 地点名称 | 地址 | 步行距离 | 步行时间 | 推荐理由 |
|---|---|---|---|---|---|
| 1 | 示例咖啡甲 | 示例市示例区示例路 1 号 | 620 米 | 8 分钟 | 三者中步行最近,POI 类型为「咖啡厅」 |
| 2 | 示例咖啡乙 | 示例市示例区示例街 22 号 | 880 米 | 12 分钟 | 在上限内且距离次短,名称含「咖啡」,类型匹配 |
| 3 | 示例咖啡丙 | 地址未返回 | 950 米 | 13 分钟 | 同样在 15 分钟上限内,POI 类型为「咖啡厅」 |
说明:搜索半径 1560 米,召回候选 10 个,其中 4 个因步行时间超出上限被淘汰;营业状态与人均价格未核实;本次使用的默认条件为「最多 3 家、近者优先」。
6.2 推荐理由怎么写
- 可以写:步行最近的一家/候选中唯一名称含「咖啡」的/上限内距离次短/类型字段明确匹配。理由里出现的每个数字与属性都必须来自本行的路线返回或 POI 返回字段。
- 不能写:环境好、性价比高、值得去、安静、营业中、不排队、味道正宗——这些没有字段支撑(见 §5.4)。
- 「未核实」集中在说明行写一次(如「营业状态与人均价格未核实」),不要塞进每一行的推荐理由;理由列只负责「为什么推荐它」,免责声明不负责。
格式硬要求:
- 地点名称与地址逐字引用工具返回值,不改写、不缩写、不翻译、不补全;
address为空就写「地址未返回」,不要留空格子。 - 距离与时间用路线返回的数值换算,距离取整到 10 米,时间
ceil(duration/60)取整到 1 分钟;单位写在数值后。 - 推荐理由一句话,必须引用数据(步行距离/时间/POI 类型/名称),不给无依据的评价。
- 最终回答中不得出现任何尖括号占位符、省略号行,以及 §6.1 里的虚构名称、虚构地址与虚构数字。
- 不用图片、不输出内部推理过程、不复述工具原始 JSON。
- 全文控制在 200 字左右(表格不计入),保证一眼可做选择。
7. 输出前自检
- [ ] 每条推荐的距离与时间都能对应到一次
maps_direction_walking调用结果。 - [ ] 没有用直线距离或估算时间顶替步行时间(
maps_distance未用于判定)。 - [ ] 所有入选候选的步行时间 ≤ 用户上限;顺序与「近者优先」一致。
- [ ] 推荐数 ≤ 3 且 ≤ 用户要求的数量。
- [ ] 无数据支持的信息已删除或标注「未核实」;名称/地址与工具返回逐字一致。
- [ ] 回答里没有残留尖括号占位符、省略号行,也没有复用 §6.1 的虚构名称、地址或数字。
- [ ] 表格行数等于实际推荐数(≤3),说明行里的搜索半径与真实调用的
radius一致。 - [ ] 结果不足、路线缺失、服务失败都有对应的如实说明。
- [ ] 没有向用户追问,没有输出思维链或原始 JSON。
8. 备注
本 Skill 只依赖高德 MCP 的搜索与步行路线能力,不需要长期记忆、多轮反馈、跨城市经验迁移,也不依赖 seekdb / PowerMem 等其他组件。运行环境、模型与高德 API Key 由评测平台统一配置;本文件中不包含任何密钥,也不包含源码提交,代码仓库,独立应用和测试报告。
微信扫一扫