12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import sys,os
- from agent.cdss.capbility import CDSSCapability
- from agent.cdss.models.schemas import CDSSInput, CDSSInt, CDSSText
- from model.response import StandardResponse
- 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="/graph", tags=["Knowledge Graph"])
- @router.get("/nodes/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, chief)
- 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("/nodes/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,
- limit: int = Query(10, ge=1, le=100),
- node_type: Optional[str] = Query(None),
- neighbor_type: Optional[str] = Query(None),
- min_degree: Optional[int] = Query(None)
- ):
- """
- 根据关键词和属性过滤条件搜索图谱节点
- """
- try:
- print(f"开始执行neighbor_search,参数:keyword={keyword}, limit={limit}, node_type={node_type}, neighbor_type={neighbor_type}, min_degree={min_degree}")
- 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,"old_score":value["old_score"],"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,"就诊科室":output.departments.value}
- )
- except Exception as e:
- print(e)
- raise e
- return StandardResponse(
- success=False,
- error_code=500,
- error_msg=str(e)
- )
- capability = CDSSCapability()
- #def get_capability():
- #from main import capability
- #return capability
- graph_router = router
|