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: