2026-07-28 02:12:46 +08:00
|
|
|
|
# ============================================================
|
2026-09-14 15:40:10 +08:00
|
|
|
|
# 对话历史规范化(moduleId: core-context, 可重生 ✅)
|
|
|
|
|
|
# 只做纯数据整形:把网关收到的历史消息收敛成 {role, text}。
|
|
|
|
|
|
# 多轮语义理解统一交给 Pi Agent,本模块不做任何规则判断。
|
2026-07-28 02:12:46 +08:00
|
|
|
|
# ============================================================
|
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
|
|
from typing import Any
|
|
|
|
|
|
|
|
|
|
|
|
HistoryItem = dict[str, str] # {role: user|agent, text: str}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def normalize_history(raw: list[Any] | None, *, limit: int = 12) -> list[HistoryItem]:
|
|
|
|
|
|
out: list[HistoryItem] = []
|
|
|
|
|
|
for m in raw or []:
|
|
|
|
|
|
if not isinstance(m, dict):
|
|
|
|
|
|
continue
|
|
|
|
|
|
role = str(m.get("role") or "")
|
|
|
|
|
|
if role in ("assistant", "bot", "ai"):
|
|
|
|
|
|
role = "agent"
|
|
|
|
|
|
if role not in ("user", "agent"):
|
|
|
|
|
|
continue
|
|
|
|
|
|
text = str(m.get("text") or m.get("content") or "").strip()
|
|
|
|
|
|
if not text:
|
|
|
|
|
|
continue
|
|
|
|
|
|
out.append({"role": role, "text": text})
|
|
|
|
|
|
return out[-limit:]
|