From 73a51d73e80fe7b3d14cd5dd8fa3b51b07607641 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Sat, 23 May 2026 09:38:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A4=A9=E6=B0=94=E6=97=A5?= =?UTF-8?q?=E6=8A=A5=20AI=20prompt=EF=BC=9A=E7=A7=BB=E9=99=A4=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E8=A7=82=E6=B5=8B=E6=B8=A9=E5=BA=A6=EF=BC=8C=E8=81=9A?= =?UTF-8?q?=E7=84=A6=E9=A2=84=E6=8A=A5=E6=9C=80=E9=AB=98=E6=B8=A9=20+=20?= =?UTF-8?q?=E5=A4=A9=E6=B0=94=E7=8E=B0=E8=B1=A1=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 去掉当前温度和 METAR 报文,仅保留 forecast_high 和 weather_code - 传入当前日期,防止 AI 猜测日期错误 - 禁止 AI 编造数据缺失声明 - 精简输出至 400 字以内 --- src/utils/daily_weather_report.py | 32 +++++++++++-------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/utils/daily_weather_report.py b/src/utils/daily_weather_report.py index af7aeeb7..4c878461 100644 --- a/src/utils/daily_weather_report.py +++ b/src/utils/daily_weather_report.py @@ -86,42 +86,31 @@ def _fetch_city_data( om = results.get("open-meteo", {}) if isinstance(results, dict) else {} current = om.get("current_weather", {}) if isinstance(om, dict) else {} daily = om.get("daily", {}) if isinstance(om, dict) else {} - metar = results.get("metar", {}) if isinstance(results, dict) else {} daily_highs = daily.get("temperature_2m_max", []) or [] today_high = daily_highs[0] if daily_highs else None - daily_times = daily.get("time", []) or [] - today_date = daily_times[0] if daily_times else None return { "city": city_key, "name": CITY_NAME_ZH.get(city_key, city_key), - "temp": current.get("temperature"), - "wind_speed": current.get("windspeed"), - "wind_dir": current.get("winddirection"), "weather_code": current.get("weathercode"), "forecast_high": today_high, - "forecast_date": today_date, - "metar_raw": (metar.get("raw_metar") or metar.get("raw") or "") - if isinstance(metar, dict) - else "", } -def _build_ai_prompt(cities_data: List[Dict[str, Any]]) -> str: +def _build_ai_prompt(cities_data: List[Dict[str, Any]], report_date: str) -> str: data_json = json.dumps(cities_data, ensure_ascii=False, indent=2, default=str) return ( - "你是天气预报播报员。以下是今天中国主要城市的实时天气数据(JSON格式)。\n\n" + f"今天是 {report_date}。以下是今天中国主要城市的天气预报数据(JSON格式)。\n\n" f"{data_json}\n\n" "请用自然、亲切的中文写一段天气日报,要求:\n" - "1. 每个城市1-2句,描述今天天气状况(晴/多云/雨等)和温度体感\n" - "2. 温度用摄氏度(℃),风速用 km/h\n" - "3. 语气轻松自然,像朋友聊天,不要机械罗列数据\n" - "4. 可以提一句户外活动建议或穿衣提示\n" - "5. 格式:城市名 加粗,用 HTML 标签\n" - "6. 开头加一句日期和问候,例如「☀️ 早上好!今天是 5 月 23 日」\n" - "7. 总体控制在 500 字以内\n" - "8. metar_raw 是机场观测报文,可辅助判断天气现象\n" + "1. forecast_high 是今日预报最高温(℃),weather_code 是天气现象代码\n" + "2. 根据 weather_code 描述天气(晴/多云/雨/雾等),根据 forecast_high 描述冷热\n" + "3. 每个城市1-2句,语气轻松自然,像朋友聊天\n" + "4. 不要编造数据缺失声明,所有数据都已提供,直接基于数据播报\n" + "5. 城市名 用 HTML 加粗\n" + "6. 开头加问候语,例如「☀️ 早上好!」\n" + "7. 总体控制在 400 字以内\n" "weather_code 参考:0=晴, 1-3=多云, 45-48=雾, 51-67=雨, 71-86=雪, 95-99=雷暴" ) @@ -225,7 +214,8 @@ def _runner(bot: Any, config: Dict[str, Any]) -> None: time.sleep(60) continue - prompt = _build_ai_prompt(cities_data) + report_date = now.strftime("%m月%d日") + prompt = _build_ai_prompt(cities_data, report_date) report_text = _call_ai(prompt) if not report_text: