基于深度学习的端到端医疗语音对话系统,集成语音识别、情感分析、声纹识别、智能对话、知识图谱和语音合成,专为医疗场景设计。
| 模块 | 模型 | 功能描述 |
|---|---|---|
| 语音识别 | SenseVoice | 支持50+语言/方言,自动语言检测,同时输出情感和音频事件 |
| 情感识别 | SenseVoice | 识别6种情感:中性、开心、悲伤、愤怒、恐惧、惊讶 |
| 声纹识别 | CAM++ | 说话人身份识别、声纹注册、音色克隆 |
| 智能对话 | Qwen2.5-0.5B | 基于大语言模型的医疗问答,支持 RAG 知识增强 |
| 语音合成 | CosyVoice-300M | 高质量中文语音合成,支持流式输出、音色克隆 |
| 知识检索 | BGE + FAISS | 17万+医疗文档向量检索 |
| 知识图谱 | Neo4j | 医学实体关系查询,支持智能问答 |
| 功能 | 患者端 | 医生端 | 描述 |
|---|---|---|---|
| 智能导诊 | ✅ | - | 根据症状推荐科室和医生 |
| 辅助诊断 | - | ✅ | 症状分析、疾病推断、鉴别诊断 |
| 用药查询 | ✅ | ✅ | 药品信息、相互作用、剂量建议 |
| SOAP病历 | - | ✅ | 自动从对话生成结构化病历 |
| 急救检测 | ✅ | ✅ | 识别危急情况并发出警报 |
| 语音交互 | ✅ | ✅ | 全程语音操作,老年人友好 |
┌─────────────────────────────────────────────────────────────────────┐
│ 智能医疗语音助手系统 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────────────┐ │
│ │ 客户端 │ ◄──── HTTP/SSE ────► │ 服务端 │ │
│ │ (树莓派等) │ │ (Flask Server) │ │
│ └──────────────┘ └──────────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────────────┐ │
│ │ • 音频采集 │ │ 核心 AI 模块 │ │
│ │ • VAD 检测 │ │ ┌────────────────┐ │ │
│ │ • 唤醒词检测 │ │ │ ASR (语音识别) │ │ │
│ │ • 音频播放 │ │ │ TTS (语音合成) │ │ │
│ │ • 流式播放 │ │ │ LLM (对话生成) │ │ │
│ └──────────────┘ │ │ 情感/声纹识别 │ │ │
│ │ │ RAG 知识检索 │ │ │
│ │ └────────────────┘ │ │
│ └──────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────┐ │
│ │ 医疗专业模块 │ │
│ │ ┌────────────────┐ │ │
│ │ │ 患者导诊服务 │ │ │
│ │ │ 医生辅助诊断 │ │ │
│ │ │ 用药查询管理 │ │ │
│ │ │ 知识图谱 Neo4j │ │ │
│ │ │ SOAP 病历生成 │ │ │
│ │ └────────────────┘ │ │
│ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
yszl/
├── client/ # 客户端代码
│ ├── main.py # 主程序入口
│ ├── audio_capture.py # 音频采集(含 VAD)
│ ├── audio_player.py # 音频播放(含流式)
│ ├── wakeword_detector.py # 唤醒词检测
│ ├── event_bus.py # 事件总线
│ ├── fullduplex_controller.py # 全双工控制器
│ └── acoustic_frontend/ # 声学前端(麦克风阵列)
│ ├── mic_array.py # 麦克风阵列驱动
│ ├── beamformer.py # 波束成形
│ ├── doa.py # 声源定位
│ └── aec.py # 回声消除
│
├── server/ # 服务端代码
│ ├── app.py # Flask 主应用(API 入口)
│ ├── modules/ # 功能模块
│ │ ├── core/ # 核心 AI 模块
│ │ │ ├── asr.py # 语音识别 (SenseVoice)
│ │ │ ├── tts.py # 语音合成 (CosyVoice)
│ │ │ ├── dialogue.py # 对话生成 (Qwen2.5)
│ │ │ ├── gguf_dialogue.py # GGUF 量化模型支持
│ │ │ └── rag.py # RAG 向量检索
│ │ ├── audio/ # 音频分析模块
│ │ │ ├── emotion.py # 情感识别
│ │ │ ├── speaker.py # 声纹识别 (CAM++)
│ │ │ ├── paralinguistic.py # 副语言分析
│ │ │ └── sound_event.py # 音频事件检测
│ │ ├── medical/ # 医疗业务模块
│ │ │ ├── triage.py # 患者导诊服务
│ │ │ ├── diagnosis_assistant.py # 辅助诊断
│ │ │ ├── medication.py # 用药查询管理
│ │ │ ├── medical_dict.py # 医学词典
│ │ │ └── intent_classifier.py # 意图分类
│ │ ├── knowledge/ # 知识模块
│ │ │ ├── knowledge_graph.py # Neo4j 知识图谱
│ │ │ └── cypher_generator.py # Cypher 查询生成
│ │ └── aci/ # 临床智能模块 (ACI)
│ │ ├── consultation_session.py # 会诊会话管理
│ │ ├── clinical_entity_extractor.py # 临床实体提取
│ │ ├── soap_generator.py # SOAP 病历生成
│ │ ├── hallucination_detector.py # 幻觉检测
│ │ ├── emergency_detector.py # 急救检测
│ │ └── speaker_diarization.py # 说话人分离
│ ├── data/ # 数据文件
│ │ ├── rag_index/ # RAG 向量索引
│ │ │ ├── index.faiss # FAISS 索引文件
│ │ │ └── documents.json # 文档内容
│ │ ├── dict/ # 医学词典
│ │ │ ├── disease.txt # 疾病词典
│ │ │ ├── symptom.txt # 症状词典
│ │ │ ├── drug.txt # 药物词典
│ │ │ └── ...
│ │ ├── voice_clones/ # 音色克隆文件
│ │ ├── hospital.db # 医院数据库 (SQLite)
│ │ └── speaker_db.pkl # 声纹数据库
│ ├── models/ # AI 模型文件
│ │ ├── asr/ # 语音识别模型
│ │ ├── tts/ # 语音合成模型
│ │ ├── dialogue/ # 对话模型
│ │ ├── embedding/ # 向量模型
│ │ └── speaker/ # 声纹模型
│ ├── libs/ # 第三方库
│ │ └── cosyvoice/ # CosyVoice 源码
│ ├── static/ # Web 静态文件
│ │ ├── index.html # 主页面
│ │ ├── consultation.html # 会诊页面
│ │ ├── app.js # 前端逻辑
│ │ └── style.css # 样式
│ ├── utils/ # 工具函数
│ ├── logs/ # 日志文件
│ └── temp/ # 临时文件
│
├── config/
│ └── config.yaml # 系统配置文件
│
├── docs/ # 项目文档
│ ├── API文档_医疗功能.md
│ ├── 医疗功能实现总结.md
│ └── 演示指南.md
│
├── requirements.txt # Python 依赖(精简版)
├── requirements_full.txt # Python 依赖(完整版)
├── Dockerfile # Docker 构建文件
├── docker-compose.yml # Docker Compose 配置
├── start_server.sh # 服务端启动脚本
├── start_client.sh # 客户端启动脚本
└── README.md # 项目说明文档
| 项目 | 要求 |
|---|---|
| Python | 3.10 - 3.12(推荐 3.12) |
| 操作系统 | Linux / macOS / Windows |
| 内存 | 最低 8GB,推荐 16GB+ |
| 显存 | 推荐 8GB+ GPU(可选,支持 CPU 运行) |
| 磁盘空间 | 约 10GB(模型和索引文件) |
git clone <项目地址>
cd yszl# 创建虚拟环境
python3.12 -m venv venv
# 激活虚拟环境
source venv/bin/activate # Linux/macOS
# 或
venv\Scripts\activate # Windows
# 确认 Python 版本
python --version# 升级 pip
pip install --upgrade pip
# 安装依赖(使用国内镜像加速)
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple💡 常见问题解决
PyAudio 安装失败(macOS)
brew install portaudio
pip install pyaudioPyAudio 安装失败(Ubuntu/Debian)
sudo apt-get install python3-pyaudio portaudio19-dev
pip install pyaudioHuggingFace 下载慢
export HF_ENDPOINT=https://hf-mirror.com编辑 config/config.yaml,根据需要修改配置:
# 服务器配置
server:
host: "0.0.0.0"
port: 6008
# 设备配置(cuda/cpu/mps)
asr:
device: "cuda" # GPU 加速
dialogue:
device: "cpu" # 对话模型
tts:
device: "cuda" # TTS 模型
# 知识图谱(可选)
knowledge_graph:
enabled: true
host: "localhost"
port: 7474
user: "neo4j"
password: "your_password"方式一:使用启动脚本(推荐)
# 终端 1:启动服务器
./start_server.sh
# 终端 2:启动客户端
./start_client.sh方式二:手动启动
# 终端 1:启动服务器
cd server
python app.py
# 终端 2:启动客户端
cd client
python main.py服务启动成功后,您将看到:
📚 [RAG] 成功加载索引
- 文档数量: 177703
- 向量数量: 177703
🔗 [知识图谱] 连接成功
- 地址: bolt://localhost:7687
- 词典: 44093 词条
* Running on http://0.0.0.0:6008
访问 http://localhost:6008 可打开 Web 界面。
| 接口 | 方法 | 描述 |
|---|---|---|
/health |
GET | 健康检查,返回各模块状态 |
/info |
GET | 获取系统信息 |
/events |
GET | SSE 事件流(实时消息推送) |
| 接口 | 方法 | 描述 |
|---|---|---|
/asr |
POST | 语音识别,返回文本和情感 |
/tts |
POST | 语音合成,返回音频文件 |
/tts/stream |
POST | 流式语音合成 |
/emotion |
POST | 情感识别 |
| 接口 | 方法 | 描述 |
|---|---|---|
/speaker/register |
POST | 注册声纹(同时注册音色克隆) |
/speaker/recognize |
POST | 声纹识别 |
/speaker/list |
GET | 列出已注册说话人 |
/voice-clone/list |
GET | 列出可用音色克隆 |
| 接口 | 方法 | 描述 |
|---|---|---|
/dialogue |
POST | 文本对话(支持模式切换) |
/chat |
POST | 完整对话流程(ASR→情感→声纹→对话→TTS) |
| 接口 | 方法 | 描述 |
|---|---|---|
/patient/triage |
POST | 患者智能导诊 |
/doctor/analyze-symptoms |
POST | 医生辅助诊断 |
/medication/query |
POST | 药品信息查询 |
/medication/check-interactions |
POST | 药物相互作用检查 |
/departments/list |
GET | 获取科室列表 |
| 接口 | 方法 | 描述 |
|---|---|---|
/consultation/start |
POST | 开始会诊会话 |
/consultation/<id>/utterance |
POST | 添加对话记录 |
/consultation/<id>/soap |
GET | 获取 SOAP 病历 |
/consultation/<id>/end |
POST | 结束会诊 |
/aci/generate-soap |
POST | 从对话生成 SOAP 病历 |
/emergency/assess |
POST | 急救风险评估 |
📝 完整对话流程
# 发送音频进行完整对话
curl -X POST http://localhost:6008/chat \
-F "[email protected]" \
-F "session_id=user001" \
-F "mode=patient"🏥 患者导诊
curl -X POST http://localhost:6008/patient/triage \
-H "Content-Type: application/json" \
-d '{
"query": "我头疼了三天,还有点发烧",
"age": 35,
"gender": "男"
}'💊 药品查询
curl -X POST http://localhost:6008/medication/query \
-H "Content-Type: application/json" \
-d '{"medication": "阿莫西林"}'📋 生成 SOAP 病历
curl -X POST http://localhost:6008/aci/generate-soap \
-H "Content-Type: application/json" \
-d '{
"utterances": [
{"speaker": "医生", "text": "您哪里不舒服?"},
{"speaker": "患者", "text": "我头疼了三天,还有点发烧。"},
{"speaker": "医生", "text": "体温多少度?"},
{"speaker": "患者", "text": "三十八度五。"}
]
}'启动客户端后,可使用以下命令:
| 命令 | 功能 | 说明 |
|---|---|---|
talk / t |
连续语音对话 | 推荐使用,支持音色选择 |
chat / c |
单次语音对话 | 说一句话后返回 |
dia / d |
连续文字对话 | 文字输入模式 |
tchat / tc |
TTS+ASR 测试 | 文字转语音后发送服务器 |
register / r |
注册声纹 | 同时注册音色克隆 |
speakers / s |
查看说话人 | 列出已注册的声纹 |
quit / q |
退出 | 退出客户端 |
在对话过程中,可以使用语音命令切换模式:
| 语音命令 | 功能 |
|---|---|
| "切换到患者模式" / "我是患者" | 切换到患者模式(导诊) |
| "切换到医生模式" / "我是医生" | 切换到医生模式(辅助诊断) |
| "切换到会诊模式" / "开始会诊" | 切换到会诊模式(病历生成) |
| "结束会诊" / "生成病历" | 结束会诊并生成 SOAP 病历 |
| "切换音色" | 选择不同的音色克隆 |
- 安装 Neo4j
# macOS
brew install neo4j
# Ubuntu/Debian
sudo apt-get install neo4j
# 或下载 Neo4j Desktop
# https://neo4j.com/download/- 启动 Neo4j
neo4j start- 导入医学知识图谱
cd server
python build_medicalgraph.py- 配置连接信息
# config/config.yaml
knowledge_graph:
enabled: true
host: "localhost"
port: 7474
user: "neo4j"
password: "your_password"如果需要重新构建 RAG 索引:
cd server
python build_rag_index.py支持 ReSpeaker 6-Mic 环形麦克风阵列:
# config/config.yaml
acoustic_frontend:
enabled: true
device:
type: "respeaker_6mic"
sample_rate: 16000
doa:
enabled: true
algorithm: "gcc_phat"
beamforming:
enabled: true
method: "das"
aec:
enabled: true# 构建镜像
docker build -t medical-voice-assistant .
# 启动服务
docker-compose up -d| 指标 | 数值 | 说明 |
|---|---|---|
| ASR 延迟 | < 500ms | 语音识别响应时间 |
| TTS 首音频延迟 | < 1s | 流式模式下首音频延迟 |
| 对话响应 | < 2s | 完整对话流程响应时间 |
| RAG 检索 | < 100ms | 向量检索响应时间 |
| 知识图谱查询 | < 200ms | Neo4j 查询响应时间 |
| 类别 | 技术 |
|---|---|
| 后端框架 | Flask, Flask-CORS |
| 深度学习 | PyTorch, Transformers |
| 语音识别 | FunASR (SenseVoice) |
| 语音合成 | CosyVoice (ModelScope) |
| 大语言模型 | Qwen2.5-0.5B-Instruct |
| 向量检索 | FAISS, Sentence-Transformers (BGE) |
| 知识图谱 | Neo4j, py2neo |
| 音频处理 | librosa, soundfile, PyAudio |
| 数据库 | SQLite, Neo4j |
| 实体识别 | AC自动机 (pyahocorasick) |
- ✅ 完整的语音对话流程
- ✅ 患者导诊服务
- ✅ 医生辅助诊断
- ✅ 用药查询管理
- ✅ Neo4j 知识图谱集成
- ✅ SOAP 病历自动生成
- ✅ 音色克隆支持
- ✅ 流式 TTS 输出
- ✅ Web 界面
- 多轮问诊对话优化
- 健康档案管理
- 用药提醒功能
- 更多疾病和药品数据
- 影像学报告解读
- 检验结果分析
- 慢性病管理
- 移动端 App
- 电子病历系统对接
- 远程医生咨询
- 多模态诊断(图像+语音)
- 数据可视化分析
- 医疗免责:本系统仅供辅助参考,不能替代专业医生的诊断和治疗。
- 数据安全:实际部署时需要加密存储患者数据,符合医疗数据保护法规。
- 紧急情况:系统会识别危急症状并提示立即就医,但不能替代急救服务。
- 持续更新:医疗知识库需要定期更新以保证准确性。
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
本项目采用 MIT 许可证 - 详见 LICENSE 文件
如有问题或建议,请提交 Issue 或联系项目维护者。
Made with ❤️ for Medical AI