recommend.py 1.3 KB

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