Add analysis feature

This commit is contained in:
Xin Wang
2026-08-07 10:59:47 +08:00
parent 485ad623d4
commit 56a32e81ca
23 changed files with 768 additions and 223 deletions
+20 -2
View File
@@ -31,8 +31,9 @@ def _parse_timestamp(value: object) -> datetime:
class ConversationRecorder:
"""按事件顺序写入一通会话;写库失败不应中断实时通话。"""
def __init__(self, session_id: str):
def __init__(self, session_id: str, analysis_plan: dict | None = None):
self.session_id = session_id
self._analysis_plan = deepcopy(analysis_plan or {})
self._sequence = 0
self._trace_sequence = 0
self._lock = asyncio.Lock()
@@ -49,6 +50,7 @@ class ConversationRecorder:
runtime_mode: str,
session_id: str | None = None,
extra: dict | None = None,
analysis_plan: dict | None = None,
) -> "ConversationRecorder | None":
session_id = session_id or f"conv_{uuid4().hex[:20]}"
try:
@@ -62,11 +64,17 @@ class ConversationRecorder:
runtime_mode=runtime_mode,
status="active",
message_count=0,
analysis_status="none",
analysis_data=(
{"plan": deepcopy(analysis_plan)}
if analysis_plan and analysis_plan.get("enabled")
else {}
),
extra=deepcopy(extra or {}),
)
)
await db.commit()
return cls(session_id)
return cls(session_id, analysis_plan)
except Exception as exc:
logger.error(f"创建对话历史会话失败,不影响本次通话: {exc}")
return None
@@ -289,6 +297,16 @@ class ConversationRecorder:
conversation.status = status
conversation.ended_at = datetime.now(UTC)
conversation.message_count = self._sequence
if (
status == "completed"
and self._sequence > 0
and self._analysis_plan.get("enabled")
):
conversation.analysis_status = "pending"
conversation.analysis_error = ""
conversation.analysis_data = {
"plan": deepcopy(self._analysis_plan)
}
await db.commit()
except Exception as exc:
logger.error(f"结束对话历史会话失败: {exc}")