这是一个纯中文、无网页界面、基于终端交互的旅游推荐AI智能体,核心能力:
- 自动查询指定城市的实时天气(基于高德天气API,国内稳定);
- 结合天气和用户偏好推荐景点(基于Tavily搜索API);
- 支持多轮反馈调整:用户反馈“不满意+理由”后,自动重新推荐适配需求的景点;
- 防误判逻辑:精准区分“满意/不满意”反馈,避免误触发结束流程;
- 全链路中文:所有提示、输出、错误信息均为纯中文,无英文混杂。
# 安装核心依赖
pip install requests python-dotenv tavily-python volcenginesdkarkruntime在项目根目录创建 .env 文件,填入以下内容:
# 大模型配置(火山方舟/其他兼容OpenAI格式的大模型)
ARK_API_KEY=你的大模型API密钥
ARK_BASE_URL=你的大模型接口地址(如https://ark.cn-beijing.volces.com/api/v3)
ARK_MODEL=你使用的模型名称(如qwen-turbo)
# 高德天气API(免费申请)
AMAP_WEATHER_KEY=你的高德Web服务API Key
# Tavily搜索API(免费申请)
TAVILY_API_KEY=你的Tavily API Key| API名称 | 申请地址 | 免费额度 |
|---|---|---|
| 高德天气API | https://lbs.amap.com/ | 个人每日30万次 |
| Tavily搜索API | https://tavily.com/ | 每月1000次 |
| 火山方舟大模型 | https://www.volcengine.com/product/ark | 新用户有免费额度 |
├── .env # 环境变量配置(必填)
├── config.py # 智能体配置(系统提示词、参数)
├── tools.py # 工具函数(天气查询、景点推荐、翻译)
├── llm_client.py # 大模型客户端(需适配你的大模型)
└── main.py # 主程序(终端交互逻辑)
- 确保所有配置文件(
.env/config.py/tools.py)已正确填写; - 在终端执行:
python main.py
- 按照终端提示操作:
- 输入要查询的城市(如“北京”);
- 等待智能体查询天气→推荐景点;
- 反馈对推荐结果的评价(格式:
满意+理由/不满意+理由); - 智能体根据反馈自动调整推荐(最多3次不满意后结束)。
==================================================
🏖️ 旅游推荐AI智能体(纯中文终端版)
==================================================
✨ 功能:结合天气+偏好,多轮调整景点推荐
💡 提示:输入城市后,按指引反馈即可调整推荐
==================================================
📌 请输入你想去的城市:北京
✅ 你输入的城市:北京
==================== 第1轮推荐 ====================
🤖 智能体正在思考...
💡 模型思考:
Thought: 用户首次请求北京的旅游推荐,根据规则需要先查询北京的天气,以便后续结合天气推荐景点。
Action: get_weather(city="北京")
🔧 正在调用 get_weather 工具...
📊 工具执行结果:
北京当前天气:多云,气温6℃,东南风3级
==================== 第2轮推荐 ====================
🤖 智能体正在思考...
💡 模型思考:
Thought: 已获取北京天气为多云,需要推荐适配多云天气的景点,无用户偏好。
Action: get_attraction(city="北京", weather="多云", adjust_keyword="", preference="")
🔧 正在调用 get_attraction 工具...
📊 工具执行结果:
根据搜索,为您推荐以下景点:
- 故宫博物院:多云天气适合逛故宫,光线柔和,拍照效果好,避开了晴天的暴晒和雨天的不便...
- 颐和园:昆明湖周边视野开阔,多云不晒,适合散步、划船,体验皇家园林的美感...
💬 你对推荐结果满意吗?(满意/不满意+理由):不满意,太远
⚠️ 已连续不满意1次,最多可不满意3次
==================== 第3轮推荐 ====================
...(自动重新推荐市区景点)
- 只有输入以“满意”开头(如“满意,推荐很实用”),才判定为满意并结束流程;
- 输入以“不满意”开头(如“不满意,太远”),自动计数并重新推荐;
- 非规范输入(如“一般”),提示用户按格式输入,避免流程混乱。
- 天气查询结果纯中文(无英文映射);
- 景点搜索强制中文关键词,即使返回英文结果也自动翻译为中文;
- 所有终端提示、错误信息、思考过程均为纯中文。
- 工具调用失败自动重试(最多2次);
- 空输入、格式错误自动提示,避免程序崩溃;
- 连续3次不满意后自动结束,避免无限循环。
- 检查
tools.py中tavily.search的language="zh"是否配置; - 确保搜索关键词包含“必须用中文回答”;
- 确认大模型API密钥有效(翻译功能依赖大模型)。
- 程序已通过
startswith("满意")精准判断,避免字符串包含导致的误判; - 确保反馈严格以“满意”/“不满意”开头。
- 检查
.env中的API密钥是否正确; - 确保网络可访问外网(Tavily为国外API);
- 禁用VPN代理:
tools.py中已添加os.environ['NO_PROXY'] = 'tavily.com'。
在 config.py 中调整:
MAX_DISSATISFACTION = 3 # 改为你想要的次数(如5)在 config.py 中调整:
MAX_LOOP = 5 # 最大推荐轮次在 config.py 的 AGENT_SYSTEM_PROMPT 中调整智能体的思考规则、工具调用格式等。
- 仅支持国内城市的天气查询(高德API限制);
- Tavily API需要稳定的外网访问,若无法访问可替换为百度POI API;
- 大模型客户端(
llm_client.py)需适配你的大模型接口格式(兼容OpenAI格式即可); - 建议反馈时明确说明理由(如“不满意,想要免费景点”),智能体推荐更精准。