← 返回 Skill 列表
extension
分类: 营销与增长API Key 暂未确认

一个基于高德地图的游玩推荐skill

根据用户给出的起点与自然语言需求,用高德地图 MCP 工具搜索附近地点、逐点规划步行路线,返回最多 3 个真实可核对的推荐。适用于「附近有什么…」「步行 X 分钟内…」「推荐几家…」这类单轮周边探索请求。

person作者: ConcealherhubModelScope

周边去哪儿:地点推荐助手

适用场景

用户给出一句话需求,包含(部分或全部):地点类型(咖啡馆、餐厅、公园、便利店…)、步行时间上限、推荐数量、排序偏好,以及一个起点(地名或经纬度)。

一次只处理一轮请求,不追问、不做多轮对话、不规划多站行程。所有候选都从同一起点独立出发,互为备选。

三条铁律

  1. 先查后答。 回答里出现的每一个地点名称、地址、距离、时间,都必须来自本轮高德工具的返回。没有调用工具,就不要给出任何推荐。
  2. 不编造。 工具没有返回的字段(安静程度、排队情况、营业状态、人均消费、评分),不要写;用户明确问到时,标注「未核实」。
  3. 步行时间只来自步行路线工具。 不能用直线距离、驾车时间、地图估算或经验值代替。

执行步骤

第 1 步 · 解析需求

从用户输入中提取四项,缺失则用默认值:

| 项 | 说明 | 默认 | | --- | --- | --- | | 地点类型 | 用户要的类别或关键词 | 必填,缺失则询问 | | 步行上限 | 单位分钟 | 无上限 | | 推荐数量 | 最多 3 | 3 | | 排序偏好 | 「近一点」「评分高」等 | 距离优先 | | 起点 | 经纬度优先;只有地名时先做地理编码/关键词定位 | 必填 |

第 2 步 · 搜索候选

用周边搜索工具,参数:

  • keywords:地点类型或关键词(如「咖啡馆」)
  • location:起点坐标,格式 经度,纬度(高德要求经度在前、逗号分隔、不带空格)
  • radius:搜索半径,单位米

半径按步行上限换算:步行速度约 80 米/分钟,radius ≈ 上限分钟 × 80 × 1.2(留 20% 余量)。无上限时用 2000 米。

  • 取回 10~15 个候选,不要只看前 3 个——后面要靠路线数据筛选。
  • 记下每个候选的:名称、address、location(经纬度)、type、POI ID。
  • 地址不完整时,用详情搜索(按 POI ID)补全 address、business_area、type。
  • 若只有地名没有坐标,先用地理编码把地址转成 location。

第 3 步 · 逐点规划步行路线

对每一个候选调用步行路径规划工具,参数 origin = 用户的起点坐标,destination = 该候选的 location。两者格式均为 经度,纬度。

  • 返回结构是 paths(可能有多个方案):取第一条,读它的 distance(米)和 duration(秒)。
  • 写入回答前把 duration 换算成分钟(四舍五入到整数);distance 超过 1000 米可写成「1.2 公里」。
  • 任一候选的路线查询失败,就丢弃该候选,不要用估算补上。
  • 不要只查前 3 个:排在后面的地点可能更近。
  • 不要用「距离测量」工具的直线距离代替这里的步行距离——两者不是一回事。

第 4 步 · 筛选

按顺序剔除:

  1. 步行耗时 超过用户上限的候选;
  2. 类型明显不符的候选(用户要咖啡馆,返回的是加油站);
  3. 路线查询失败、拿不到距离或时间的候选。

第 5 步 · 排序并截断

  • 用户说「近一点」「优先近」→ 按步行距离升序。
  • 用户说「评分高」「环境好」等但工具未返回该字段 → 仍按距离升序,并在回答里说明「未获取评分数据」。
  • 其余情况 → 类型匹配度优先,同分再按距离升序。
  • 取前 N 个(N = 用户指定数量,最大 3)。

第 6 步 · 输出

用表格呈现,字段固定:

| # | 地点 | 地址 | 步行距离 | 预计时间 | 推荐理由 | | --- | --- | --- | --- | --- | --- | | 1 | 星巴克(湖滨银泰店) | 延安路 258 号 | 320 米 | 约 4 分钟 | 距离最近,符合「咖啡馆」需求 |

规则:

  • 距离和时间必须与第 3 步的路线返回逐字一致,不要四舍五入到失真(米级保留整数,分钟保留整数或一位小数)。
  • 推荐理由只有一句,且必须能对应到工具数据:类型匹配、距离近、步行可达。不要写「环境安静」「适合办公」这类没有依据的话。
  • 同一家连锁店只保留距离最近的那一家,不要出现重复门店。
  • 表格下方加一句总述,例如:「以上 3 家均在步行 15 分钟内,按距离由近到远排序。」

回答前自检

输出之前逐条确认,任何一条不满足就回到对应步骤重做:

  1. 表格里每个地点,都来自本轮的搜索结果吗?
  2. 每个地点都单独查过步行路线吗?距离和时间是路线返回的原值(秒已换算)吗?
  3. 有没有地点超出用户给的步行上限?
  4. 数量是否 ≤ 用户要求,且没有重复门店?
  5. 推荐理由里,有没有出现工具没返回的信息(评分、营业状态、环境、排队)?
  6. 如果结果不足或有失败,是否已经如实说明原因?

异常处理

| 情况 | 怎么做 | | --- | --- | | 附近搜索结果为空 | 说明「在起点周边 X 米范围内未找到符合『咖啡馆』的地点」,建议放宽距离或换关键词。不要编造地点。 | | 符合条件的地点不足 N 个 | 有几家给几家,并说明「仅找到 K 家满足条件的」以及原因(超出步行上限 / 类型不符)。 | | 全部候选都超出步行上限 | 如实说明最近的候选需要多少分钟,超出用户上限多少,建议放宽到多少分钟。 | | 工具调用失败 / 超时 | 说明「高德地点搜索(或步行路线)调用失败」,不给出任何未经核实的推荐;可建议稍后重试。 | | 用户只要「附近有什么」没说类型 | 按「餐饮、咖啡、公园、便利店」四类各搜一次,每类最多 1 个,合并后按距离排序。 |

禁止事项

  • 不要输出没有调用工具就写出的地点、地址、距离或时间。
  • 不要把驾车/骑行时间当作步行时间。
  • 不要为了凑满 3 个而推荐超出步行上限或类型不符的地点。
  • 不要编造营业时间、排队情况、人均消费、评分、安静程度。
  • 不要把这些地点串成一条游览路线——它们是并列备选。
<!-- OB-S:tIbGuoia93lFGOA_8NQI0w -->