yuchengwei 4 днів тому
батько
коміт
c48c3496d6
1 змінених файлів з 87 додано та 13 видалено
  1. 87 13
      src/knowledge/router/medical_knowledge_api.py

+ 87 - 13
src/knowledge/router/medical_knowledge_api.py

@@ -64,16 +64,19 @@ async def test(node_name: str = Query(...,
                 db: Session = Depends(get_db)) -> list[str]:
     return None
 
-@router.post("/disease_symptoms", response_model=StandardResponse,operation_id="医疗知识图谱目标节点查询", summary="根据医疗知识图谱获取医疗相关信息",
-         description="""根据三元组的起始节点名称和关系名称,查询目标节点列表。
-         该接口主要用于医疗知识图谱查询场景,例如:通过输入疾病名称和相关关系类型,
-         返回该疾病对应的相关症状、治疗方法等信息。
-         典型应用场景包括:
-         - 症状查询:输入疾病名称和"疾病相关症状"关系
-         - 诊断依据查询:输入疾病名称和"诊断依据"关系
-         - 鉴别诊断查询:输入疾病名称和"疾病相关鉴别诊断"关系""",
-         response_description="""返回目标节点名称的字符串列表,格式为:
-         ["节点名称1", "节点名称2", ...]""")
+@app.post("/disease_symptoms", 
+    response_model=StandardResponse,
+    operation_id="get_disease_symptoms",
+    summary="获取疾病相关症状",
+    description="根据疾病ID获取该疾病的所有症状及其严重程度权重",
+    response_description="""返回包含症状列表和症状严重程度权重的JSON结构,格式为:
+    {
+        "success": bool,
+        "data": {
+            {"symptoms": [], "severity_weights": {}}
+        }
+    }"""
+)
 async def get_disease_symptoms(
     request: DiseaseSymptomsRequest
 ):
@@ -150,7 +153,31 @@ class SimilarConceptsRequest(BaseModel):
     concept_id: str
     top_k: int = 5
 
-@router.post("/search_concept", response_model=StandardResponse)
+@router.post("/search_concept", 
+    operation_id="医学概念搜索", 
+    summary="根据名称和类型搜索医学概念",
+    description="""根据概念名称和类型搜索医学概念节点。
+    该接口主要用于医疗知识图谱中的概念搜索场景,例如:
+    - 通过输入疾病名称和类型搜索相关疾病概念
+    - 通过输入症状名称和类型搜索相关症状概念
+    - 通过输入药物名称和类型搜索相关药物概念
+    
+    典型应用场景包括:
+    - 疾病概念搜索
+    - 症状概念搜索
+    - 药物概念搜索""",
+    response_description="""返回标准响应格式,包含匹配的概念列表。
+    格式为:
+    {
+        "success": bool,
+        "data": {
+            "concepts": [
+                {"id": str, "name": str, "type": str}
+            ]
+        }
+    }""",
+    response_model=StandardResponse
+)
 async def search_concept(
     request: ConceptSearchRequest
 ):
@@ -163,7 +190,31 @@ async def search_concept(
         logger.error(f"搜索医学概念失败: {str(e)}")
         raise HTTPException(500, detail=StandardResponse.error(str(e)))
 
-@router.post("/get_relations", response_model=StandardResponse)
+@app.post("/get_relations", 
+    operation_id="医学概念关系查询", 
+    summary="根据概念ID查询相关关系",
+    description="""根据概念ID查询该概念的相关关系。
+    该接口主要用于医疗知识图谱中的关系查询场景,例如:
+    - 通过输入疾病概念ID查询相关症状概念ID
+    - 通过输入症状概念ID查询相关疾病概念ID
+    - 通过输入药物概念ID查询相关治疗方法概念ID
+    
+    典型应用场景包括:
+    - 疾病症状关系查询
+    - 症状疾病关系查询
+    - 药物治疗方法关系查询""",
+    response_description="""返回标准响应格式,包含相关关系列表。
+    格式为:
+    {
+        "success": bool,
+        "data": {
+            "relations": [
+                {"relation_type": str, "target_id": str, "target_name": str}
+            ]
+        }
+    }""",
+    response_model=StandardResponse
+)
 async def get_relations(
     request: ConceptRelationsRequest
 ):
@@ -176,7 +227,30 @@ async def get_relations(
         logger.error(f"获取概念关系失败: {str(e)}")
         raise HTTPException(500, detail=StandardResponse.error(str(e)))
 
-@router.post("/get_similar_concepts", response_model=StandardResponse)
+@app.post("/get_similar_concepts", response_model=StandardResponse,
+    operation_id="相似概念查询", 
+    summary="根据概念ID查询相似概念",
+    description="""根据概念ID查询该概念的相似概念。
+    该接口主要用于医疗知识图谱中的相似概念查询场景,例如:
+    - 通过输入疾病概念ID查询相关症状概念ID
+    - 通过输入症状概念ID查询相关疾病概念ID
+    - 通过输入药物概念ID查询相关治疗方法概念ID
+    
+    典型应用场景包括:
+    - 疾病相似概念查询
+    - 症状相似概念查询
+    - 药物相似概念查询""",
+    response_description="""返回标准响应格式,包含相似概念列表。
+    格式为:
+    {
+        "success": bool,
+        "data": {
+            "similar_concepts": [
+                {"id": str, "name": str, "similarity": str}
+            ]
+        }
+    }""",
+)
 async def get_similar_concepts(
     request: SimilarConceptsRequest
 ):