DEB 降级为模型集群中的普通一员,AI 不再照搬 DEB 做预测

此前 DEB 以独立字段 deb.prediction 传给 AI,提示词又要求"必须综合 DEB",
导致 AI 直接输出 DEB 值而非独立判断。改动:
- 移除 AI 输入中的独立 deb 字段,DEB 只作为 model_cluster.sources 中的
  一条记录 (model: "DEB (fusion)"),与其他模型平等
- 提示词改为:以模型集群集中区间为基线,用报文观测信号独立判断上修/下修/维持
- 流式/非流式提示词均强调"不要直接照搬 DEB 的值,差异是正常的"
- 回退路径改用模型集群中位数作为默认预测,DEB 仅作为备选参考
This commit is contained in:
2569718930@qq.com
2026-05-06 16:03:22 +08:00
parent f9d0ea31bc
commit eb42d644a3
4 changed files with 83 additions and 47 deletions
+9 -9
View File
@@ -354,18 +354,18 @@ def _build_city_ai_prompt(data: Dict[str, Any]) -> Dict[str, Any]:
"icao": risk.get("icao") or airport_current.get("station_code") or airport_primary.get("station_code"),
"distance_km": risk.get("distance_km"),
},
"deb": {
"prediction": ((daily_entry.get("deb") or {}).get("prediction") if isinstance(daily_entry.get("deb"), dict) else None)
or ((data.get("deb") or {}).get("prediction") if isinstance(data.get("deb"), dict) else None),
"weights_info": ((data.get("deb") or {}).get("weights_info") if isinstance(data.get("deb"), dict) else None),
},
"model_cluster": {
"sources": [
{"model": str(name), "value": value}
for name, value in (models or {}).items()
if _safe_float(value) is not None
*([
{"model": "DEB (fusion)", "value": ((daily_entry.get("deb") or {}).get("prediction") if isinstance(daily_entry.get("deb"), dict) else None) or ((data.get("deb") or {}).get("prediction") if isinstance(data.get("deb"), dict) else None)}
] if (((daily_entry.get("deb") or {}).get("prediction") if isinstance(daily_entry.get("deb"), dict) else None) or ((data.get("deb") or {}).get("prediction") if isinstance(data.get("deb"), dict) else None)) is not None else []),
*[
{"model": str(name), "value": value}
for name, value in (models or {}).items()
if _safe_float(value) is not None
],
],
"model_count": len(model_values),
"model_count": len(model_values) + (1 if (((daily_entry.get("deb") or {}).get("prediction") if isinstance(daily_entry.get("deb"), dict) else None) or ((data.get("deb") or {}).get("prediction") if isinstance(data.get("deb"), dict) else None)) is not None else 0),
"min": min(model_values) if model_values else None,
"max": max(model_values) if model_values else None,
"spread": (max(model_values) - min(model_values)) if len(model_values) >= 2 else None,