← Back to skills
extension
Category: Productivity & OfficeAPI key requirement unconfirmed

周边地点推荐(高德步行路线)

按「起点 + 一句话需求」推荐步行可达的地点。先用 maps_around_search 查周边 POI,再用 maps_search_detail 取坐标,再用 maps_direction_walking 取真实步行距离与耗时,最后按时间上限过滤、按偏好排序,输出最多 3 个带地址、步行距离/时间和推荐理由的地点,并如实处理结果不足或查询失败。适用于找咖啡馆、餐厅、公园等「附近有什么」的问题。

personAuthor: xuezhihengghubModelScope

周边地点推荐

一句话需求 → 可核验的推荐:先定点,再搜周边,再取坐标,再查真实步行路线,最后按数据过滤、排序并作答。适用于通勤、约饭、散步、找咖啡馆等「附近有什么」的问题。

何时使用

输入包含城市、起点(坐标或可地理编码的地址)和自然语言需求时使用:

  • 「我在杭州某地铁站,想找一家咖啡馆,步行不超过 15 分钟,最多 3 家,优先近一点的」
  • 「公司楼下附近有能坐下来的餐厅吗,走路 10 分钟内」
  • 「这个位置附近有公园吗,走过去要多久」

不适用:跨城行程、多站串联路线、驾车或公交主导的通勤规划、需要预订或支付的操作。各推荐都是从同一起点出发的独立备选,不拼成行程。

依赖高德 MCP Server 的 maps_around_search、maps_search_detail、maps_direction_walking(可选 maps_geo、maps_text_search、maps_distance)。配置方法见 references/amap-mcp-setup.md。

需求解析

| 要素 | 处理方式 | | --- | --- | | 起点 | 优先使用给定经纬度;只给地址或地标时用 maps_geo 转坐标;两者都没有就先问用户,不猜坐标 | | 地点类型 | 转成高德 POI 关键词,如 咖啡馆→咖啡、餐厅→餐厅、公园→公园、地铁站→地铁站 | | 步行时间上限 | 用户给了就照做;没给按 15 分钟,并在回答中说明这是默认值 | | 推荐数量 | 用户给了就照做,最终不超过 3 个;没给按 3 个 | | 偏好 | 「近一点」→按步行距离升序;「评分高」→仅当详情返回评分时才用;没提到的维度不要自行加码 |

工具与参数

| 工具 | 关键参数 | 用途与注意 | | --- | --- | --- | | maps_around_search | location「经度,纬度」、radius(米)、keywords | 周边搜索。返回 pois[] 只含 id/name/address/typecode,不含坐标 | | maps_search_detail | id(上一步的 POI id) | 取 location「经度,纬度」;顺带返回 address、type、biz_ext(营业时间、评分等) | | maps_direction_walking | origin、destination,均「经度,纬度」 | 步行路线。取 route.paths[0].distance(米)与 route.paths[0].duration(秒) | | maps_geo | address、city | 地址或地标转坐标,取 geocodes[0].location | | maps_text_search | keywords、city | 周边结果不足时按城市补充,同样不含坐标,仍需再查详情 | | maps_distance | origins、destination、type=3 | 可选:批量预筛步行距离;耗时仍以 maps_direction_walking 为准 |

坐标一律「经度在前、纬度在后」,用英文逗号连接。中国境内经度 73–135、纬度 3–54;若第一个数明显小于第二个数(如 30.2,120.1),说明顺序反了,先交换再调用。

执行流程

  1. 定点:有坐标直接用;否则 maps_geo 解析起点并取第一条结果的 location。解析不到就停下问用户,不编造坐标。
  2. 估算半径:radius ≈ 步行上限分钟 × 80 米(15 分钟约 1200 米),不足 1000 取 1000,上限 5000。半径只是搜索范围,是否达标以步行路线为准。
  3. 周边搜索:maps_around_search(location=起点, radius=..., keywords=品类词)。品类有歧义时按用户最明确的词搜一次,不连发多种关键词。
  4. 粗筛候选:按名称与 typecode 核对品类,剔除明显不符的(便利店、加油站、同名景区等)与名称重复项,挑 5–8 个最接近的候选进入下一步,不要对整页结果逐个查路线。
  5. 取坐标:对每个候选调用 maps_search_detail(id),记录 location、address 与可用的 biz_ext。
  6. 查步行路线:对每个候选调用 maps_direction_walking(origin=起点, destination=候选坐标),记录 distance 与 duration。任何失败都按「失败与不足」处理,绝不用直线距离替代。
  7. 按时间过滤:duration / 60 分钟向上取整后与上限比较,超时的不作为「符合条件」的推荐。
  8. 排序取前 N:默认按步行时间升序、时间相同按距离升序;用户偏好优先;取前 3 个或用户指定数量。
  9. 作答:按下节格式输出,并在末尾说明筛选口径与未核实项。

回答格式

开头一句话回应需求(起点、品类、时间上限、数量)。推荐用表格呈现,最多 3 行:

| 名称 | 地址 | 步行距离 | 步行时间 | 推荐理由 | | --- | --- | --- | --- | --- | | 高德返回的名称 | 高德返回的地址 | 约 650 米 | 约 9 分钟 | 一句话,只引用可核验事实 |

  • 距离:小于 1000 米写「约 XXX 米」,否则写「约 X.X 公里」,均由 distance 换算。
  • 时间:写「约 X 分钟」,由 duration 换算;不要只写「很近」「几分钟」。
  • 推荐理由只写有数据支撑的内容:品类相符、步行时长、所在商圈或路段、详情里的评分与营业时间(注明来自高德)。
  • 安静程度、排队情况、口味好坏、是否适合拍照等无依据的判断一律不写,或标注「未核实」。
  • 结尾一句说明口径,例如「以上按步行时间从小到大排序,均在 15 分钟步行范围内」。

示例

用户:「我在杭州市中心(坐标 120.1535,30.2875),帮我找步行 10 分钟内的咖啡店,最多 2 家。」

maps_around_search(location="120.1535,30.2875", radius="800", keywords="咖啡")
  → maps_search_detail(id="B0FFH...")                     # 取 location 坐标
  → maps_direction_walking(origin="120.1535,30.2875", destination="<详情返回的 location>")

作答(数值以工具实际返回为准):

从 120.1535,30.2875 出发,步行 10 分钟内找到 2 家咖啡店,按步行时间排序:

| 名称 | 地址 | 步行距离 | 步行时间 | 推荐理由 | | --- | --- | --- | --- | --- | | ××咖啡(××店) | ××路 12 号 | 约 430 米 | 约 6 分钟 | 品类为咖啡厅,步行 6 分钟可达 | | ××咖啡(××广场店) | ××街 88 号 | 约 720 米 | 约 10 分钟 | 位于××广场内,步行 10 分钟,接近上限 |

以上按步行时间从小到大排序;营业状态与排队情况未核实。

失败与不足

| 情况 | 处理 | | --- | --- | | 周边 0 个结果 | 说明搜索关键词与半径,建议放宽半径或换近义品类,可补搜一次 | | 符合品类但都超过步行上限 | 如实说明有几家、最近一家约多少分钟;不把超时地点写成推荐,可建议放宽时间 | | 达标地点少于要求数量 | 只推荐实际达标的,说明「范围内符合条件的仅 N 家」及原因(数量少、超出时间、品类不全) | | 详情或路线调用报错(isError、status≠1、errcode≠0) | 说明是哪个工具、哪种失败;同一调用最多重试一次,仍失败就说明「未能核实」,不编造坐标或距离 | | 路线失败但地点真实存在 | 可列出地点并注明「步行路线查询失败,距离与时间未核实」,不把估算写成确定值 | | 起点无法解析 | 请用户补充更具体的地址或直接给坐标,并停止后续查询 |

约束

  • 不编造地点、地址、坐标、距离、时间与营业信息;所有数值只能来自高德返回。
  • 目的地必须是 maps_search_detail 返回的 location,不要把地点名称或地址当坐标传入。
  • 不在回答中输出 API Key、原始请求 URL 或大段原始 JSON,只引用需要的字段。
  • 工具调用保持精简:1 次周边搜索 + 至多 8 次详情 + 至多 8 次路线,必要时最多再扩一次半径重搜。
  • 以当前运行时实际暴露的工具名为准;若某个工具不可用,改用具备同等能力的工具,并在回答中说明哪一步未能核实。
<!-- OB-S:UFSWTLCc_gCFumLzndcdlQ -->