app.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import json
  2. from datetime import datetime
  3. from dotenv import load_dotenv
  4. load_dotenv()
  5. from fastapi import APIRouter, FastAPI
  6. from fastapi.responses import JSONResponse
  7. from .schemas.questionnaire import GenerateRequest, GenerateResponse
  8. from .graphs.questionnaire import get_questionnaire_graph
  9. router = APIRouter(prefix="/api/v1", tags=["questionnaire"])
  10. @router.post("/questionnaire/generate")
  11. async def generate_questionnaire(req: GenerateRequest):
  12. graph = get_questionnaire_graph()
  13. try:
  14. result = graph.invoke({
  15. "request": req,
  16. "raw_response": "",
  17. "questionnaire": None,
  18. "error": None,
  19. })
  20. if result.get("error"):
  21. return JSONResponse(
  22. status_code=500,
  23. content={"error": result["error"]}
  24. )
  25. version = datetime.now().strftime("%Y%m%d%H%M%S")
  26. return GenerateResponse(
  27. questionnaire_json=json.dumps(result["questionnaire"], ensure_ascii=False),
  28. version=version,
  29. )
  30. except Exception as e:
  31. return JSONResponse(
  32. status_code=500,
  33. content={"error": f"graph 执行失败: {str(e)}"}
  34. )
  35. app = FastAPI(title="CFC LangGraph 问卷生成服务")
  36. app.include_router(router)
  37. @app.get("/health")
  38. def health():
  39. return {"status": "ok"}