Przeglądaj źródła

fix(self-check): 修复 P1-2 自检上下文在 Pydantic 层被静默丢弃

iwt 2 miesięcy temu
rodzic
commit
cbe9ce5740

+ 1 - 0
cfc-langgraph/app/api/chat.py

@@ -28,6 +28,7 @@ async def chat(req: ChatRequest):
         "child_id": req.context.child_id if req.context else None,
         "intent": None,
         "context": None,
+        "self_check_result": req.context.self_check_result if req.context and req.context.self_check_result else None,
         "messages": None,
         "answer": None,
         "tasks": [],

+ 23 - 0
cfc-langgraph/app/graphs/chat_graph.py

@@ -27,6 +27,7 @@ class ChatState(TypedDict):
     child_id: int | None
     intent: Intent | None
     context: dict | None
+    self_check_result: str | None  # P1-2: 自检结果 JSON
     messages: list | None
     answer: str | None
     tasks: list[dict]
@@ -96,6 +97,28 @@ def create_chat_graph():
         if portrait_text:
             messages.insert(1, SystemMessage(content=portrait_text))
 
+        # P1-2: 自检结果注入(如有)
+        self_check_result = state.get("self_check_result")
+        if self_check_result:
+            try:
+                import json as _json
+                sc = _json.loads(self_check_result)
+                sc_text = f"用户最近一次五维自检结果:\n总分 {sc.get('totalScore', 0)}/45,"
+                dims = sc.get('dimensions') or sc.get('scores') or {}
+                if isinstance(dims, list):
+                    dim_lines = [f"{d.get('name','')}: {d.get('score',0)}分" for d in dims]
+                elif isinstance(dims, dict):
+                    dim_lines = [f"{k}: {v}分" for k, v in dims.items()]
+                else:
+                    dim_lines = [str(dims)]
+                sc_text += " | ".join(dim_lines)
+                insight = sc.get('familyInsight') or sc.get('aiInsight')
+                if insight:
+                    sc_text += f"\nAI 洞察: {insight}"
+                messages.insert(1, SystemMessage(content=sc_text))
+            except Exception as _e:
+                logger.warning("解析 self_check_result 失败: %s", _e)
+
         # 注入家庭上下文 + 用户健康现状
         ctx = state.get("context", {})
         if isinstance(ctx, dict):

+ 1 - 0
cfc-langgraph/app/models/common.py

@@ -9,6 +9,7 @@ class UserContext(BaseModel):
     survey_id: Optional[int] = None
     family_id: Optional[int] = None
     mascot_code: Optional[str] = None
+    self_check_result: Optional[str] = None  # P1-2: 自检结果 JSON(五维得分+历史)
 
 
 class SourceInfo(BaseModel):