report_tools.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 get_report_detail(report_id: int) -> str:
  8. """获取健康报告的完整详情, 包含各维度评分和解读"""
  9. try:
  10. client = _java
  11. resp = await client._get_client().post(
  12. "/api/health/report/detail",
  13. json={"reportId": report_id},
  14. )
  15. data = resp.json()
  16. if data.get("code") == 200:
  17. import json
  18. return json.dumps(data.get("data", {}), ensure_ascii=False)
  19. return "{}"
  20. except Exception as e:
  21. logger.warning("获取报告详情失败: %s", e)
  22. return "{}"
  23. @tool
  24. async def get_survey_data(report_id: int) -> str:
  25. """获取与报告关联的调研问卷数据"""
  26. try:
  27. client = _java
  28. resp = await client._get_client().post(
  29. "/api/survey/completed",
  30. json={"reportId": report_id},
  31. )
  32. data = resp.json()
  33. if data.get("code") == 200:
  34. import json
  35. return json.dumps(data.get("data", {}), ensure_ascii=False)
  36. return "{}"
  37. except Exception as e:
  38. logger.warning("获取问卷数据失败: %s", e)
  39. return "{}"
  40. @tool
  41. async def get_dimension_scores(family_id: int) -> str:
  42. """获取家庭成员的五维能量分数 (身/心/智/行/富)"""
  43. try:
  44. client = _java
  45. resp = await client._get_client().post(
  46. "/api/dimension/scores",
  47. json={"familyId": family_id},
  48. )
  49. data = resp.json()
  50. if data.get("code") == 200:
  51. import json
  52. return json.dumps(data.get("data", {}), ensure_ascii=False)
  53. return "{}"
  54. except Exception as e:
  55. logger.warning("获取维度分数失败: %s", e)
  56. return "{}"