import logging import sys,os import traceback from agent.cdss.capbility import CDSSCapability from agent.cdss.models.schemas import CDSSInput, CDSSInt, CDSSText from model.response import StandardResponse from service.cdss_service import CdssService from service.kg_node_service import KGNodeService current_path = os.getcwd() sys.path.append(current_path) import time from fastapi import APIRouter, Depends, Query from typing import Optional, List import sys sys.path.append('..') from utils.agent import call_chat_api,get_conversation_id import json router = APIRouter(prefix="/disease", tags=["Knowledge Graph"]) logger = logging.getLogger(__name__) @router.get("/recommend", response_model=StandardResponse) async def recommend( chief: str, present_illness: Optional[str] = None, sex: Optional[str] = None, age: Optional[int] = None, department: Optional[str] = None, ): start_time = time.time() app_id = "256fd853-60b0-4357-b11b-8114b4e90ae0" conversation_id = get_conversation_id(app_id) desc = "主诉:"+chief if present_illness: desc+="\n现病史:" + present_illness result = call_chat_api(app_id, conversation_id, desc) json_data = json.loads(result) keyword = " ".join(json_data["symptoms"]) result = await neighbor_search(keyword=keyword,sex=sex,age=age, neighbor_type='Check', limit=10) end_time = time.time() print(f"recommend执行完成,耗时:{end_time - start_time:.2f}秒") return result; @router.get("/neighbor_search", response_model=StandardResponse) async def neighbor_search( keyword: str = Query(..., min_length=2), sex: Optional[str] = None, age: Optional[int] = None, department: Optional[str] = None ): """ 根据关键词和属性过滤条件搜索图谱节点 """ try: keywords = keyword.split(" ") record = CDSSInput( pat_age=CDSSInt(type="month", value=age), pat_sex=CDSSText(type="sex", value=sex), chief_complaint=keywords, department=CDSSText(type='department', value=department) ) # 使用从main.py导入的capability实例处理CDSS逻辑 output = capability.process(input=record) output.diagnosis.value = [{"name":key,"count":value["count"],"score":value["score"],"symptoms":value["symptoms"], #"hasInfo": 1, #"type": 1 } for key,value in output.diagnosis.value.items()] return StandardResponse( success=True, data={"可能诊断":output.diagnosis.value,"症状":keywords} ) except Exception as e: traceback.print_exc() logger.error(f"get_disease_detail failed: {str(e)}") return StandardResponse( success=False, errorCode=500, errorMsg=str(e) ) @router.get("/{disease_name}/detail", response_model=StandardResponse) async def get_disease_detail( disease_name: str ): try: service = CdssService() result = service.get_disease_detail(disease_name,'疾病') return StandardResponse(success=True, data=result) except Exception as e: traceback.print_exc() logger.error(f"get_disease_detail failed: {str(e)}") return StandardResponse( success=False, errorCode=500, errorMsg=str(e) ) capability = CDSSCapability() graph_router = router