2026-06-03 15:51:46 +08:00
|
|
|
|
# 医疗问诊 Agent 后端
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
医疗问诊 Agent 是宿主医疗教学平台中的问诊训练子功能。后端基于 FastAPI 构建,负责病例读取、训练会话、多轮问诊、检查申请、诊断治疗提交、AI 评价、PDF 报告导出和历史记录查询。
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
## 技术栈
|
2026-06-01 17:32:18 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
- Python 3.11
|
|
|
|
|
|
- FastAPI
|
|
|
|
|
|
- SQLAlchemy 2.x
|
|
|
|
|
|
- MySQL
|
|
|
|
|
|
- Redis
|
|
|
|
|
|
- OpenAI-compatible LLM Adapter
|
|
|
|
|
|
- ReportLab PDF
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
## 核心功能
|
|
|
|
|
|
|
|
|
|
|
|
- Django 用户中心 token 校验
|
|
|
|
|
|
- 病例列表与病例详情
|
|
|
|
|
|
- 病例 SQL 安全导入与删除
|
|
|
|
|
|
- 训练会话创建
|
|
|
|
|
|
- 多轮问诊与 SSE 流式回复
|
|
|
|
|
|
- 练习提示
|
|
|
|
|
|
- 检查/检验申请
|
|
|
|
|
|
- 诊断与治疗提交
|
|
|
|
|
|
- AI 评价报告生成
|
|
|
|
|
|
- 评分明细落库
|
|
|
|
|
|
- PDF 报告导出
|
|
|
|
|
|
- 历史评价查询
|
|
|
|
|
|
- LLM Fast/Reason 测试
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
## 本地启动
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
```powershell
|
|
|
|
|
|
cd backend
|
|
|
|
|
|
python -m venv .venv
|
|
|
|
|
|
.\.venv\Scripts\activate
|
|
|
|
|
|
pip install -r requirements.txt
|
|
|
|
|
|
cd ..
|
|
|
|
|
|
copy .env.example .env
|
2026-06-01 09:25:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
编辑 `.env`,填写 MySQL、Redis、Django 用户中心和 LLM 配置。
|
|
|
|
|
|
|
|
|
|
|
|
启动服务:
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
|
|
|
|
|
```powershell
|
2026-06-01 17:32:18 +08:00
|
|
|
|
cd backend
|
|
|
|
|
|
uvicorn app.main:app --host 127.0.0.1 --port 9000
|
2026-06-01 09:25:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
访问:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
http://127.0.0.1:9000/docs
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Docker 启动
|
2026-06-01 17:57:31 +08:00
|
|
|
|
|
|
|
|
|
|
```powershell
|
2026-06-03 15:51:46 +08:00
|
|
|
|
copy .env.example .env
|
2026-06-01 17:57:31 +08:00
|
|
|
|
docker build -t medical-consultation-agent-backend .
|
|
|
|
|
|
docker run --env-file .env -p 9000:9000 medical-consultation-agent-backend
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
## 环境变量
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
关键配置见 `.env.example`:
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
```env
|
|
|
|
|
|
DATABASE_URL=mysql+pymysql://root:<password>@mysql:3306/medical_platform?charset=utf8mb4
|
|
|
|
|
|
MYSQL_URL=mysql+aiomysql://root:<password>@mysql:3306/medical_platform?charset=utf8mb4
|
|
|
|
|
|
REDIS_URL=redis://redis:6379/0
|
|
|
|
|
|
AUTH_USER_ME_URL=http://django:8000/api/user/users/me/
|
|
|
|
|
|
LLM_BASE_URL=https://api.deepseek.com/chat/completions
|
|
|
|
|
|
LLM_API_KEY=
|
2026-06-01 09:25:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
真实数据库密码、LLM Key 和 access token 只写入本地 `.env` 或部署环境变量。
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
## 数据库初始化与检查
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
数据库需先创建好,表结构由后端脚本创建和校验。
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
|
|
|
|
|
```powershell
|
2026-06-03 15:51:46 +08:00
|
|
|
|
cd backend
|
|
|
|
|
|
.\.venv\Scripts\python.exe scripts\migrate_to_new_schema.py
|
|
|
|
|
|
.\.venv\Scripts\python.exe scripts\migrate_user_department_score_detail.py
|
|
|
|
|
|
.\.venv\Scripts\python.exe scripts\check_final_schema.py
|
|
|
|
|
|
.\.venv\Scripts\python.exe scripts\check_final_demo_readiness.py
|
2026-06-01 09:25:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
清空训练运行数据和本地报告文件:
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
```powershell
|
|
|
|
|
|
cd backend
|
|
|
|
|
|
.\.venv\Scripts\python.exe scripts\clear_training_runtime_data.py --confirm CLEAR_TRAINING_DATA --reports
|
2026-06-01 09:25:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
该脚本只清理训练会话、检查申请、提交、评价记录、评分明细、审计日志和本地 PDF 报告,不删除病例、用户、科室、检查项、评分规则、提示词和知识库。
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-01 17:32:18 +08:00
|
|
|
|
## 用户认证
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
前端请求医疗问诊 Agent 时携带宿主系统 access token:
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-01 17:32:18 +08:00
|
|
|
|
```http
|
|
|
|
|
|
Authorization: Bearer <access_token>
|
|
|
|
|
|
X-Entry-Scene: mac_vue_dev
|
2026-06-01 09:25:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
后端会转发 token 到 Django 用户中心:
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
|
|
|
|
|
```text
|
2026-06-01 17:32:18 +08:00
|
|
|
|
GET /api/user/users/me/
|
2026-06-01 09:25:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
Django 返回 200 后,后端使用返回的 `id` 作为本系统内部用户隔离 ID。前端不需要传 `X-User-Id`。
|
2026-06-01 09:25:26 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
验证接口:
|
2026-06-01 14:28:43 +08:00
|
|
|
|
|
2026-06-01 17:32:18 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
curl -X GET "http://127.0.0.1:9000/api/v1/auth/me" \
|
|
|
|
|
|
-H "Authorization: Bearer <access_token>" \
|
|
|
|
|
|
-H "X-Entry-Scene: mac_vue_dev"
|
2026-06-01 14:28:43 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-01 17:32:18 +08:00
|
|
|
|
## 测试
|
2026-06-01 10:39:07 +08:00
|
|
|
|
|
2026-06-01 09:25:26 +08:00
|
|
|
|
```powershell
|
2026-06-01 17:32:18 +08:00
|
|
|
|
cd backend
|
2026-06-01 09:25:26 +08:00
|
|
|
|
.\.venv\Scripts\python.exe -m compileall app scripts tests
|
|
|
|
|
|
.\.venv\Scripts\python.exe tests\test_core_logic.py
|
|
|
|
|
|
.\.venv\Scripts\python.exe tests\test_api_contract.py
|
|
|
|
|
|
.\.venv\Scripts\python.exe tests\test_demo_flow.py
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
## API 文档
|
2026-06-01 17:32:18 +08:00
|
|
|
|
|
2026-06-03 15:51:46 +08:00
|
|
|
|
启动后访问:
|
2026-06-01 17:32:18 +08:00
|
|
|
|
|
|
|
|
|
|
```text
|
2026-06-03 15:51:46 +08:00
|
|
|
|
http://127.0.0.1:9000/docs
|
|
|
|
|
|
http://127.0.0.1:9000/openapi.json
|
2026-06-01 17:32:18 +08:00
|
|
|
|
```
|