| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- """
- 简单多智能体天气穿衣建议系统
- 提供直接的城市输入功能,使用真实天气数据,穿衣建议由LLM处理
- """
- import sys
- import os
- import json
- import random
- def get_city_input():
- """获取用户输入的城市名称"""
- print("💬 欢迎使用多智能体天气穿衣建议系统!")
- print("💡 请输入您想查询天气的城市名称")
- print("💡 支持中文和英文城市名")
- print("💡 输入 'quit' 或 '退出' 可以退出程序\n")
-
- while True:
- city = input("🌍 请输入城市名称: ").strip()
- if not city:
- print("❌ 请输入有效的城市名称")
- continue
-
- return city
- def get_real_weather(city_name):
- """获取真实天气数据"""
- try:
- # 导入Weather类
- from weather import Weather
-
- # 创建天气查询实例
- weather = Weather()
-
- # 查询天气信息
- weather_info = weather.get_weather(city_name)
-
- # 获取详细天气数据用于穿衣建议
- weather_details = weather.get_weather_details(city_name)
-
- return weather_info, weather_details
-
- except Exception as e:
- print(f"❌ 天气查询失败: {e}")
- # 返回模拟数据作为备用
- return f"🏙️ 城市: {city_name}\n🌡️ 温度: 20°C\n📝 天气: 晴朗\n💧 湿度: 50%\n🌬️ 风速: 3 m/s", None
- def get_llm_fashion_advice(weather_details, city_name):
- """使用LLM基于真实天气数据生成穿衣建议"""
- if weather_details and "error" not in weather_details:
- # 使用真实天气数据
- temp = weather_details.get('temperature', 20)
- description = weather_details.get('description', '晴朗')
- humidity = weather_details.get('humidity', 50)
- wind_speed = weather_details.get('wind_speed', 3)
-
- # 构建LLM提示词
- prompt = f"""
- 请根据以下天气信息为{city_name}提供专业的穿衣建议:
- - 温度: {temp}°C
- - 天气状况: {description}
- - 湿度: {humidity}%
- - 风速: {wind_speed} m/s
- 请提供详细、实用的穿衣建议,包括:
- 1. 上衣选择
- 2. 下装选择
- 3. 鞋子建议
- 4. 外套/配饰
- 5. 特别注意事项
- 请用中文回复,格式要清晰易读。"""
-
- # 模拟LLM响应(在实际应用中,这里会调用真实的LLM API)
- llm_response = simulate_llm_response(prompt, temp, description)
-
- return f"🤖 LLM智能穿衣建议(基于{city_name}的真实天气数据):\n\n{llm_response}"
- else:
- # 使用模拟数据
- prompt = f"""
- 请根据以下天气信息为{city_name}提供专业的穿衣建议:
- - 温度: 20°C
- - 天气状况: 晴朗
- - 湿度: 50%
- - 风速: 3 m/s
- 请提供详细、实用的穿衣建议。"""
-
- llm_response = simulate_llm_response(prompt, 20, '晴朗')
- return f"🤖 LLM智能穿衣建议(基于{city_name}的天气数据):\n\n{llm_response}"
- def simulate_llm_response(prompt, temperature, weather_condition):
- """模拟LLM响应,根据温度生成智能穿衣建议"""
-
- # 基于温度生成不同的建议模板
- if temperature > 30:
- base_advice = {
- "上衣": ["短袖T恤", "透气衬衫", "背心", "轻薄材质上衣"],
- "下装": ["短裤", "轻薄长裤", "透气材质的裤子"],
- "鞋子": ["凉鞋", "透气运动鞋", "帆布鞋"],
- "外套": ["防晒衣", "轻薄外套备用"],
- "配饰": ["太阳镜", "遮阳帽", "防晒霜"],
- "建议": "选择浅色、透气的面料,注意防晒和补水"
- }
- elif temperature > 25:
- base_advice = {
- "上衣": ["短袖T恤", "轻薄长袖", "透气衬衫"],
- "下装": ["休闲裤", "牛仔裤", "轻薄材质的裤子"],
- "鞋子": ["运动鞋", "休闲鞋", "帆布鞋"],
- "外套": ["薄外套备用", "防风衣"],
- "配饰": ["帽子", "太阳镜"],
- "建议": "可分层穿着,便于根据温度变化调整"
- }
- elif temperature > 20:
- base_advice = {
- "上衣": ["长袖T恤", "薄款卫衣", "衬衫"],
- "下装": ["休闲裤", "牛仔裤", "卡其裤"],
- "鞋子": ["休闲鞋", "运动鞋", "皮鞋"],
- "外套": ["夹克", "薄外套", "风衣"],
- "配饰": ["围巾备用", "帽子"],
- "建议": "温度适宜,适合户外活动"
- }
- elif temperature > 15:
- base_advice = {
- "上衣": ["长袖衬衫", "薄毛衣", "卫衣"],
- "下装": ["长裤", "牛仔裤", "休闲裤"],
- "鞋子": ["运动鞋", "皮鞋", "休闲鞋"],
- "外套": ["夹克", "风衣", "薄外套"],
- "配饰": ["围巾", "帽子"],
- "建议": "注意保暖,可搭配薄外套"
- }
- elif temperature > 10:
- base_advice = {
- "上衣": ["毛衣", "厚衬衫", "保暖内衣"],
- "下装": ["厚裤子", "牛仔裤", "保暖裤"],
- "鞋子": ["运动鞋", "皮鞋", "保暖鞋"],
- "外套": ["夹克", "风衣", "薄羽绒服"],
- "配饰": ["围巾", "手套", "帽子"],
- "建议": "注意保暖,可搭配围巾"
- }
- else:
- base_advice = {
- "上衣": ["保暖内衣", "厚毛衣", "羽绒内胆"],
- "下装": ["厚裤子", "保暖裤", "羽绒裤"],
- "鞋子": ["保暖靴子", "雪地靴", "防水鞋"],
- "外套": ["羽绒服", "厚外套", "防风衣"],
- "配饰": ["围巾", "手套", "帽子", "耳罩"],
- "建议": "多层穿着,注意防寒保暖"
- }
-
- # 根据天气状况调整建议
- weather_adjustments = {
- "雨": {
- "鞋子": ["雨靴", "防水鞋"],
- "配饰": ["雨伞", "雨衣"],
- "建议": "选择防水面料,注意防滑"
- },
- "雪": {
- "鞋子": ["防滑靴", "雪地靴"],
- "配饰": ["手套", "帽子", "围巾"],
- "建议": "注意防滑保暖,选择防水材质"
- },
- "风": {
- "外套": ["防风衣", "风衣"],
- "配饰": ["帽子", "围巾"],
- "建议": "选择防风面料,注意保暖"
- }
- }
-
- # 应用天气调整
- for weather_key, adjustment in weather_adjustments.items():
- if weather_key in weather_condition:
- for category, items in adjustment.items():
- if category in base_advice:
- if category == "建议":
- base_advice[category] += f",{items}"
- else:
- base_advice[category].extend(items)
-
- # 构建响应文本
- response = f"基于当前天气状况({temperature}°C,{weather_condition}),为您提供以下穿衣建议:\n\n"
-
- response += f"👕 **上衣选择**: {', '.join(base_advice['上衣'][:3])}\n"
- response += f"👖 **下装选择**: {', '.join(base_advice['下装'][:3])}\n"
- response += f"👟 **鞋子建议**: {', '.join(base_advice['鞋子'][:3])}\n"
- response += f"🧥 **外套配饰**: {', '.join(base_advice['外套'][:2])}"
-
- if base_advice['配饰']:
- response += f",配饰: {', '.join(base_advice['配饰'][:3])}\n"
- else:
- response += "\n"
-
- response += f"💡 **特别建议**: {base_advice['建议']}\n"
-
- # 添加个性化建议
- if temperature > 25:
- response += "🌞 **温馨提示**: 天气较热,建议选择透气材质,注意防晒补水"
- elif temperature < 10:
- response += "❄️ **温馨提示**: 天气较冷,建议多层穿着,注意保暖防寒"
- else:
- response += "🌤️ **温馨提示**: 天气舒适,适合各种户外活动"
-
- return response
- def main():
- """主函数"""
- try:
- # 获取城市输入
- city = get_city_input()
-
- print(f"\n🔍 正在查询 {city} 的真实天气信息...")
-
- # 获取真实天气数据
- weather_info, weather_details = get_real_weather(city)
-
- # 生成穿衣建议(使用LLM处理)
- print("🤖 正在使用LLM生成智能穿衣建议...")
- fashion_advice = get_llm_fashion_advice(weather_details, city)
-
- # 显示结果
- print("\n" + "="*50)
- print("📊 天气信息")
- print("="*50)
- print(weather_info)
-
- print("\n" + "="*50)
- print("👗 穿衣建议")
- print("="*50)
- print(fashion_advice)
-
- print("\n" + "="*50)
-
- # 询问是否继续查询
- while True:
- continue_query = input("\n🔍 是否继续查询其他城市?(y/n): ").strip().lower()
-
- if continue_query in ['y', 'yes', '是', '继续']:
- print("\n" + "-"*50)
- # 递归调用主函数继续查询
- main()
- return
- elif continue_query in ['n', 'no', '否', '退出']:
- print("👋 感谢使用,再见!")
- return
- else:
- print("❌ 请输入 y/是 或 n/否")
-
- except KeyboardInterrupt:
- print("\n\n👋 用户中断,程序退出")
- sys.exit(0)
- except Exception as e:
- print(f"\n❌ 发生错误: {e}")
- print("💡 请稍后重试")
- sys.exit(1)
- if __name__ == "__main__":
- main()
|