CodeDuoGun/ai_doctor

refer to cyber_doctor and devlop own project

3

stars

17

commits

Python

primary language

Mar 25, 2026

updated

README

🏥 AI Doctor - 智能医疗数字人平台

基于多模态AI的智能医疗助手系统,专注于中医处方录入、病历管理和医患交互

Python License Platform

📋 目录


项目简介

AI Doctor 是一个集成了语音识别自然语言处理知识图谱数字人交互的智能医疗平台。系统特别针对中医处方录入场景进行了深度优化,支持实时语音转文字、智能药材识别、剂量标准化等功能。

🎯 应用场景

  • 中医诊所:语音录入处方,自动生成结构化处方单
  • 医患咨询:智能问答,提供医学知识解答
  • 报告解读:上传检查报告,AI自动解读分析
  • 病历管理:自动生成电子病历,管理患者档案
  • 远程医疗:数字人视频交互,提供远程咨询服务

✨ 核心优势

特性说明
🎙️ 专业ASR针对中医场景优化,11,000+中草药热词库
🧠 智能纠错基于拼音相似度的药材名称自动纠错
📊 结构化输出自动提取药材、剂量、单位,生成标准处方
💬 多模态交互支持文本、语音、图片、视频输入
🤖 数字人Wav2Lip唇形同步,真实感强
🔍 知识增强RAG检索 + 知识图谱,回答更准确

核心功能

1️⃣ 实时语音识别(ASR)

特色功能

# 输入:语音 "三七十五克,黄芪二十克,党参十五克"
# 输出:三七15g,黄芪20g,党参15g

技术亮点

  • ✅ 中文数字智能转换(十五 → 15)
  • ✅ 药材名称拼音纠错(断信石 → 锻信石)
  • ✅ 单位自动标准化(克 → g,毫克 → mg)
  • ✅ 特殊药材优先匹配(三七、五味子等)
  • ✅ 实时流式识别,低延迟

支持的ASR引擎

  • 阿里云 FunASR:离线识别,隐私保护
  • 阿里云实时ASR:云端识别,准确率高
  • 自定义热词:动态加载领域词库

2️⃣ 智能对话系统

  • 会话管理:支持多会话并发,自动保存历史
  • 上下文理解:记忆患者信息,连续对话
  • 多轮交互:支持追问、澄清、确认
  • 情感识别:理解患者情绪,给予适当回应

3️⃣ 医学报告解读

支持格式:JPG, PNG, PDF
识别内容:血常规、尿常规、CT、MRI、X光片等
输出内容:指标解读、异常提示、健康建议

技术方案

  • OCR文字提取(PaddleOCR)
  • 多模态大模型理解(GPT-4V / Qwen-VL)
  • 医学知识库匹配

4️⃣ 电子病历生成

自动生成结构化病历,包含:

  • 主诉、现病史、既往史
  • 体格检查、辅助检查
  • 诊断、处方、医嘱

5️⃣ 数字人交互

  • TTS语音合成:多种音色可选
  • Wav2Lip唇形同步:口型与语音精准匹配
  • 实时视频流:WebRTC低延迟传输
  • 形象管理:可配置不同数字人形象

技术架构

系统架构图

┌─────────────────────────────────────────────────────────┐
│                      前端层 (React)                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────┐ │
│  │ 语音输入 │  │ 文本输入 │  │ 图片上传 │  │ 视频流  │ │
│  └──────────┘  └──────────┘  └──────────┘  └─────────┘ │
└────────────────────────┬────────────────────────────────┘
                         │ WebSocket
┌────────────────────────▼────────────────────────────────┐
│                   WebSocket服务层                        │
│  ┌──────────────────────────────────────────────────┐   │
│  │  会话管理 │ 消息路由 │ 状态同步 │ 连接池管理    │   │
│  └──────────────────────────────────────────────────┘   │
└────────────────────────┬────────────────────────────────┘
                         │
