基于多模态AI的智能医疗助手系统,专注于中医处方录入、病历管理和医患交互
AI Doctor 是一个集成了语音识别、自然语言处理、知识图谱和数字人交互的智能医疗平台。系统特别针对中医处方录入场景进行了深度优化,支持实时语音转文字、智能药材识别、剂量标准化等功能。
| 特性 | 说明 |
|---|---|
| 🎙️ 专业ASR | 针对中医场景优化,11,000+中草药热词库 |
| 🧠 智能纠错 | 基于拼音相似度的药材名称自动纠错 |
| 📊 结构化输出 | 自动提取药材、剂量、单位,生成标准处方 |
| 💬 多模态交互 | 支持文本、语音、图片、视频输入 |
| 🤖 数字人 | Wav2Lip唇形同步,真实感强 |
| 🔍 知识增强 | RAG检索 + 知识图谱,回答更准确 |
# 输入:语音 "三七十五克,黄芪二十克,党参十五克"
# 输出:三七15g,黄芪20g,党参15g
技术亮点:
支持格式:JPG, PNG, PDF
识别内容:血常规、尿常规、CT、MRI、X光片等
输出内容:指标解读、异常提示、健康建议
技术方案:
自动生成结构化病历,包含:
┌─────────────────────────────────────────────────────────┐
│ 前端层 (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/ # 医学书籍
系统要求:
可选组件:
git clone https://github.com/your-repo/ai_doctor.git
cd ai_doctor
python -m venv venv
source venv/bin/activate # macOS/Linux
# venv\Scripts\activate # Windows
pip install -r requirements.txt
复制并编辑配置文件:
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
方式一:启动完整服务(推荐)
python webdemo_medical_server.py
访问:http://localhost:8080
方式二:启动独立ASR服务
python server.py
WebSocket地址:ws://localhost:50007
方式三:启动Gradio演示
python app.py
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
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"
}
# 获取会话历史
GET /api/sessions/{session_id}/history
# 上传报告
POST /api/reports/upload
# 生成病历
POST /api/emr/generate
编辑 asr/hotwords.txt,添加自定义词汇。
编辑 asr/utils/asr_postprocessor.py:
# 添加混淆词纠错
CONFUSION_MAP = {
"断信时": "锻信石",
"断信石": "锻信石",
"时刻": "10克",
# 添加你的规则
"你的错误": "正确词汇",
}
# 拼音相似度阈值(默认85)
if score >= 85: # 降低阈值会增加召回,但可能误匹配
best_herb = herb
编辑 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"
Q2 2026
Q3 2026
Q4 2026
# 测试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
字段:
用途:
文件:data/吴卫平处方数据.xlsx
内容:真实中医处方案例,用于训练和测试
HuatuoGPT数据集:HuatuoGPT-sft-data-v1/
| 类别 | 技术 |
|---|---|
| 语言 | Python 3.8+ |
| 异步框架 | asyncio, websockets |
| ASR | FunASR, 阿里云NLS SDK |
| LLM | OpenAI GPT, 通义千问, DeepSeek |
| TTS | Edge-TTS |
| 向量检索 | FAISS |
| 知识图谱 | Neo4j, py2neo |
| OCR | PaddleOCR |
| 音频处理 | PyAudio, soundfile |
| 类别 | 技术 |
|---|---|
| 框架 | React 18 |
| 状态管理 | 待定 |
| UI组件 | 待定 |
| 通信 | WebSocket |
| 音频 | Web Audio API |
| 功能 | 模型 |
|---|---|
| 语音识别 | FunASR (ModelScope) |
| 语言理解 | GPT-4, Qwen-Max, DeepSeek |
| 图像理解 | GPT-4V, Qwen-VL |
| 语音合成 | Edge-TTS |
| 唇形同步 | Wav2Lip |
| 向量嵌入 | BGE, CLIP |
欢迎贡献代码、提交Issue或改进文档!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)black 和 flake8本项目采用 MIT 许可证 - 详见 LICENSE 文件
本项目仅供学习研究使用,不得用于实际医疗诊断。
如果这个项目对你有帮助,请给个 ⭐️ Star!
Made with ❤️ by AI Doctor Team
17 commits
Python
87.0%
JavaScript
8.0%
HTML
4.7%
基于多模态AI的智能医疗助手系统,专注于中医处方录入、病历管理和医患交互
AI Doctor 是一个集成了语音识别、自然语言处理、知识图谱和数字人交互的智能医疗平台。系统特别针对中医处方录入场景进行了深度优化,支持实时语音转文字、智能药材识别、剂量标准化等功能。
| 特性 | 说明 |
|---|---|
| 🎙️ 专业ASR | 针对中医场景优化,11,000+中草药热词库 |
| 🧠 智能纠错 | 基于拼音相似度的药材名称自动纠错 |
| 📊 结构化输出 | 自动提取药材、剂量、单位,生成标准处方 |
| 💬 多模态交互 | 支持文本、语音、图片、视频输入 |
| 🤖 数字人 | Wav2Lip唇形同步,真实感强 |
| 🔍 知识增强 | RAG检索 + 知识图谱,回答更准确 |
# 输入:语音 "三七十五克,黄芪二十克,党参十五克"
# 输出:三七15g,黄芪20g,党参15g
技术亮点:
支持格式:JPG, PNG, PDF
识别内容:血常规、尿常规、CT、MRI、X光片等
输出内容:指标解读、异常提示、健康建议
技术方案:
自动生成结构化病历,包含:
┌─────────────────────────────────────────────────────────┐
│ 前端层 (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/ # 医学书籍
系统要求:
可选组件:
git clone https://github.com/your-repo/ai_doctor.git
cd ai_doctor
python -m venv venv
source venv/bin/activate # macOS/Linux
# venv\Scripts\activate # Windows
pip install -r requirements.txt
复制并编辑配置文件:
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
方式一:启动完整服务(推荐)
python webdemo_medical_server.py
访问:http://localhost:8080
方式二:启动独立ASR服务
python server.py
WebSocket地址:ws://localhost:50007
方式三:启动Gradio演示
python app.py
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
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"
}
# 获取会话历史
GET /api/sessions/{session_id}/history
# 上传报告
POST /api/reports/upload
# 生成病历
POST /api/emr/generate
编辑 asr/hotwords.txt,添加自定义词汇。
编辑 asr/utils/asr_postprocessor.py:
# 添加混淆词纠错
CONFUSION_MAP = {
"断信时": "锻信石",
"断信石": "锻信石",
"时刻": "10克",
# 添加你的规则
"你的错误": "正确词汇",
}
# 拼音相似度阈值(默认85)
if score >= 85: # 降低阈值会增加召回,但可能误匹配
best_herb = herb
编辑 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"
Q2 2026
Q3 2026
Q4 2026
# 测试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
字段:
用途:
文件:data/吴卫平处方数据.xlsx
内容:真实中医处方案例,用于训练和测试
HuatuoGPT数据集:HuatuoGPT-sft-data-v1/
| 类别 | 技术 |
|---|---|
| 语言 | Python 3.8+ |
| 异步框架 | asyncio, websockets |
| ASR | FunASR, 阿里云NLS SDK |
| LLM | OpenAI GPT, 通义千问, DeepSeek |
| TTS | Edge-TTS |
| 向量检索 | FAISS |
| 知识图谱 | Neo4j, py2neo |
| OCR | PaddleOCR |
| 音频处理 | PyAudio, soundfile |
| 类别 | 技术 |
|---|---|
| 框架 | React 18 |
| 状态管理 | 待定 |
| UI组件 | 待定 |
| 通信 | WebSocket |
| 音频 | Web Audio API |
| 功能 | 模型 |
|---|---|
| 语音识别 | FunASR (ModelScope) |
| 语言理解 | GPT-4, Qwen-Max, DeepSeek |
| 图像理解 | GPT-4V, Qwen-VL |
| 语音合成 | Edge-TTS |
| 唇形同步 | Wav2Lip |
| 向量嵌入 | BGE, CLIP |
欢迎贡献代码、提交Issue或改进文档!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)black 和 flake8本项目采用 MIT 许可证 - 详见 LICENSE 文件
本项目仅供学习研究使用,不得用于实际医疗诊断。
如果这个项目对你有帮助,请给个 ⭐️ Star!
Made with ❤️ by AI Doctor Team
17 commits
Python
87.0%
JavaScript
8.0%
HTML
4.7%