capbility.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import time
  2. from agent.cdss.models.schemas import CDSSDict, CDSSInput,CDSSInt,CDSSOutput,CDSSText
  3. from agent.cdss.libs.cdss_helper2 import CDSSHelper
  4. import logging
  5. logger = logging.getLogger(__name__)
  6. class CDSSCapability:
  7. cdss_helper: CDSSHelper = None
  8. def __init__(self):
  9. #self.cdss_helper = CDSSHelper()
  10. self.cdss_helper = None
  11. logger.debug("CDSSCapability initialized")
  12. def process(self, input: CDSSInput, embeding_search:bool = True) -> CDSSOutput:
  13. start_nodes = []
  14. chief_complaint = input.get_value("chief_complaint")
  15. logger.info(f"process input: {input}")
  16. output = CDSSOutput()
  17. if chief_complaint:
  18. start_time = time.time()
  19. for keyword in chief_complaint:
  20. results = self.cdss_helper.node_search(
  21. keyword, limit=10, node_type="症状"
  22. )
  23. for item in results:
  24. if item['score']>1.9:
  25. start_nodes.append(item['id'])
  26. end_time = time.time()
  27. print(f"node_search执行完成,耗时:{end_time - start_time:.2f}秒")
  28. logger.info(f"cdss start from {start_nodes}")
  29. result = self.cdss_helper.cdss_travel(input, start_nodes,max_hops=2)
  30. # for item in result["details"]:
  31. # name, data = item
  32. # output.departments.value[name] = data
  33. for item in result["score_diags"]:
  34. output.diagnosis.value[item[0]] = item[1]
  35. # for item in result["checks"][:5]:
  36. # item[1]['score'] = item[1]['count'] / result["total_checks"]
  37. # output.checks.value[item[0]] = item[1]
  38. # for item in result["drugs"][:5]:
  39. # item[1]['score'] = item[1]['count'] / result["total_checks"]
  40. # output.drugs.value[item[0]] = item[1]
  41. #print(f"\t药品:{item[0]} {item[1]['count'] / result["total_drugs"] * 100:.2f} %")
  42. return output