从零搭建 AI 旅游规划 Agent|Gradio 可视化一键生成行程

📅 2026/7/2 6:59:52
从零搭建 AI 旅游规划 Agent|Gradio 可视化一键生成行程
项目前言出门做旅行攻略有多痛苦 打开十多个 APP 查天气、翻景点、算酒店餐饮预算还要反复调整路线避免行程赶半天才能凑出一份勉强能用的方案。于是我动手做了一套全自动 AI 旅游规划 Agent只需要输入一句话旅行需求智能体自动串行完成三大任务调用公开天气接口获取目的地未来 3 天天气预报根据你的预算、出行天数、节奏偏好生成宽松不赶路的行程路线支持大模型 / 离线双模式自动拆分酒店、门票、餐饮、交通开销核算总预算并对比预算上限整套项目基于 PythonGradio 搭建可视化网页无需前端开发基础一行代码启动本地服务还能一键生成公网分享链接发给朋友使用免费部署到 Hugging Face Spaces 永久在线。整个 Agent 采用串行自动化任务流水线无需人工分步操作点击按钮全自动执行提示用户输入旅行需求 → 任务1查询目的地天气 → 任务2生成定制行程路线 → 任务3自动核算旅行预算 → 前端表格可视化展示全部结果核心技术栈Gradio快速搭建交互式 Web 页面DataFrame 表格渲染天气、行程、费用明细支持一键生成公网共享链接Requests调用免费天气 API、大模型 LLM 接口Pandas结构化整理天气、行程、开销数据表格渲染输出大模型兼容原生支持 OpenAI 接口可无缝替换豆包、通义千问、文心一言等国内大模型容错设计无 LLM 密钥、天气接口请求失败时内置离线模拟数据程序不会崩溃中断页面功能分区输入区文本框填写你的出行需求目的地、天数、预算、节奏要求 一键生成按钮天气模块表格展示出行 3 天日期、高低温、天气状况行程模块结构化 3 日游路线区分每日上午 / 下午 / 晚间景点与游玩时长预算模块分项开销明细表 总预算总结自动计算剩余额核心模块功能拆解1. 天气查询模块get_city_weather()使用免费无密钥公开天气接口wttr.in无需注册、无需申请 API Key直接通过城市名获取未来 7 天气象数据自动截取旅行所需 3 天信息整理成表格。正常逻辑接口返回真实实时天气包含日期、最高最低温、天气描述容错兜底网络异常 / 接口失效时内置模拟天气数据保证页面正常渲染不会报错闪退2. 行程生成 Agentgenerate_travel_route()双模式兼容设计兼顾有大模型密钥、无密钥两种使用场景LLM 智能生成模式填入 OpenAI / 国内大模型 API Key 后自动构造精准 Prompt要求严格贴合用户需求3 天、宽松不赶路、每日≤3 个景点输出标准 JSON 结构化行程自动解析为表格离线备用模式无密钥时内置成都宽松慢游路线节奏舒缓无早起赶景点安排贴合 “不要太赶” 的需求Prompt 设计重点约束严格匹配用户出行天数、预算、节奏要求拆分上午 / 下午 / 晚间三段式行程限制每日景点数量拒绝高强度赶路安排固定 JSON 输出格式方便程序解析渲染3. 自动预算核算calculate_budget()按照短途旅行真实消费场景拆分开销类目自动计算单项小计与总花费住宿经济型酒店 2 晚费用门票核心景区门票总价餐饮3 天三餐 特色小吃预算市内交通地铁、短途打车开销伴手礼本地特产零食预留额度最终输出两项内容分项开销表格 预算总结文本自动对比用户设定的预算上限计算剩余可支配金额直观判断行程是否超支。5. Gradio 可视化网页极简布局零前端代码实现完整交互页面顶部标题 功能说明清晰告知用户工具作用横向布局需求输入框 橙色主操作按钮分模块展示天气、行程、开销三大结果表格底部预算总结文本框直观展示总花费与剩余额度启动命令demo.launch(shareTrue)两大核心能力本地地址http://127.0.0.1:7860本地浏览器打开使用自动生成 7 天有效期公网分享链接如截图xxx.gradio.live发给他人可远程访问你的 AI 旅游工具完整运行源码import gradio as gr import requests import json import pandas as pd from datetime import datetime, timedelta # 2. 配置全局参数 # 天气API免费公开接口无需key WEATHER_API_URL http://wttr.in/{city}?formatj1 # 大模型调用这里使用openai接口你也可以替换成国内大模型如豆包、通义千问 # 若没有key内置离线路线生成备用逻辑不影响运行 LLM_API_KEY LLM_API_URL https://api.openai.com/v1/chat/completions # 3. Agent任务函数1查询天气 def get_city_weather(city成都): 调用天气API获取未来7天天气 try: res requests.get(WEATHER_API_URL.format(citycity), timeout10) data res.json() weather_list [] for day_info in data[weather][:3]: # 只取旅行3天天气 date day_info[date] temp_max day_info[maxtempC] temp_min day_info[mintempC] condition day_info[hourly][4][weatherDesc][0][value] weather_list.append({ 日期: date, 最高温(℃): temp_max, 最低温(℃): temp_min, 天气状况: condition }) df_weather pd.DataFrame(weather_list) return df_weather except Exception as e: # API调用失败返回模拟天气保证程序不中断 mock_data [ {日期: Day1, 最高温(℃): 28, 最低温(℃): 22, 天气状况: 多云}, {日期: Day2, 最高温(℃): 29, 最低温(℃): 23, 天气状况: 晴}, {日期: Day3, 最高温(℃): 27, 最低温(℃): 21, 天气状况: 小雨} ] return pd.DataFrame(mock_data) # 4. Agent任务函数2生成旅游路线 def generate_travel_route(user_input): 大模型生成宽松不赶路的3日行程无key时使用内置行程 prompt f 用户需求{user_input} 要求 1. 目的地3日游行程宽松节奏慢不赶路每天不超过3个景点 2. 规划每日上午、下午、晚间行程 3. 输出JSON格式字段天数、时间段、景点、游玩时长 # 有API Key则调用大模型无则返回预设行程 if LLM_API_KEY.strip() ! : headers {Authorization: fBearer {LLM_API_KEY}, Content-Type: application/json} payload { model: gpt-3.5-turbo, messages: [{role: user, content: prompt}], temperature: 0.7 } resp requests.post(LLM_API_URL, headersheaders, jsonpayload) content resp.json()[choices][0][message][content] route_data json.loads(content) else: # 离线备用行程宽松慢节奏成都3日 route_data [ {天数: 第1天, 时间段: 上午, 景点: 宽窄巷子, 游玩时长: 3h}, {天数: 第1天, 时间段: 下午, 景点: 人民公园喝茶, 游玩时长: 3h}, {天数: 第1天, 时间段: 晚上, 景点: 锦里古街, 游玩时长: 2.5h}, {天数: 第2天, 时间段: 上午, 景点: 大熊猫繁育基地, 游玩时长: 4h}, {天数: 第2天, 时间段: 下午, 景点: 文殊院, 游玩时长: 2h}, {天数: 第2天, 时间段: 晚上, 景点: 春熙路散步, 游玩时长: 2h}, {天数: 第3天, 时间段: 上午, 景点: 杜甫草堂, 游玩时长: 2.5h}, {天数: 第3天, 时间段: 下午, 景点: 浣花溪公园, 游玩时长: 3h}, {天数: 第3天, 时间段: 晚上, 景点: 返程, 游玩时长: } ] df_route pd.DataFrame(route_data) return df_route # 5. Agent任务函数3预算自动核算 def calculate_budget(): 自动计算酒店、门票、餐饮总开销严格控制在2000预算内 cost_detail [ {项目: 经济型酒店2晚, 单价: 360, 数量: 2, 小计: 720}, {项目: 景点门票熊猫基地杜甫草堂, 单价: 95, 数量: 2, 小计: 190}, {项目: 三餐小吃3天, 单价: 130, 数量: 3, 小计: 390}, {项目: 市内交通地铁打车, 单价: 70, 数量: 3, 小计: 210}, {项目: 伴手礼零食, 单价: 230, 数量: 1, 小计: 230} ] df_cost pd.DataFrame(cost_detail) total df_cost[小计].sum() budget_summary f总预算{total} 元预算上限2000元剩余额度{2000-total}元 return df_cost, budget_summary # 6. Agent主调度流程自动串行执行任务 def travel_agent_workflow(user_text): print(【Agent开始自动拆解任务】) # 任务1获取天气 df_weather get_city_weather(city成都) print(✅ 任务1天气查询完成) # 任务2生成行程路线 df_route generate_travel_route(user_text) print(✅ 任务2行程规划完成) # 任务3计算费用预算 df_cost, budget_text calculate_budget() print(✅ 任务3预算核算完成) print() return df_weather, df_route, df_cost, budget_text # 7. Gradio前端可视化界面 with gr.Blocks(title成都旅游规划Agent) as demo: gr.Markdown(# AI旅游规划Agent) gr.Markdown(输入旅行需求Agent自动查询天气→规划行程→核算预算) with gr.Row(): user_input gr.Textbox( label你的旅行需求, value我想下周去成都玩3天预算2000不要太赶, lines2 ) run_btn gr.Button(一键生成行程方案, variantprimary) gr.Markdown(## 未来3天天气) weather_table gr.Dataframe() gr.Markdown(## 3日宽松旅游路线) route_table gr.Dataframe() gr.Markdown(## 开销明细) cost_table gr.Dataframe() budget_result gr.Textbox(label预算总结) # 绑定按钮触发Agent流水线 run_btn.click( fntravel_agent_workflow, inputs[user_input], outputs[weather_table, route_table, cost_table, budget_result] ) # 启动前端网页 if __name__ __main__: demo.launch(shareTrue)项目使用教程1.执行 pip 安装依赖包pip install gradio requests pandas2. 本地运行python travel_agent.py启动成功后控制台输出两个地址Local URL本地浏览器打开仅自己访问Public URL7 天有效期公网链接可分享给他人远程使用3. 两种使用模式模式 A离线免密钥开箱即用直接运行代码无需任何 API Key使用内置成都固定宽松行程天气接口自动拉取实时数据零成本体验完整功能。模式 B大模型智能定制推荐获取 OpenAI / 豆包 / 通义千问 API Key修改代码顶部LLM_API_KEY填入密钥替换LLM_API_URL为对应服务商接口地址运行后会根据你输入的任意出行需求动态生成专属个性化行程支持更换目的地、调整天数、预算、旅行风格亲子 / 美食 / 徒步等4. 永久免费部署Hugging Face Spaces控制台提示执行gradio deploy可一键部署至 Hugging Face获得永久在线链接无 7 天有效期限制还支持免费 GPU 升级。六、项目拓展优化方向多目的地适配解析用户输入自动提取城市将硬编码city成都改为动态识别支持全国任意城市规划多出行天数兼容自动识别用户输入的 2 天 / 4 天 / 5 天行程动态调整天气、行程、预算计算逻辑出行人群区分增加亲子、情侣、学生、中老年模式调整景点难度与住宿档次交通模块升级新增往返大交通飞机 / 高铁费用自动查询完整核算全程总开销导出功能增加 Excel、PDF 行程单导出方便线下打印携带多轮对话优化增加记忆功能支持用户二次修改行程调整景点、增减预算七、总结这个 AI 旅游规划 Agent 完整演示了轻量多任务智能体的开发思路拆分独立工具函数、主流程串行调度、可视化交互页面、完善容错兜底非常适合 AI 初学者入门学习 Agent 开发 Gradio 可视化。不用手动查攻略、算开销一句话需求全自动输出完整旅行方案本地运行、公网分享、云端永久部署三种使用方式全覆盖日常出行、AI 学习练手都非常实用。核心功能概述介绍 AI 旅游规划 Agent 的核心能力多目的地智能推荐、行程时间优化、预算控制、兴趣偏好匹配。强调 Gradio 的交互优势无需编程基础用户通过表单输入需求实时生成可视化行程表。技术架构设计后端逻辑基于 Python 的 NLP 模型如 GPT-3.5/GPT-4解析用户输入调用旅游 API如 Google Maps/Amadeus获取景点/交通数据。数据处理使用 Pandas 清洗和结构化行程数据设计权重算法平衡时间/预算/兴趣。可视化层Gradio 的DataFrame组件展示行程表Plot模块绘制地图路径。关键实现步骤用户输入模块Gradio 表单设计包含目的地、天数、预算滑块、兴趣标签如“美食”“徒步”。输入验证通过gr.Number限制预算范围gr.Dropdown提供热门城市选项。AI 规划引擎使用 LangChain 构建提示模板示例prompt f基于以下条件生成行程 目的地{destination}天数{days}天预算{budget}元。 兴趣{interests}。按小时分配景点并标注交通方式。调用大模型 API 生成 JSON 格式的行程草案。结果可视化表格优化用gr.DataFrame显示每日行程列包括“时间”“景点”“费用”。地图集成通过folium生成交互地图嵌入 Gradio 的gr.HTML组件。部署与优化性能优化使用cache装饰器缓存高频目的地查询结果。错误处理捕获 API 超时异常返回友好提示如“当前请求过多请简化条件”。部署脚本通过gradio deploy快速发布到 Hugging Face Spaces。扩展方向个性化推荐接入用户历史行为数据动态调整景点权重。多模态输出增加语音播报功能TTS 模块和 PDF 导出按钮。案例演示截图展示 Gradio 界面左侧输入面板右侧行程表和地图联动效果。对比传统手动规划与 AI 生成的效率差异如 5 分钟 vs 2 小时。