用Seed Evolving+高德地图做城市旅行规划Agent

前言

作为一个经常写 Flask 后端的 Python 开发者,我平时习惯用高德 API 做一些位置相关的工具。前段时间看到 Seed Evolving 模型做了第二次升级,主打 Coding 工程能力、Agent 检索能力和幻觉控制三个方向的提升。正好手头有高德开放平台的 API Key,就想试试:能不能让 Evolving 模型当"大脑",高德 API 当"眼睛",搭一个能真正用的城市旅行规划 Agent?

答案是:能,而且效果比我想象中好。

本篇是一个 Python 开发者的真实搭建记录:让 AI 帮你规划一场完美的城市旅行。

想做什么

简单说,就是用户输入一个城市名和旅行偏好,Agent 自动帮你:

  1. 规划每天的行程(上午、下午、晚上分别去哪)
  2. 从高德 API 拉取真实景点信息(地址、评分、电话)
  3. 查当天天气,给出穿衣和出行建议
  4. 生成一篇有温度的旅行指南文案
  5. 还能继续追问,比如"杭州有什么好吃的"

核心思路是验证 Seed Evolving 的三个升级点:

  • Agent 能力:多步骤任务规划,调用外部工具,整合结果
  • 检索能力:通过高德 API 搜索真实景点和美食
  • 幻觉控制:基于真实 API 数据生成内容,不编造地址和评分

怎么搭的

技术栈

组件 选型 说明
模型 Doubao-Seed-Evolving 火山方舟平台调用
地图 API 高德开放平台 地理编码、POI 搜索、天气查询
后端 Flask + Python 轻量 Web 框架
前端 原生 HTML/CSS/JS 不依赖框架,一个文件搞定

接入 Seed Evolving

火山方舟的 API 完全兼容 OpenAI 格式,接入非常简单。先在控制台创建推理接入点,拿到 Endpoint ID,然后直接 HTTP 调用就行:

创建在线推理:

下一步开通授权模型,享受免费token,不错不错!

开通并授权。

代码如下:

python 复制代码
import requests

def call_evolving(messages):
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {ARK_API_KEY}",
    }
    payload = {
        "model": "ep-20260805083044-t5r5c",  # 你的 Endpoint ID
        "messages": messages,
        "temperature": 0.7,
        "max_tokens": 4096,
    }
    resp = requests.post(
        "https://ark.cn-beijing.volces.com/api/v3/chat/completions",
        headers=headers,
        json=payload,
        timeout=120,
    )
    resp.raise_for_status()
    return resp.json()["choices"][0]["message"]["content"]

这里有个小细节:文档说可以直接用模型名 doubao-seed-evolving 调用,但我实际测试时发现需要先在控制台开通模型,创建推理接入点后用 Endpoint ID 调用才行。如果直接用模型名会返回 404 提示模型未开通。

Agent 三步走架构

整个 Agent 的核心是三步调用:

第一步:分析需求,生成行程框架

让 Evolving 根据城市名、天数、偏好生成 JSON 格式的行程规划。这里我用 system prompt 约束输出格式,要求它给出每天上午/下午/晚上的景点安排和美食推荐。

python 复制代码
def agent_analyze_city(city, days, preferences):
    system_prompt = """你是一个专业的城市旅行规划助手。
    根据用户提供的城市、旅行天数和偏好,生成详细的旅行规划框架。
    输出 JSON 格式:包含每天的上下午晚行程、美食推荐、预算预估..."""
    
    user_msg = f"城市:{city}\n旅行天数:{days}天\n偏好:{preferences}"
    content = call_evolving([
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_msg},
    ])
    return json.loads(content)

第二步:用高德 API 获取真实数据

这一步是整个 Agent 的关键------拿 Evolving 生成的景点名,去高德 POI 搜索接口查真实信息。这样做有两个好处:一是景点地址、电话都是真实的,不会被模型编造;二是高德返回的评分数据可以作为推荐参考。

python 复制代码
def agent_enrich_with_real_data(city, plan_json):
    spots = []
    for day in plan_json.get("days", []):
        for period in ["morning", "afternoon", "evening"]:
            spot = day.get(period, {}).get("spot", "")
            if spot:
                spots.append(spot)
    
    enriched_spots = {}
    for spot_name in spots:
        poi_data = amap_search_poi(spot_name, city)
        pois = poi_data.get("pois", [])
        if pois:
            poi = pois[0]
            enriched_spots[spot_name] = {
                "name": poi.get("name", spot_name),
                "address": poi.get("address", "暂无地址"),
                "tel": poi.get("tel", "暂无电话"),
                "rating": poi.get("biz_ext", {}).get("rating", "暂无评分"),
            }
    
    # 顺便查天气
    weather_data = amap_weather(city)
    return enriched_spots, weather_info

第三步:生成最终旅行指南

把前两步的结果------行程框架和真实景点数据------一起喂给 Evolving,让它生成一篇有温度的旅行文案。这一步最能体现模型的信息整合能力,它需要把行程安排、天气信息、真实景点地址融合成一篇流畅的文章。

python 复制代码
def agent_generate_guide(city, plan_json, enriched_spots, weather_info, preferences):
    spots_summary = "\n".join([
        f"- {info['name']}:{info['address']}(评分:{info.get('rating', '暂无')})"
        for info in enriched_spots.values()
    ])
    
    return call_evolving([
        {"role": "system", "content": "你是一个旅行文案创作者..."},
        {"role": "user", "content": f"城市:{city}\n天气:{weather_info}\n..."},
    ])

