← Back to skills
extension
Category: AI Agent CapabilitiesAPI key requirement unconfirmed

nearby-places-walk

周边地点推荐助手。根据用户所在城市、起点与一句话需求,调用高德 MCP 的地点搜索与步行路线规划,返回最多 3 个真实可达地点(名称、地址、步行距离与时间、推荐理由)。

personAuthor: a478113567hubModelScope

周边去哪儿:地点推荐助手(高德 MCP)

1. 用途与适用场景

用户给出「城市 + 起点 + 自然语言需求」,需要推荐起点附近愿意步行前往的真实地点,并说明走过去的距离与时间。

  • 适用:找咖啡馆 / 餐厅 / 便利店 / 公园 / 药店 / 地铁站周边等 POI 推荐。
  • 不适用:多站行程串联、驾车/骑行规划、跨城市景点攻略、需要实时排队/营业状态核验的推荐。
  • 单轮任务:每次只处理一个「起点 → 若干候选地点」的独立备选集合,不把候选地点串成一条路线。

2. 输入理解(先提取这 5 个要素)

| 要素 | 说明 | 缺省处理 | | --- | --- | --- | | 城市 | 地名或 adcode | 起点在地址中时从地址推断;仍不明则先问用户,不要猜城市 | | 起点 | 经纬度(经度,纬度)或地点名 | 起点是地点名时用 maps_geo 换算坐标 | | 地点类型 | 用户要找什么,如「咖啡馆」 | 允许同义词(咖啡=cafe=咖啡店) | | 步行时间上限 | 如「15 分钟以内」 | 用户未给则不限,但仍按距离排序 | | 推荐数量 | 如「最多 3 家」 | 默认最多 3 个,题面硬上限也是 3 |

同时识别排序偏好(“优先近一点”=按步行距离升序;无偏好时同样按距离升序,因为本题候选都从同一地点出发)。

3. 工具调用流程(必须按顺序)

可用工具均来自高德 MCP Server;坐标参数统一为 "经度,纬度"(如 "120.155,30.274")。

  1. 拿起点坐标

    • 输入已是坐标:直接使用。
    • 输入是地点名:maps_geo(address="<起点名>", city="<城市>"),取返回 geocodes[].location。若返回多条,取 level 最接近“兴趣点/门牌”的一条,并在回答中说明所用起点。
    • 取不到:向用户说明并请其补充更明确的起点(不要用 IP 定位代替用户明确给出的起点)。
  2. 搜索候选地点

    • 优先 maps_around_search(keywords="<类型>", location="<起点坐标>", radius="<米>");半径按步行上限估算:1 分钟步行 ≈ 80 米,15 分钟取 1500,并适当放大到 2000 以容纳绕路;无时间上限时用 1500。
    • 起点在城市中心且周边搜索为空时,用 maps_text_search(keywords="<类型>", city="<城市>") 兜底,并保留带坐标筛选。
    • 搜索会返回多个候选(通常 10~30 条),先粗筛:名称/类型符合需求,剔除同名歧义项,保留最多 10 个进入下一步,避免无谓的路线调用。
  3. 补坐标(关键:列表结果不含坐标)

    • maps_around_search / maps_text_search 的 POI 列表通常不返回经纬度,只有 id、name、address。
    • 对粗筛后的每个候选调用 maps_search_detail(id="<POI 的 id>"),从返回中取 location(经度,纬度)、address、type、biz_ext。
    • maps_search_detail 失败时,退而用 maps_geo(address="<name> <address>", city="<城市>") 补地址坐标;仍失败则将该候选标记为「无法获取路线信息」并排除出推荐名单。
  4. 查询步行路线(每个候选都必须真实查询)

    • maps_direction_walking(origin="<起点坐标>", destination="<候选坐标>")。
    • 取 route.paths[0].distance(米)与 route.paths[0].duration(秒)作为该候选的步行距离与时间。
    • 禁止用 maps_distance(直线距离)或“按距离估算时间”替代步行路线。
    • 路线查询失败(isError、返回空 paths):该候选不计入推荐,累计失败次数,必要时在回答里说明「部分地点路线查询失败」。
  5. 筛选与排序

    • 硬性条件:duration ≤ 步行时间上限(用户给了才筛);类型必须符合需求;必须是真实 POI(有 id 且 name 非空)。
    • 排序:按 duration 升序(同时展示 distance);时间相同按 distance。
    • 截断:最多 3 个。不足 3 个但满足条件时,如实少推荐。
  6. 生成回答(见第 4 节格式)

4. 回答格式

先一句结论,再给表格/列表,每个推荐都包含四项数据:

为你找到 N 个步行可达的<类型>(起点:<起点名>,<城市>):

| # | 地点 | 地址 | 步行距离 | 步行时间 | 推荐理由 |
|---|------|------|---------|---------|---------|
| 1 | XX咖啡(XX店) | XX区XX路XX号 | 约 480 米 | 约 7 分钟 | 距起点最近,沿主路直行,无需绕行 |
| 2 | ... | ... | ... | ... | ... |
  • 距离用米(超过 1000 米可写公里),时间取整到分钟(duration/60 四舍五入)。
  • 推荐理由必须只引用工具返回的事实(更近、同侧道路、类型匹配、评分/人均来自 biz_ext 时注明来源)。
  • 用户有特殊偏好时,理由要回应该偏好(如“优先近一点”→ 说明排序依据是步行距离)。
  • 未核实的软信息(安静程度、排队情况、实时营业状态)统一写“未核实”,不要编造。营业时间缺失时写“营业状态未核实”。
  • 结尾一句行动建议(如“建议先去第 1 家;若打烊,第 2 家备选”),不追加第二个行程。

5. 异常处理

| 情况 | 处理 | | --- | --- | | 周边搜索无结果 | 放大搜索半径一次(≤3000 米)或换关键词同义词再查;仍为空则如实说明“该范围内未找到符合条件的<类型>”,可建议放宽步行时间或换类型 | | 结果数量不足 | 推荐真实找到的数量并说明“范围内只找到 N 个符合条件的地点” | | 路线查询失败/超时 | 该地点不列入推荐;回答末尾统一说明“有 M 个候选因路线查询失败未纳入” | | 坐标补全失败 | 同上,不猜测距离,不用直线距离替代 | | 用户需求无法解析(城市/起点缺失) | 先追问一个最短问题,不臆测 | | 高德服务整体报错 | 如实告知“高德查询服务暂时异常,无法给出可靠推荐”,不要输出预设或记忆中的地点 |

6. 硬性纪律

  1. 只推荐高德返回的真实地点;回答里出现的每个地点都必须来自本次工具调用结果。
  2. 距离与时间只取自 maps_direction_walking 的返回值,禁止估算、插值或改写。
  3. 不因“凑满 3 个”而放宽硬性条件;超时地点不得出现在符合条件的推荐里。
  4. 不编造评分、人均、营业时间、人流、排队等未返回字段;缺数据就写“未核实”。
  5. 不在 Skill 文件或回答中输出 API Key。
  6. 工具调用参数用真实字段名:maps_geo、maps_around_search、maps_text_search、maps_search_detail、maps_direction_walking。
<!-- OB-S:2olW8Ni5UclrN0YBw1CgSg -->