recommend.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import uuid
  2. from fastapi import APIRouter
  3. from app.models.recommend import RecommendRequest, RecommendResponse, RecommendItem
  4. from app.graphs.recommend_graph import RecommendAgent
  5. import logging
  6. logger = logging.getLogger(__name__)
  7. router = APIRouter(prefix="/api/v1", tags=["recommend"])
  8. _agent: RecommendAgent = None
  9. def get_agent() -> RecommendAgent:
  10. global _agent
  11. if _agent is None:
  12. _agent = RecommendAgent()
  13. return _agent
  14. @router.post("/recommend", response_model=RecommendResponse)
  15. async def recommend(req: RecommendRequest):
  16. """营养推荐: Agent 搜索+LLM 解释"""
  17. trace_id = str(uuid.uuid4())
  18. try:
  19. agent = get_agent()
  20. result = await agent.run(query=req.query, tags=req.tags, limit=req.limit)
  21. items_data = result.get("items", [])
  22. items = []
  23. for item in items_data:
  24. items.append(RecommendItem(
  25. type=item.get("type", "product"),
  26. id=item.get("id", 0),
  27. name=item.get("name", ""),
  28. description=item.get("description", ""),
  29. reason=item.get("reason", ""),
  30. ))
  31. return RecommendResponse(items=items, source="agent", trace_id=trace_id)
  32. except Exception as e:
  33. logger.error("RecommendAgent 调用失败: %s", e, exc_info=True)
  34. return RecommendResponse(items=[], source="error", trace_id=trace_id)