product_tools.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from langchain_core.tools import tool
  2. from app.tools.java_client import JavaClient
  3. import logging
  4. logger = logging.getLogger(__name__)
  5. _java = JavaClient()
  6. @tool
  7. async def search_product_by_keyword(keyword: str, limit: int = 5) -> str:
  8. """按关键词搜索上架商品, 返回 JSON 商品列表"""
  9. try:
  10. products = await _java.search_products(keyword, limit)
  11. if not products:
  12. return "[]"
  13. return str([{
  14. "id": p["id"],
  15. "name": p["name"],
  16. "price": p.get("price"),
  17. "description": p.get("intro") or p.get("description", ""),
  18. } for p in products])
  19. except Exception as e:
  20. logger.warning("搜索商品失败: %s", e)
  21. return "[]"
  22. @tool
  23. async def search_activity_by_keyword(keyword: str, limit: int = 5) -> str:
  24. """按关键词搜索进行中的活动, 返回 JSON 活动列表"""
  25. try:
  26. activities = await _java.search_activities(keyword, limit)
  27. if not activities:
  28. return "[]"
  29. return str([{
  30. "id": a["id"],
  31. "name": a["title"],
  32. "description": a.get("description", ""),
  33. } for a in activities])
  34. except Exception as e:
  35. logger.warning("搜索活动失败: %s", e)
  36. return "[]"
  37. @tool
  38. async def search_article_by_keyword(keyword: str, limit: int = 5) -> str:
  39. """按关键词搜索已发布文章, 返回 JSON 文章列表"""
  40. try:
  41. articles = await _java.search_articles(keyword, limit)
  42. if not articles:
  43. return "[]"
  44. return str([{
  45. "id": a["id"],
  46. "name": a["title"],
  47. "summary": a.get("summary", ""),
  48. } for a in articles])
  49. except Exception as e:
  50. logger.warning("搜索文章失败: %s", e)
  51. return "[]"