┌────────────────────────▼────────────────────────────────┐
│                      业务逻辑层                          │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────┐ │
│  │ ASR模块  │  │ NLP模块  │  │ TTS模块  │  │ 数字人  │ │
│  └──────────┘  └──────────┘  └──────────┘  └─────────┘ │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐              │
│  │ RAG检索  │  │ 知识图谱 │  │ 病历管理 │              │
│  └──────────┘  └──────────┘  └──────────┘              │
└────────────────────────┬────────────────────────────────┘
                         │
┌────────────────────────▼────────────────────────────────┐
│                      AI模型层                            │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────┐ │
│  │  FunASR  │  │ GPT-4/5  │  │  Qwen    │  │ Wav2Lip │ │
│  └──────────┘  └──────────┘  └──────────┘  └─────────┘ │
└─────────────────────────────────────────────────────────┘

核心模块

ai_doctor/
├── 🎙️ asr/                    # 语音识别
│   ├── AliRealtime_ASR.py     # 阿里云实时ASR
│   ├── FunASR.py              # FunASR离线
│   ├── RealtimeFunASR.py      # FunASR实时
│   └── utils/
│       └── asr_postprocessor.py  # 中医处方后处理 ⭐
│
├── 💬 chat_manager/           # 对话管理
│   ├── chat_instance.py       # 会话实例
│   ├── asr_task.py            # ASR任务
│   ├── nlp_task.py            # NLP任务
│   └── tts_task.py            # TTS任务
│
├── 🤖 llm/                    # 大模型集成
│   ├── ChatGPT.py             # OpenAI
│   ├── Qwen.py                # 通义千问
│   ├── Gemini.py              # Google
│   └── VllmGPT.py             # vLLM推理
│
├── 🔍 rag/                    # 检索增强
│   ├── rag_chain.py           # RAG链路
│   └── retrieve/              # 检索器
│
├── 🧠 kg/                     # 知识图谱
│   └── Graph.py               # Neo4j
│
├── 🎬 model/                  # AI模型
│   ├── RAG/                   # 向量模型
│   ├── KG/                    # 图谱模型
│   └── wav2lip/               # 唇形同步
│
├── 🌐 webdemo_medical/        # Web前端
│   └── react/                 # React应用
│
└── 📊 data/                   # 数据资源
    ├── 医保中草药数据_共11071条.csv
    ├── 吴卫平处方数据.xlsx
    └── medical_books/         # 医学书籍

快速开始

环境准备

系统要求

  • macOS 10.15+ / Ubuntu 18.04+
  • Python 3.8+
  • Node.js 16+ (前端开发)
  • 8GB+ RAM

可选组件

  • Neo4j 4.0+ (知识图谱)
  • CUDA 11.0+ (GPU加速)

安装步骤

1. 克隆项目

git clone https://github.com/your-repo/ai_doctor.git
cd ai_doctor

2. 创建虚拟环境

python -m venv venv
source venv/bin/activate  # macOS/Linux
# venv\Scripts\activate   # Windows

3. 安装依赖

pip install -r requirements.txt

4. 配置环境变量

复制并编辑配置文件:

cp .env.example .env

编辑 .env

# 阿里云ASR
ALIYUN_ASR_TOKEN=your_token_here
ALIYUN_ASR_APPKEY=your_appkey_here

# LLM API
DASHSCOPE_API_KEY=sk-xxx  # 通义千问
DEEPSEEK_API_KEY=sk-xxx   # DeepSeek
OPENIAI_API_KEY=sk-xxx    # OpenAI

# 服务配置
ASR_SERVER_HOST=0.0.0.0
ASR_SERVER_PORT=50007
WS_PORT=8081
HTTP_PORT=8080

5. 启动服务

方式一:启动完整服务(推荐)

python webdemo_medical_server.py

访问:http://localhost:8080

方式二:启动独立ASR服务

python server.py

