在线问诊 Python、FastAPI、Neo4j — 提供咨询接口服务

在线,问诊,python,fastapi,neo4j,提供,咨询,接口,服务 · 浏览次数 : 53

小编点评

## 代码简介 这份代码构建了一个名为 `QAService` 的服务层,用于处理聊天机器人与用户的对话。该服务层包含三个主要类: * `QuestionClassifier`:用于处理自然语言分类。 * `QuestionPaser`:用于处理自然语言理解。 * `AnswerSearcher`:用于处理答案搜索。 **主要功能:** * 用户通过 API 发送问题,服务层将问题分类、解析和搜索答案。 * 针对不同的问题类型,服务层返回不同的回答。 ## 代码结构 该代码使用 `FastAPI` 库构建服务接口。 * `qa_service.py` 包含了 `QAService` 的实现。 * `qa_router.py` 包含了 `get_search` 方法,这是 PostMan 调用接口的入口点。 ## 代码说明 * `item` 是一个用于描述请求参数的类。 * `get_search` 方法接受一个 `Item` 对象作为参数,并返回一个 JSON 格式的响应。 * 响应中包含以下信息: * `answer`:处理的结果 * `status_code`: HTTP 响应状态码 ## 示例 `qa_router.py` 中的 `get_search` 方法展示了如何接收请求参数并返回响应: ```python @qa.post("/consult")async def get_search(param: Item): answer = qa.chat_main(param.question) return JSONResponse(content=answer, status_code=status.HTTP_200_OK) ``` **总结** 该代码展示了如何使用 `FastAPI` 创建一个服务层,并通过 API 提供聊天机器人与用户的对话服务。

正文

采用 Fast API 搭建服务接口: https://www.cnblogs.com/vipsoft/p/17684079.html
Fast API 文档:https://fastapi.tiangolo.com/zh/

构建服务层

qa_service.py

from service.question_classifier import *
from service.question_parser import *
from service.answer_search import *


class QAService:
    def __init__(self):
        self.classifier = QuestionClassifier()
        self.parser = QuestionPaser()
        self.searcher = AnswerSearcher()

    def chat_main(self, sent):
        answer = '您的问题,我还没有学习到。祝您身体健康!'
        res_classify = self.classifier.classify(sent)
        if not res_classify:
            return answer
        res_sql = self.parser.parser_main(res_classify)
        final_answers = self.searcher.search_main(res_sql)
        if not final_answers:
            return answer
        else:
            return '\n'.join(final_answers)

同时将 answer_search.pyquestion_classifier.pyquestion_parser.py 从test 目录中,移到 service 包中
image

QuestionClassifier 中的 路径获取方式进行修改 ../dic/xxxx 替换为 dic/xxx
image

接口路由层

FastAPI 请求体:https://fastapi.tiangolo.com/zh/tutorial/body/
创建路由接口文件
qa_router.py

#!/usr/bin/python3

import logging
from fastapi import APIRouter, status
from fastapi.responses import JSONResponse
from pydantic import BaseModel
from service.qa_service import QAService
import json

router = APIRouter()
qa = QAService() #实类化 QAService 服务


class Item(BaseModel):
    name: str = None
    question: str


@router.post("/consult")
async def get_search(param: Item):
    answer = qa.chat_main(param.question)
    return JSONResponse(content=answer, status_code=status.HTTP_200_OK)

PostMan 调用

URL: http://127.0.0.1:8000/api/qa/consult

{"question": "请问最近看东西有时候清楚有时候不清楚是怎么回事"}

返回值:
"可能是:干眼"
image

image
image

源代:https://gitee.com/VipSoft/VipQA

参考:https://github.com/liuhuanyong/QASystemOnMedicalKG

与在线问诊 Python、FastAPI、Neo4j — 提供咨询接口服务相似的内容:

在线问诊 Python、FastAPI、Neo4j — 提供咨询接口服务

目录构建服务层接口路由层PostMan 调用 采用 Fast API 搭建服务接口: https://www.cnblogs.com/vipsoft/p/17684079.html Fast API 文档:https://fastapi.tiangolo.com/zh/ 构建服务层 qa_servi

在线问诊 Python、FastAPI、Neo4j — 创建症状节点

目录症状数据创建节点附学习 电子病历中,患者主诉对应的相关检查,得出的诊断以及最后的用药情况。症状一般可以从主诉中提取。 症状数据 symptom_data.csv CSV 中,没有直接一行一个症状,主要想后面将 症状 => 疾病 做关联,最后会在一个 Excel 中表达 所以每行实际对应一个症病,

在线问诊 Python、FastAPI、Neo4j — 创建药品节点

目录前提条件创建节点 Demo准备数据创建药品标签节点 在线问诊 Python、FastAPI、Neo4j — 创建节点 Neo4j 节点的标签可以理解为 Java 中的实体。 根据常规流程:首先有什么症状,做哪些对应的检查,根据检查诊断什么疾病,需要用什么药物治疗,服药期间要注意哪些饮食,需要做哪

在线问诊 Python、FastAPI、Neo4j — 创建 检查节点

目录检查数据创建节点 根据不同的症状,会建议做些相对应的检验、检查 检查数据 examine_data.csv 建议值用“”引起来。避免中间有,号造成误识别 检查 "膝关节核磁" "眼睛酸胀" "视力" "砂眼" "辨色力" "角膜" "眼底" 创建节点 参考 创建药品 节点。 import log

在线问诊 Python、FastAPI、Neo4j — 创建 饮食节点

目录饮食数据创建节点 根据疾病、症状,判断出哪些饮食不能吃,哪些建议多吃 饮食数据 foods_data.csv 建议值用“”引起来。避免中间有,号造成误识别 饮食 "辣椒" "大蒜" "芥末" "海鲜" "胡萝卜" "核桃仁" "菠菜" "西红柿" "香蕉" 创建节点 重构代码,将 def exe

在线问诊 Python、FastAPI、Neo4j — 创建 节点关系

目录关系:症状-检查关系:疾病-症状代码重构 relationship_data.csv 症状,检查,疾病,药品,宜吃,忌吃 "上下楼梯疼,不能久站,感觉有点肿","膝关节核磁","右膝髌上囊及关节腔少量积液","扶他林","西红柿,香蕉","辣椒,大蒜" "眼睛胀痛,干涩,畏光,眼胀,眼痛,看东西

在线问诊 Python、FastAPI、Neo4j — 问题咨询

目录查出节点拼接节点属性测试结果问答演示 通过节点关系,找出对应的节点,获取节点属性值,并拼接成想要的结果。 接上节生成的CQL # 输入 question_class = {'args': {'看东西有时候清楚有时候不清楚': ['symptom']}, 'question_types': ['s

在线问诊 Python、FastAPI、Neo4j — 生成 Cypher 语句

目录构建节点字典构建Cypher CQL语句Test 这边只是为了测试,演示效果和思路,实际应用中,可以通过NLP构建CQL 接上一篇的问题分类 question = "请问最近看东西有时候清楚有时候不清楚是怎么回事" # 最终输出 data = {'args': {'看东西有时候清楚有时候不清楚'

在线问诊 Python、FastAPI、Neo4j — 构建问题分类器

目录构建字典数据构建 Trie 字典树按实体组装字典问题分析 将问题进行分析,和系统已有的分类进行关联 构建字典数据 将构建的知识图片字典化, 用于后面对问题的解析,下图为症状的字典,其它字典同理 构建 Trie 字典树 将建字典数据,组装集合 cur_dir = '/'.join(os.path.

在线问诊 Python、FastAPI、Neo4j — 创建 疾病节点

目录疾病数据创建节点 根据检查结果、医生的临床经验得出疾病 疾病数据 disease_data.csv 建议值用“”引起来。避免中间有,号造成误识别 疾病 "干眼" "右膝髌上囊及关节腔少量积液" 创建节点 import logging import pandas as pd from utils.