4.3 KiB
4.3 KiB
医疗问诊 Agent FastAPI 后端
医疗问诊 Agent 是医疗教学平台中的问诊训练服务。后端负责 Django 用户身份校验、病例读取、多轮问诊、检查申请、诊断治疗提交、AI 评价、评分明细、PDF 报告和历史训练记录。
病例库在本服务中为只读数据源。病例新增、解析、修改和删除由外部病例管理系统负责;本服务只读取已发布病例及其训练扩展、检查项和评分规则。
项目结构
仓库根目录可以直接部署为服务器的 fastapi/ 目录:
fastapi/
├── app/ # FastAPI 应用、Agent、服务、模型与提示词
├── scripts/ # 数据库迁移、结构检查与运维脚本
├── tests/ # 核心逻辑与接口测试
├── Dockerfile
├── requirements.txt
├── .env.example
└── .env.production.example
核心依赖
- Python 3.11
- FastAPI
- SQLAlchemy 2.x
- MySQL 8
- Redis 7
- OpenAI-compatible LLM API
- Django 用户中心
/api/user/users/me/
本地启动
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env
uvicorn app.main:app --host 127.0.0.1 --port 9000
本地 Swagger:
http://127.0.0.1:9000/docs
真实密码、LLM Key 和 access token 只写入本地 .env 或服务器环境变量,不提交到 Git。
Docker Compose 部署
服务器目录:
/home/code/medical-ai/
├── django/
├── fastapi/ # 本仓库
├── vueapp/
├── vuecms/
└── docker-compose.yml
首次拉取:
cd /home/code/medical-ai
git clone http://82.157.235.104:3000/Liu_JB/LiuJinbao.git fastapi
cp fastapi/.env.production.example fastapi/.env
vi fastapi/.env
必须在服务器 .env 中填写:
- MySQL 密码和数据库名
LLM_API_KEY- 实际前端来源
CORS_ALLOW_ORIGINS - Nginx 使用
/fastapi/前缀时保留APP_ROOT_PATH=/fastapi
父目录 docker-compose.yml 的 FastAPI 服务需要包含:
fastapi:
build:
context: ./fastapi
container_name: fastapi
restart: always
ports:
- "9000:9000"
env_file:
- ./fastapi/.env
volumes:
- ./logs/fastapi:/app/logs
- ./data/fastapi-reports:/app/storage/reports
depends_on:
- mysql
- redis
- django
networks:
- medical
构建并启动:
cd /home/code/medical-ai
docker compose config
docker compose build fastapi
docker compose up -d fastapi
docker compose logs --tail=200 fastapi
后续更新:
cd /home/code/medical-ai/fastapi
git pull origin main
cd ..
docker compose build fastapi
docker compose up -d fastapi
数据库初始化与检查
服务启动后先进行只读结构检查:
cd /home/code/medical-ai
docker compose exec fastapi python scripts/check_final_schema.py
docker compose exec fastapi python scripts/check_final_demo_readiness.py
以下迁移脚本只用于独立本地开发库或旧环境升级,不得用于共享生产病例库:
docker compose exec fastapi python scripts/migrate_to_new_schema.py
docker compose exec fastapi python scripts/migrate_user_department_score_detail.py
迁移脚本使用 create_all 补齐 Agent 所需表,不删除 Django 或现有业务表;migrate_to_new_schema.py 会写入 Demo 病例和基础数据。共享环境中的病例数据由外部病例管理系统维护。
部署验证
容器内部端口验证:
curl http://127.0.0.1:9000/health/live
curl http://127.0.0.1:9000/health/ready
使用 Nginx /fastapi/ 代理后的公网验证:
http://8.160.178.88/fastapi/docs
http://8.160.178.88/fastapi/openapi.json
http://8.160.178.88/fastapi/health/ready
/health/live 返回 200 表示 FastAPI 进程正常。/health/ready 返回 200 表示 MySQL、Redis 和关键配置已经就绪;返回 503 时查看响应中的检查项和容器日志。
验证 Django 用户中心联调:
curl "http://8.160.178.88/fastapi/api/v1/auth/me" \
-H "Authorization: Bearer <access_token>" \
-H "X-Entry-Scene: production_vue"
测试
python -m compileall app scripts tests
python tests\test_core_logic.py
python tests\test_api_contract.py
python tests\test_demo_flow.py