高德 API 集成

高德的接口我用到了四个:

  1. 地理编码:城市名转坐标,验证城市是否有效
  2. POI 搜索:搜景点、搜美食,返回名称、地址、评分
  3. 天气查询:查城市当天天气,用于出行建议
  4. 景点/美食分类搜索:用高德的类型码筛选(景点 110000,美食 050000)
python 复制代码
def amap_search_poi(keyword, city, types="", page=1):
    params = {
        "key": AMAP_KEY,
        "keywords": keyword,
        "city": city,
        "citylimit": "true",
        "offset": 10,
        "page": page,
        "extensions": "all",
    }
    if types:
        params["types"] = types
    resp = requests.get(f"https://restapi.amap.com/v3/place/text", params=params)
    return resp.json()

前端界面

前端就是一个 HTML 文件,用渐变色做背景,卡片式布局展示结果。交互上做了三步动画提示,让用户知道 Agent 正在做什么:

  • 第一步显示"分析旅行需求"
  • 第二步显示"调用高德 API 检索真实数据"
  • 第三步显示"生成个性化旅行指南"

还加了一个对话功能,规划完行程后可以继续追问关于这个城市的任何问题。

实际效果

运行效果如下:

输入目标城市,分析需求,智能Agent就检索数据,开始搜索并生成指南。

输入"杭州,2天,历史文化、美食",Agent 返回的结果让我挺惊喜的:

内容非常丰富,包括图文并茂,知识全面而且细腻:

天气感知:Evolving 注意到当天杭州中雨 26°C~36°C,主动给出了防滑、带伞、穿速干衣的建议。这不是模板话术,是真的看了天气数据后给的针对性建议。

行程合理性:Day 1 上午飞来峰+灵隐寺,下午岳王庙+孤山+西泠印社,晚上河坊街+南宋御街------这些景点在地理位置上确实是串联的,不是随机堆的。Day 2 去德寿宫遗址博物馆→胡雪岩故居→京杭大运河桥西街区,也是一条合理的路线。

真实数据校验:每个景点都从高德 API 拉到了真实地址。飞来峰的地址是"灵隐街道灵隐路法云弄1号",胡雪岩故居是"元宝街18号"------我查过,都是对的。没有出现编造地址的情况。

文案质量:生成的旅行指南标题是"两天一夜杭州旅行指南:雨中东晋南宋,一口杭帮烟火"------这个标题有调性,不像 AI 味的"杭州两日游攻略"。

对 Seed Evolving 的真实感受

用完之后说几点切身感受:

Agent 能力确实强。整个流程是三步串行调用,每步的输出作为下一步的输入。Evolving 在每一步都能稳定输出结构化 JSON,没有出现格式错乱。第二步用高德 API 拿到的真实数据喂给它,它能正确地把这些信息整合到最终文案里,没有丢失或混淆。

幻觉控制有明显改善。我特意测试了:如果高德 API 没返回某个景点的评分,Evolving 在文案里会写"暂无评分"而不是编一个分数。在景点地址上,它完全使用了高德返回的真实地址,没有自己编。这个在实际项目中非常重要------用户按 AI 给的地址去导航,结果地址是假的,这种体验是灾难性的。

长文本生成质量不错。最终生成的旅行指南有 800-1200 字,结构清晰,有开头引入、天气建议、每天行程详情、结尾总结。语言风格不是干巴巴的列表,而是有叙事感的旅行散文。

Token 效率。三步调用加起来消耗的 token 不算多,个人开发者 50 万免费额度够用很久了。

写在最后

这个项目原本只是想验证一下 Seed Evolving 的 Agent 能力,没想到做出来效果还不错,已经可以实际用了。整个开发过程大概花了半天时间,大部分时间在调试 prompt 和前端样式。

Seed Evolving 在这个项目里扮演的角色很清晰:它是 Agent 的大脑,负责理解需求、规划行程、整合信息、生成文案。高德 API 是眼睛和手,负责获取真实数据和验证。两者配合,做出一个既聪明又靠谱的旅行助手。

如果你也有类似的需求------需要让 AI 调用外部 API、整合多源数据、生成有质量的内容------可以参考这个方案试试。Seed Evolving 的 Agent 能力和幻觉控制,确实能撑住真实业务场景。

相关推荐
程序员AI工坊1 小时前
Agent 开发:ReAct 循环与工具调用实战——从单次调用到自主 Agent
人工智能·后端·python·langchain·agent·react
hoaxxcj2 小时前
多智能体把云可靠性工程自动化:NeurIPS 2025 的 STRATUS 比 SOTA 强 1.5 倍,还顺手定了条“安全规范“
运维·安全·自动化·大模型·ai论文·前沿解读
Z-D-K2 小时前
一个AI的真实日记(3)
人工智能·ai·aigc·人机交互·agent·agi
武子康3 小时前
SWE-1.7 的提升究竟来自哪里?接受大量强化学习后训练的 Kimi K2.7 为起点,继续进行大规模 RL
人工智能·llm·agent
布列瑟农的星空4 小时前
LoRA微调BERT模型实践
人工智能·agent
梦想三三4 小时前
Qwen Function Calling实战:重构电商客服AI Agent
人工智能·python·langchain·大模型·rag
用户469368483204 小时前
kimi-code 深度掌握系列文章-工具系统:从注册到执行(六)
llm·agent
jsl_jsl_jsl5 小时前
claudecode学习 第 9 章 · Subagents
agent