|
@@ -1,12 +1,14 @@
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
|
from pydantic import BaseModel
|
|
|
from typing import List, Optional, Dict, Any
|
|
|
+
|
|
|
+from ..main import app
|
|
|
from ..model.response import StandardResponse
|
|
|
from ..db.session import get_db
|
|
|
from sqlalchemy.orm import Session
|
|
|
import logging
|
|
|
|
|
|
-from ..server import app
|
|
|
+
|
|
|
from ..service.search_service import SearchBusiness
|
|
|
|
|
|
router = APIRouter(prefix="/medical", tags=["Medical Knowledge API"])
|
|
@@ -23,7 +25,16 @@ class DiseaseInfoRequest(BaseModel):
|
|
|
query: str
|
|
|
type: Optional[str] = None
|
|
|
|
|
|
-@router.post("/symptom_diseases", response_model=StandardResponse)
|
|
|
+@app.post("/symptom_diseases", response_model=StandardResponse, operation_id="症状相关疾病查询", summary="根据症状获取相关疾病列表",
|
|
|
+ description="""根据输入的症状列表,查询可能相关的疾病列表。
|
|
|
+ 该接口主要用于医疗知识图谱查询场景,例如:通过输入症状名称,
|
|
|
+ 返回可能相关的疾病信息。
|
|
|
+ 典型应用场景包括:
|
|
|
+ - 初步诊断:输入患者症状获取可能疾病
|
|
|
+ - 鉴别诊断:通过症状缩小疾病范围
|
|
|
+ - 健康教育:了解症状可能对应的疾病""",
|
|
|
+ response_description="""返回疾病名称的字符串列表,格式为:
|
|
|
+ ["疾病名称1", "疾病名称2", ...]""")
|
|
|
async def get_symptom_diseases(
|
|
|
request: SymptomDiseasesRequest
|
|
|
):
|
|
@@ -36,35 +47,35 @@ async def get_symptom_diseases(
|
|
|
logger.exception(f"获取症状相关疾病失败: {str(e)}")
|
|
|
raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
|
|
|
|
-@app.post("/test", operation_id="医疗知识图谱目标节点查询", summary="根据医疗知识图谱获取医疗相关信息",
|
|
|
- description="""根据三元组的起始节点名称和关系名称,查询目标节点列表。
|
|
|
- 该接口主要用于医疗知识图谱查询场景,例如:通过输入疾病名称和相关关系类型,
|
|
|
- 返回该疾病对应的相关症状、治疗方法等信息。
|
|
|
- 典型应用场景包括:
|
|
|
- - 症状查询:输入疾病名称和"疾病相关症状"关系
|
|
|
- - 诊断依据查询:输入疾病名称和"诊断依据"关系
|
|
|
- - 鉴别诊断查询:输入疾病名称和"疾病相关鉴别诊断"关系""",
|
|
|
- response_description="""返回目标节点名称的字符串列表,格式为:
|
|
|
- ["节点名称1", "节点名称2", ...]""")
|
|
|
-async def test(node_name: str = Query(...,
|
|
|
- description="""知识图谱三元组的起始节点名称,通常是疾病名称。
|
|
|
- 示例值:感冒、高血压、糖尿病等""",
|
|
|
- example="糖尿病"),
|
|
|
- node_category: str = Query(...,
|
|
|
- description="""知识图谱三元组的起始节点类型,通常是疾病。
|
|
|
- 示例值:疾病、症状等""",
|
|
|
- example="疾病"),
|
|
|
- relation_name: str= Query(...,
|
|
|
- description="""知识图谱三元组的关系名称,描述节点间的关系类型。
|
|
|
- 常见关系类型包括:
|
|
|
- - 疾病相关症状
|
|
|
- - 诊断依据
|
|
|
- - 疾病相关鉴别诊断""",
|
|
|
- example="疾病相关症状"),
|
|
|
- db: Session = Depends(get_db)) -> list[str]:
|
|
|
- return None
|
|
|
-
|
|
|
-@app.post("/disease_symptoms",
|
|
|
+# @app.post("/test", operation_id="医疗知识图谱目标节点查询", summary="根据医疗知识图谱获取医疗相关信息",
|
|
|
+# description="""根据三元组的起始节点名称和关系名称,查询目标节点列表。
|
|
|
+# 该接口主要用于医疗知识图谱查询场景,例如:通过输入疾病名称和相关关系类型,
|
|
|
+# 返回该疾病对应的相关症状、治疗方法等信息。
|
|
|
+# 典型应用场景包括:
|
|
|
+# - 症状查询:输入疾病名称和"疾病相关症状"关系
|
|
|
+# - 诊断依据查询:输入疾病名称和"诊断依据"关系
|
|
|
+# - 鉴别诊断查询:输入疾病名称和"疾病相关鉴别诊断"关系""",
|
|
|
+# response_description="""返回目标节点名称的字符串列表,格式为:
|
|
|
+# ["节点名称1", "节点名称2", ...]""")
|
|
|
+# async def test(node_name: str = Query(...,
|
|
|
+# description="""知识图谱三元组的起始节点名称,通常是疾病名称。
|
|
|
+# 示例值:感冒、高血压、糖尿病等""",
|
|
|
+# example="糖尿病"),
|
|
|
+# node_category: str = Query(...,
|
|
|
+# description="""知识图谱三元组的起始节点类型,通常是疾病。
|
|
|
+# 示例值:疾病、症状等""",
|
|
|
+# example="疾病"),
|
|
|
+# relation_name: str= Query(...,
|
|
|
+# description="""知识图谱三元组的关系名称,描述节点间的关系类型。
|
|
|
+# 常见关系类型包括:
|
|
|
+# - 疾病相关症状
|
|
|
+# - 诊断依据
|
|
|
+# - 疾病相关鉴别诊断""",
|
|
|
+# example="疾病相关症状"),
|
|
|
+# db: Session = Depends(get_db)) -> list[str]:
|
|
|
+# return None
|
|
|
+
|
|
|
+@app.post("/disease_symptoms",
|
|
|
response_model=StandardResponse,
|
|
|
operation_id="get_disease_symptoms",
|
|
|
summary="获取疾病相关症状",
|
|
@@ -153,8 +164,8 @@ class SimilarConceptsRequest(BaseModel):
|
|
|
concept_id: str
|
|
|
top_k: int = 5
|
|
|
|
|
|
-@router.post("/search_concept",
|
|
|
- operation_id="医学概念搜索",
|
|
|
+@router.post("/search_concept",
|
|
|
+ operation_id="医学概念搜索",
|
|
|
summary="根据名称和类型搜索医学概念",
|
|
|
description="""根据概念名称和类型搜索医学概念节点。
|
|
|
该接口主要用于医疗知识图谱中的概念搜索场景,例如:
|
|
@@ -190,8 +201,8 @@ async def search_concept(
|
|
|
logger.error(f"搜索医学概念失败: {str(e)}")
|
|
|
raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
|
|
|
|
-@app.post("/get_relations",
|
|
|
- operation_id="医学概念关系查询",
|
|
|
+@app.post("/get_relations",
|
|
|
+ operation_id="医学概念关系查询",
|
|
|
summary="根据概念ID查询相关关系",
|
|
|
description="""根据概念ID查询该概念的相关关系。
|
|
|
该接口主要用于医疗知识图谱中的关系查询场景,例如:
|
|
@@ -228,7 +239,7 @@ async def get_relations(
|
|
|
raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
|
|
|
|
@app.post("/get_similar_concepts", response_model=StandardResponse,
|
|
|
- operation_id="相似概念查询",
|
|
|
+ operation_id="相似概念查询",
|
|
|
summary="根据概念ID查询相似概念",
|
|
|
description="""根据概念ID查询该概念的相似概念。
|
|
|
该接口主要用于医疗知识图谱中的相似概念查询场景,例如:
|