WebSocket地址:ws://localhost:50007

方式三:启动Gradio演示

python app.py

使用文档

语音处方录入示例

Python调用

from asr.RealtimeFunASR import RealtimeFunASR
from asr.utils.asr_postprocessor import postprocess_asr

# 初始化ASR
asr = RealtimeFunASR()

# 识别音频
raw_text = asr.recognize("audio.wav")
print(f"原始识别: {raw_text}")
# 输出: "三七十五克黄芪二十克党参十五克"

# 后处理
processed = postprocess_asr(raw_text)
print(f"处理结果: {processed}")
# 输出: "三七15g,黄芪20g,党参15g"

处理流程

原始语音
    ↓
[ASR识别] → "三七十五克黄芪二十克"
    ↓
[标点切分] → ["三七十五克", "黄芪二十克"]
    ↓
[中文数字转换] → ["三七15克", "黄芪20克"]
    ↓
[药材名称纠错] → ["三七15克", "黄芪20克"]
    ↓
[单位标准化] → ["三七15g", "黄芪20g"]
    ↓
[结构化输出] → "三七15g,黄芪20g"

自定义热词

编辑 asr/hotwords.txt,每行一个词:

三七
黄芪
党参
当归
川芎

重新生成热词文件:

python asr/gen_hotwords.py

API接口

WebSocket API

连接

const ws = new WebSocket('ws://localhost:8081');

ws.onopen = () => {
  console.log('连接成功');
};

消息格式

1. 文本消息

{
  "type": "text",
  "content": "我最近头疼,怎么办?",
  "session_id": "session_123"
}

2. 音频数据

{
  "type": "audio",
  "data": "base64_encoded_pcm_data",
  "format": "pcm",
  "sample_rate": 16000,
  "session_id": "session_123"
}

3. 图片上传

{
  "type": "image",
  "data": "base64_encoded_image",
  "filename": "report.jpg",
  "session_id": "session_123"
}

响应格式

1. ASR识别结果

{
  "type": "asr_result",
  "text": "三七15g,黄芪20g",
  "is_final": true,
  "timestamp": "2026-02-26T10:30:00Z"
}

2. LLM回复

{
  "type": "llm_response",
  "content": "根据您的症状,建议...",
  "session_id": "session_123"
}

3. TTS音频

{
  "type": "tts_audio",
  "audio_data": "base64_encoded_audio",
  "format": "mp3"
}

REST API(规划中)

# 获取会话历史
GET /api/sessions/{session_id}/history

# 上传报告
POST /api/reports/upload

# 生成病历
POST /api/emr/generate

配置指南

ASR配置

1. 修改热词库

编辑 asr/hotwords.txt,添加自定义词汇。

2. 调整纠错规则

编辑 asr/utils/asr_postprocessor.py

# 添加混淆词纠错
CONFUSION_MAP = {
    "断信时": "锻信石",
    "断信石": "锻信石",
    "时刻": "10克",
    # 添加你的规则
    "你的错误": "正确词汇",
}

3. 调整匹配阈值

# 拼音相似度阈值(默认85)
if score >= 85:  # 降低阈值会增加召回,但可能误匹配
    best_herb = herb

LLM配置

切换模型

编辑 config/config.yaml

default:
  # 通义千问
  DASHSCOPE_API_KEY: sk-xxx
  DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com/compatible-mode/v1
  
  # DeepSeek
  DEEPSEEK_API_KEY: sk-xxx
  DEEPSEEK_API_URL: https://api.deepseek.com/v1
  
  # OpenAI
  OPENIAI_API_KEY: sk-xxx
  OPENIAI_BASE_URL: https://api.openai.com

使用示例

from client.clientfactory import ClientFactory

# 创建客户端
client = ClientFactory.create_client("qwen")  # qwen/deepseek/openai

# 调用
response = client.chat("你好")
print(response)

知识图谱配置

安装Neo4j后,配置连接:

# kg/Graph.py
NEO4J_URI = "bolt://localhost:7687"
NEO4J_USER = "neo4j"
NEO4J_PASSWORD = "your_password"

开发路线

✅ 已完成

  • 实时语音识别(FunASR + 阿里云)
  • 中医处方后处理(中文数字转换、药材纠错)
  • WebSocket实时通信
  • 多模态输入(文本、语音、图片)
  • 医学报告解读
  • 会话管理
  • 音频文件落盘

🚧 进行中

  • 前端React应用完善
  • 数字人视频流优化
  • 处方结构化提取增强
  • 病历模板系统

📅 计划中

Q2 2026

  • 数字人摄像头人脸识别
  • 医患记录管理系统
  • 数字人形象/音色切换
  • 完整的管理后台

Q3 2026

  • 移动端适配
  • 多语言支持
  • 病种知识库扩充
  • 单元测试覆盖率 > 80%

Q4 2026

  • 云端部署方案
  • 性能优化(支持1000+并发)
  • 数据分析看板
  • API文档完善

🧪 测试

运行测试

# 测试ASR
python tests/test_asr.py

# 测试阿里云SDK
python tests/test_ali_sdk_asr.py

# 测试报告解读
python tests/test_report_explaination.py

# 测试RAG检索
python tests/test_analyze_es.py

测试用例

# tests/test_asr_postprocessor.py
from asr.utils.asr_postprocessor import postprocess_asr

def test_chinese_number_conversion():
    assert postprocess_asr("三七十五克") == "三七15g"
    assert postprocess_asr("黄芪二十克") == "黄芪20g"

def test_herb_correction():
    assert postprocess_asr("断信石") == "锻信石"

📚 数据说明

中草药数据

文件data/医保中草药数据_共11071条.csv

字段

  • 名称:药材中文名
  • 拼音:药材拼音
  • 功效:药材功效
  • 用法用量:推荐剂量

用途

  • ASR热词库
  • 药材名称纠错
  • 剂量合理性检查

处方数据

文件data/吴卫平处方数据.xlsx

内容:真实中医处方案例,用于训练和测试

训练数据

HuatuoGPT数据集HuatuoGPT-sft-data-v1/

  • 医学问答对
  • 病历样本
  • 诊断推理

🛠️ 技术栈

后端技术

类别技术
语言Python 3.8+
异步框架asyncio, websockets
ASRFunASR, 阿里云NLS SDK
LLMOpenAI GPT, 通义千问, DeepSeek
TTSEdge-TTS
向量检索FAISS
知识图谱Neo4j, py2neo
OCRPaddleOCR
音频处理PyAudio, soundfile

前端技术

类别技术
框架React 18
状态管理待定
UI组件待定
通信WebSocket
音频Web Audio API

AI模型

功能模型
语音识别FunASR (ModelScope)
语言理解GPT-4, Qwen-Max, DeepSeek
图像理解GPT-4V, Qwen-VL
语音合成Edge-TTS
唇形同步Wav2Lip
向量嵌入BGE, CLIP

🤝 贡献指南

欢迎贡献代码、提交Issue或改进文档!

贡献流程

  1. Fork本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交Pull Request

代码规范

  • 遵循PEP 8
  • 添加必要的注释和文档字符串
  • 编写单元测试
  • 提交前运行 blackflake8

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件


⚠️ 免责声明

本项目仅供学习研究使用,不得用于实际医疗诊断。

  • ❌ 本系统不能替代专业医生的诊断和治疗
  • ❌ 任何医疗决策请咨询有资质的医疗机构和医生
  • ❌ 使用本系统产生的任何后果由使用者自行承担

📧 联系我们


如果这个项目对你有帮助,请给个 ⭐️ Star!

Made with ❤️ by AI Doctor Team

Contributors

CodeDuoGun

17 commits

CodeDuoGun/ai_doctor

refer to cyber_doctor and devlop own project

3

stars

17

commits

Python

primary language

Mar 25, 2026

updated

README

🏥 AI Doctor - 智能医疗数字人平台

基于多模态AI的智能医疗助手系统,专注于中医处方录入、病历管理和医患交互

Python License Platform

📋 目录


项目简介

AI Doctor 是一个集成了语音识别自然语言处理知识图谱数字人交互的智能医疗平台。系统特别针对中医处方录入场景进行了深度优化,支持实时语音转文字、智能药材识别、剂量标准化等功能。

🎯 应用场景

  • 中医诊所:语音录入处方,自动生成结构化处方单
  • 医患咨询:智能问答,提供医学知识解答
  • 报告解读:上传检查报告,AI自动解读分析
  • 病历管理:自动生成电子病历,管理患者档案
  • 远程医疗:数字人视频交互,提供远程咨询服务

✨ 核心优势

特性说明
🎙️ 专业ASR针对中医场景优化,11,000+中草药热词库
🧠 智能纠错基于拼音相似度的药材名称自动纠错
📊 结构化输出自动提取药材、剂量、单位,生成标准处方
💬 多模态交互支持文本、语音、图片、视频输入
🤖 数字人Wav2Lip唇形同步,真实感强
🔍 知识增强RAG检索 + 知识图谱,回答更准确

核心功能

1️⃣ 实时语音识别(ASR)

特色功能

# 输入:语音 "三七十五克,黄芪二十克,党参十五克"
# 输出:三七15g,黄芪20g,党参15g

技术亮点

  • ✅ 中文数字智能转换(十五 → 15)
  • ✅ 药材名称拼音纠错(断信石 → 锻信石)
  • ✅ 单位自动标准化(克 → g,毫克 → mg)
  • ✅ 特殊药材优先匹配(三七、五味子等)
  • ✅ 实时流式识别,低延迟

支持的ASR引擎

  • 阿里云 FunASR:离线识别,隐私保护
  • 阿里云实时ASR:云端识别,准确率高
  • 自定义热词:动态加载领域词库

2️⃣ 智能对话系统

  • 会话管理:支持多会话并发,自动保存历史
  • 上下文理解:记忆患者信息,连续对话
  • 多轮交互:支持追问、澄清、确认
  • 情感识别:理解患者情绪,给予适当回应

3️⃣ 医学报告解读

支持格式:JPG, PNG, PDF
识别内容:血常规、尿常规、CT、MRI、X光片等
输出内容:指标解读、异常提示、健康建议

技术方案

  • OCR文字提取(PaddleOCR)
  • 多模态大模型理解(GPT-4V / Qwen-VL)
  • 医学知识库匹配

4️⃣ 电子病历生成

自动生成结构化病历,包含:

  • 主诉、现病史、既往史
  • 体格检查、辅助检查
  • 诊断、处方、医嘱

5️⃣ 数字人交互

  • TTS语音合成:多种音色可选
  • Wav2Lip唇形同步:口型与语音精准匹配
  • 实时视频流:WebRTC低延迟传输
  • 形象管理:可配置不同数字人形象

技术架构

系统架构图

┌─────────────────────────────────────────────────────────┐
│                      前端层 (React)                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────┐ │
│  │ 语音输入 │  │ 文本输入 │  │ 图片上传 │  │ 视频流  │ │
│  └──────────┘  └──────────┘  └──────────┘  └─────────┘ │
└────────────────────────┬────────────────────────────────┘
                         │ WebSocket
┌────────────────────────▼────────────────────────────────┐
│                   WebSocket服务层                        │
│  ┌──────────────────────────────────────────────────┐   │
│  │  会话管理 │ 消息路由 │ 状态同步 │ 连接池管理    │   │
│  └──────────────────────────────────────────────────┘   │
└────────────────────────┬────────────────────────────────┘
                         │
┌────────────────────────▼────────────────────────────────┐
│                      业务逻辑层                          │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────┐ │
│  │ ASR模块  │  │ NLP模块  │  │ TTS模块  │  │ 数字人  │ │
│  └──────────┘  └──────────┘  └──────────┘  └─────────┘ │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐              │
│  │ RAG检索  │  │ 知识图谱 │  │ 病历管理 │              │
│  └──────────┘  └──────────┘  └──────────┘              │
└────────────────────────┬────────────────────────────────┘
                         │
┌────────────────────────▼────────────────────────────────┐
│                      AI模型层                            │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────┐ │
│  │  FunASR  │  │ GPT-4/5  │  │  Qwen    │  │ Wav2Lip │ │
│  └──────────┘  └──────────┘  └──────────┘  └─────────┘ │
└─────────────────────────────────────────────────────────┘

核心模块

ai_doctor/
├── 🎙️ asr/                    # 语音识别
│   ├── AliRealtime_ASR.py     # 阿里云实时ASR
│   ├── FunASR.py              # FunASR离线
│   ├── RealtimeFunASR.py      # FunASR实时
│   └── utils/
│       └── asr_postprocessor.py  # 中医处方后处理 ⭐
│
├── 💬 chat_manager/           # 对话管理
│   ├── chat_instance.py       # 会话实例
│   ├── asr_task.py            # ASR任务
│   ├── nlp_task.py            # NLP任务
│   └── tts_task.py            # TTS任务
│
├── 🤖 llm/                    # 大模型集成
│   ├── ChatGPT.py             # OpenAI
│   ├── Qwen.py                # 通义千问
│   ├── Gemini.py              # Google
│   └── VllmGPT.py             # vLLM推理
│
├── 🔍 rag/                    # 检索增强
│   ├── rag_chain.py           # RAG链路
│   └── retrieve/              # 检索器
│
├── 🧠 kg/                     # 知识图谱
│   └── Graph.py               # Neo4j
│
├── 🎬 model/                  # AI模型
│   ├── RAG/                   # 向量模型
│   ├── KG/                    # 图谱模型
│   └── wav2lip/               # 唇形同步
│
├── 🌐 webdemo_medical/        # Web前端
│   └── react/                 # React应用
│
└── 📊 data/                   # 数据资源
    ├── 医保中草药数据_共11071条.csv
    ├── 吴卫平处方数据.xlsx
    └── medical_books/         # 医学书籍

快速开始

环境准备

系统要求

  • macOS 10.15+ / Ubuntu 18.04+
  • Python 3.8+
  • Node.js 16+ (前端开发)
  • 8GB+ RAM

可选组件

  • Neo4j 4.0+ (知识图谱)
  • CUDA 11.0+ (GPU加速)

安装步骤

1. 克隆项目

git clone https://github.com/your-repo/ai_doctor.git
cd ai_doctor

2. 创建虚拟环境

python -m venv venv
source venv/bin/activate  # macOS/Linux
# venv\Scripts\activate   # Windows

3. 安装依赖

pip install -r requirements.txt

4. 配置环境变量

复制并编辑配置文件:

cp .env.example .env

编辑 .env

# 阿里云ASR
ALIYUN_ASR_TOKEN=your_token_here
ALIYUN_ASR_APPKEY=your_appkey_here

# LLM API
DASHSCOPE_API_KEY=sk-xxx  # 通义千问
DEEPSEEK_API_KEY=sk-xxx   # DeepSeek
OPENIAI_API_KEY=sk-xxx    # OpenAI

# 服务配置
ASR_SERVER_HOST=0.0.0.0
ASR_SERVER_PORT=50007
WS_PORT=8081
HTTP_PORT=8080

5. 启动服务

方式一:启动完整服务(推荐)

python webdemo_medical_server.py

访问:http://localhost:8080

方式二:启动独立ASR服务

python server.py

WebSocket地址:ws://localhost:50007

