← 返回 Skill 列表
extension
分类: 效率与办公API Key 暂未确认

OB生态赛题高德Skill:周边地点推荐助手

这是 周边地点推荐助手「周边去哪儿」,一个基于高德开放平台编写的轻量的周边探索 Skill,让用户用一句话找到合适的地点,并知道如何到达。当用户用自然语言询问某起点附近有什么可去的地点时使用,例如「我在杭州某地铁站,想找一家咖啡馆,步行不超过 15 分钟,推荐最多 3 家,优先近一点的」「附近有没有便宜又安静的图书馆」。它调用高德 MCP 的关键词搜索与周边搜索获取候选地点,再调用步行路径规划取得真实步行距离与耗时,按用户的地点类型、步行时间上限、数量上限筛选,最多推荐 3 个地点并给出名称、地址、步行距离、步行时间和有数据依据的推荐理由;结果不足、查询失败或信息无法核实时如实说明,绝不编造。

person作者: SkyScale0707hubModelScope

周边去哪儿 · 地点推荐 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 召回候选

  1. 调 maps_around_search(location=起点坐标, radius=上式结果, keywords=地点类型)。
  2. 检查 status 为 1 且 infocode 为 10000 才算成功;否则走 §5 异常分支。
  3. 候选数少于要求数量时,将 radius 翻倍再搜一次(最多翻倍到 4000 米);仍不足则按 §5.1 处理。
  4. 用户提到「只在市区/某区内」等限定,改用 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 筛选与排序

  1. 只保留满足全部硬条件的候选:地点类型正确、步行分钟数 ≤ 时间上限、数据来自真实路线查询。
  2. 排序:默认按步行分钟数升序(等价于「优先近一点」)。
  3. 用户偏好若有数据支持(如「便宜」「评分高」而 POI 未返回价格/评分字段),只能回答「未核实」,不得据此排序或编造理由;此时仍按步行时间排序并说明依据。
  4. 取前 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 由评测平台统一配置;本文件中不包含任何密钥,也不包含源码提交,代码仓库,独立应用和测试报告。

9. 信息验证

<!-- OB-S:ZxmMYxM8aiPHjTxnSH8Axw -->