Просмотр исходного кода

feat: Python 侧新增 portrait 生成/重画 FastAPI 路由

E2E Test Bot 1 месяц назад
Родитель
Сommit
231f644bd3
2 измененных файлов с 59 добавлено и 1 удалено
  1. 56 0
      cfc-langgraph/app/api/portrait.py
  2. 3 1
      cfc-langgraph/app/main.py

+ 56 - 0
cfc-langgraph/app/api/portrait.py

@@ -0,0 +1,56 @@
+from fastapi import APIRouter, HTTPException
+from pydantic import BaseModel
+from app.graphs.portrait_generation_graph import get_portrait_graph
+import logging
+
+logger = logging.getLogger(__name__)
+
+router = APIRouter(prefix="/api/portrait", tags=["portrait"])
+
+
+class PortraitGenerateRequest(BaseModel):
+    user_id: int
+    member_id: int | None = None
+    previous_portrait: str | None = None
+    profile_snapshot: dict | None = None
+    behavior_summary: dict | None = None
+
+
+@router.post("/generate")
+async def generate_portrait(req: PortraitGenerateRequest):
+    """AI 生成用户画像(首次生成)"""
+    try:
+        graph = get_portrait_graph()
+        state = {
+            "user_id": req.user_id,
+            "member_id": req.member_id,
+            "previous_portrait": None,
+            "profile_snapshot": req.profile_snapshot,
+            "behavior_summary": req.behavior_summary,
+            "portrait_text": None,
+        }
+        result = await graph.ainvoke(state)
+        return {"portrait_text": result["portrait_text"]}
+    except Exception as e:
+        logger.exception("画像生成失败")
+        raise HTTPException(status_code=500, detail=str(e))
+
+
+@router.post("/regenerate")
+async def regenerate_portrait(req: PortraitGenerateRequest):
+    """AI 重画用户画像(参考旧画像)"""
+    try:
+        graph = get_portrait_graph()
+        state = {
+            "user_id": req.user_id,
+            "member_id": req.member_id,
+            "previous_portrait": req.previous_portrait,
+            "profile_snapshot": req.profile_snapshot,
+            "behavior_summary": req.behavior_summary,
+            "portrait_text": None,
+        }
+        result = await graph.ainvoke(state)
+        return {"portrait_text": result["portrait_text"]}
+    except Exception as e:
+        logger.exception("画像重画失败")
+        raise HTTPException(status_code=500, detail=str(e))

+ 3 - 1
cfc-langgraph/app/main.py

@@ -3,7 +3,7 @@ import time
 import asyncio
 import logging
 from fastapi import FastAPI, Request
-from app.api import health, recommend, chat, analyze, tongue, adapter, report_parse, meal, logs, audio, innate_portrait, self_check, knowledge_base
+from app.api import health, recommend, chat, analyze, tongue, adapter, report_parse, meal, logs, audio, innate_portrait, self_check, knowledge_base, portrait
 from app import monitoring
 from src.app import router as questionnaire_router
 from app.middleware import RequestLogMiddleware
@@ -29,7 +29,9 @@ app.include_router(audio.router)
 app.include_router(logs.router)
 app.include_router(innate_portrait.router)
 app.include_router(self_check.router)
+app.include_router(self_check.router)
 app.include_router(knowledge_base.router)
+app.include_router(portrait.router)
 
 
 @app.on_event("startup")