方式三:启动Gradio演示

python app.py

使用文档

语音处方录入示例

Python调用

from asr.RealtimeFunASR import RealtimeFunASR
from asr.utils.asr_postprocessor import postprocess_asr

# 初始化ASR
asr = RealtimeFunASR()

# 识别音频
raw_text = asr.recognize("audio.wav")
print(f"原始识别: {raw_text}")
# 输出: "三七十五克黄芪二十克党参十五克"

# 后处理
processed = postprocess_asr(raw_text)
print(f"处理结果: {processed}")
# 输出: "三七15g,黄芪20g,党参15g"

处理流程

原始语音
    ↓
[ASR识别] → "三七十五克黄芪二十克"
    ↓
[标点切分] → ["三七十五克", "黄芪二十克"]
    ↓
[中文数字转换] → ["三七15克", "黄芪20克"]
    ↓
[药材名称纠错] → ["三七15克", "黄芪20克"]
    ↓
[单位标准化] → ["三七15g", "黄芪20g"]
    ↓
[结构化输出] → "三七15g,黄芪20g"

自定义热词

编辑 asr/hotwords.txt,每行一个词:

三七
黄芪
党参
当归
川芎

重新生成热词文件:

python asr/gen_hotwords.py

API接口

WebSocket API

连接

const ws = new WebSocket('ws://localhost:8081');

ws.onopen = () => {
  console.log('连接成功');
};

消息格式

1. 文本消息

{
  "type": "text",
  "content": "我最近头疼,怎么办?",
  "session_id": "session_123"
}

2. 音频数据

{
  "type": "audio",
  "data": "base64_encoded_pcm_data",
  "format": "pcm",
  "sample_rate": 16000,
  "session_id": "session_123"
}

3. 图片上传

{
  "type": "image",
  "data": "base64_encoded_image",
  "filename": "report.jpg",
  "session_id": "session_123"
}

响应格式

1. ASR识别结果

{
  "type": "asr_result",
  "text": "三七15g,黄芪20g",
  "is_final": true,
  "timestamp": "2026-02-26T10:30:00Z"
}

2. LLM回复

{
  "type": "llm_response",
  "content": "根据您的症状,建议...",
  "session_id": "session_123"
}

3. TTS音频

{
  "type": "tts_audio",
  "audio_data": "base64_encoded_audio",
  "format": "mp3"
}

REST API(规划中)

# 获取会话历史
GET /api/sessions/{session_id}/history

# 上传报告
POST /api/reports/upload

# 生成病历
POST /api/emr/generate

配置指南

ASR配置

1. 修改热词库

编辑 asr/hotwords.txt,添加自定义词汇。

2. 调整纠错规则

编辑 asr/utils/asr_postprocessor.py

# 添加混淆词纠错
CONFUSION_MAP = {
    "断信时": "锻信石",
    "断信石": "锻信石",
    "时刻": "10克",
    # 添加你的规则
    "你的错误": "正确词汇",
}

3. 调整匹配阈值

# 拼音相似度阈值(默认85)
if score >= 85:  # 降低阈值会增加召回,但可能误匹配
    best_herb = herb

LLM配置

切换模型

编辑 config/config.yaml

default:
  # 通义千问
  DASHSCOPE_API_KEY: sk-xxx
  DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com/compatible-mode/v1
  
  # DeepSeek
  DEEPSEEK_API_KEY: sk-xxx
  DEEPSEEK_API_URL: https://api.deepseek.com/v1
  
  # OpenAI
  OPENIAI_API_KEY: sk-xxx
  OPENIAI_BASE_URL: https://api.openai.com

使用示例

from client.clientfactory import ClientFactory

# 创建客户端
client = ClientFactory.create_client("qwen")  # qwen/deepseek/openai

# 调用
response = client.chat("你好")
print(response)

知识图谱配置

安装Neo4j后,配置连接:

# kg/Graph.py
NEO4J_URI = "bolt://localhost:7687"
NEO4J_USER = "neo4j"
NEO4J_PASSWORD = "your_password"

开发路线

✅ 已完成

  • 实时语音识别(FunASR + 阿里云)
  • 中医处方后处理(中文数字转换、药材纠错)
  • WebSocket实时通信
  • 多模态输入(文本、语音、图片)
  • 医学报告解读
  • 会话管理
  • 音频文件落盘

🚧 进行中

  • 前端React应用完善
  • 数字人视频流优化
  • 处方结构化提取增强
  • 病历模板系统

📅 计划中

Q2 2026

  • 数字人摄像头人脸识别
  • 医患记录管理系统
  • 数字人形象/音色切换
  • 完整的管理后台

Q3 2026

  • 移动端适配
  • 多语言支持
  • 病种知识库扩充
  • 单元测试覆盖率 > 80%

Q4 2026

  • 云端部署方案
  • 性能优化(支持1000+并发)
  • 数据分析看板
  • API文档完善

🧪 测试

运行测试

# 测试ASR
python tests/test_asr.py

# 测试阿里云SDK
python tests/test_ali_sdk_asr.py

# 测试报告解读
python tests/test_report_explaination.py

# 测试RAG检索
python tests/test_analyze_es.py

测试用例

# tests/test_asr_postprocessor.py
from asr.utils.asr_postprocessor import postprocess_asr

def test_chinese_number_conversion():
    assert postprocess_asr("三七十五克") == "三七15g"
    assert postprocess_asr("黄芪二十克") == "黄芪20g"

def test_herb_correction():
    assert postprocess_asr("断信石") == "锻信石"

📚 数据说明

中草药数据

文件data/医保中草药数据_共11071条.csv

字段

  • 名称:药材中文名
  • 拼音:药材拼音
  • 功效:药材功效
  • 用法用量:推荐剂量

用途

  • ASR热词库
  • 药材名称纠错
  • 剂量合理性检查

处方数据

文件data/吴卫平处方数据.xlsx

内容:真实中医处方案例,用于训练和测试

训练数据

HuatuoGPT数据集HuatuoGPT-sft-data-v1/

  • 医学问答对
  • 病历样本
  • 诊断推理

🛠️ 技术栈

后端技术

类别技术
语言Python 3.8+
异步框架asyncio, websockets
ASRFunASR, 阿里云NLS SDK
LLMOpenAI GPT, 通义千问, DeepSeek
TTSEdge-TTS
向量检索FAISS
知识图谱Neo4j, py2neo
OCRPaddleOCR
音频处理PyAudio, soundfile

前端技术

类别技术
框架React 18
状态管理待定
UI组件待定
通信WebSocket
音频Web Audio API

AI模型

功能模型
语音识别FunASR (ModelScope)
语言理解GPT-4, Qwen-Max, DeepSeek
图像理解GPT-4V, Qwen-VL
语音合成Edge-TTS
唇形同步Wav2Lip
向量嵌入BGE, CLIP

🤝 贡献指南

欢迎贡献代码、提交Issue或改进文档!

贡献流程

  1. Fork本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交Pull Request

代码规范

  • 遵循PEP 8
  • 添加必要的注释和文档字符串
  • 编写单元测试
  • 提交前运行 blackflake8

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件


⚠️ 免责声明

本项目仅供学习研究使用,不得用于实际医疗诊断。

  • ❌ 本系统不能替代专业医生的诊断和治疗
  • ❌ 任何医疗决策请咨询有资质的医疗机构和医生
  • ❌ 使用本系统产生的任何后果由使用者自行承担

📧 联系我们


如果这个项目对你有帮助,请给个 ⭐️ Star!

Made with ❤️ by AI Doctor Team

Contributors

CodeDuoGun

17 commits

Languages

Python

87.0%

JavaScript

8.0%

HTML

4.7%