Files
fastapi/README.md
T

6.1 KiB
Raw Blame History

医疗问诊 Agent FastAPI 后端

医疗问诊 Agent 是医疗教学平台中的 FastAPI 后端服务,负责 Django 用户鉴权、病例读取、问诊训练、教学互动、AI 评价、PDF 下载、AI 学习助手问答,以及后台预留的机构知识库构建能力。

本服务不负责登录注册、病例 PDF 解析入库、病例增删改、多租户后台、HIS/LIS/PACS 对接。病例、检查项、教学题和评分规则由平台数据库维护,本服务只读取并使用。

当前功能

训练页面:

  • 推荐配置信息
  • 训练配置信息
  • 新建会话
  • 流式会话
  • 王主任练习提示
  • 体格检查列表获取
  • 辅助检查列表获取
  • 体格检查某项结果
  • 辅助检查某项结果
  • 完成问诊
  • 提交诊断
  • 提交治疗
  • 生成评价
  • 获取评价详情
  • 下载 PDF

教学互动:

  • 获取教学列表,包含题目、选项、答案、解析文本和视频
  • 生成评价
  • 获取评价详情
  • 下载 PDF

个人中心:

  • 训练记录列表
  • 训练记录详情

AI 学习助手:

  • 普通用户通过流式接口提问
  • 后端优先检索本机构知识库
  • 未命中知识库或知识库暂不可用时,自动转为大模型通用学习回答
  • 命中知识库时返回 PDF 标题、页码、chunk_uid 和引用片段

后台预留能力:

  • 内容管理员上传 PDF 构建机构知识库
  • PDF 解析、分片、Embedding、Milvus 写入和 Celery 异步任务已留出接口
  • 当前阶段不要求真实 PDF 入库测试,优先保证 AI 学习助手问答可用

基础能力:

  • Django access token 鉴权
  • MySQL 业务数据读取和训练记录写入
  • Redis 短期会话 memory
  • OpenAI-compatible LLM 调用
  • OpenAI-compatible Embedding 调用预留
  • Milvus 向量检索预留
  • Swagger / OpenAPI
  • 健康检查

项目结构

fastapi/
├── app/                    # FastAPI 应用、Agent、服务、模型和提示词
│   ├── api/                # API router
│   ├── agents/             # LLM Agent
│   ├── integrations/       # PDF、Embedding、Milvus 外部适配
│   ├── models/             # SQLAlchemy ORM
│   ├── repositories/       # 数据访问层
│   ├── schemas/            # Pydantic schema
│   ├── services/           # 业务服务
│   └── tasks/              # Celery 异步任务预留
├── scripts/                # 初始化和维护脚本
├── tests/                  # 自动化测试
├── docs/03_api_design.md   # 前端联调 API 文档
├── Dockerfile
├── requirements.txt
├── .env.example
└── .env.production.example

本地启动

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、Embedding Key 和 access token 只写入本地 .env 或服务器环境变量,不提交到 Git。

关键环境变量

APP_ENV=local
APP_ROOT_PATH=
DATABASE_URL=mysql+pymysql://root:<password>@127.0.0.1:3306/medical?charset=utf8mb4
RUNTIME_MEMORY_BACKEND=redis
REDIS_URL=redis://127.0.0.1:6379/0

AUTH_VALIDATE_ENABLED=true
AUTH_USER_ME_URL=http://127.0.0.1:8000/api/user/users/me/

LLM_BASE_URL=https://api.deepseek.com/chat/completions
LLM_API_KEY=<llm_api_key>
LLM_MODEL=deepseek-chat
LLM_FAST_MODEL=deepseek-chat
LLM_REASON_MODEL=deepseek-reasoner

MILVUS_URI=http://127.0.0.1:19530
MILVUS_COLLECTION_PREFIX=kb_inst
MILVUS_DEFAULT_DB=default

EMBEDDING_PROVIDER=openai_compatible
EMBEDDING_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
EMBEDDING_API_KEY=<embedding_api_key>
EMBEDDING_MODEL=text-embedding-v4
EMBEDDING_DIM=1024

KNOWLEDGE_INGESTION_SYNC=true
KNOWLEDGE_STORAGE_DIR=./storage/knowledge

服务器部署

服务器目录示例:

/home/code/medical-ai/
├── django/
├── fastapi/
├── vueapp/
├── vuecms/
├── data/
├── logs/
└── 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

FastAPI 构建和启动:

cd /home/code/medical-ai
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
docker compose logs --tail=200 fastapi

验证

公网验证:

http://8.160.178.88/fastapi/docs
http://8.160.178.88/fastapi/openapi.json
http://8.160.178.88/fastapi/health/ready

Django 用户鉴权:

curl "http://8.160.178.88/fastapi/api/v1/auth/me" \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Entry-Scene: production_vue"

AI 学习助手流式问答:

curl -N -X POST "http://8.160.178.88/fastapi/api/v1/learning-assistant/chat/stream" \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Entry-Scene: production_vue" \
  -H "Content-Type: application/json" \
  -d '{"question":"支气管肺炎有哪些典型临床表现?","top_k":5}'

PDF 评价报告下载:

curl -L "http://8.160.178.88/fastapi/api/v1/evaluations/<evaluation_id>/download-pdf" \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Entry-Scene: production_vue" \
  -o evaluation_report.pdf

测试

python -m compileall app scripts tests
python tests\test_core_logic.py
python tests\test_api_contract.py
python tests\test_demo_flow.py

测试覆盖:

  • Django token 鉴权和 user_id 隔离
  • 推荐配置和训练配置
  • 新建会话、流式问诊、王主任练习提示
  • 体格检查和辅助检查列表
  • 单项检查结果和重复申请幂等
  • 完成问诊、提交诊断、提交治疗、生成评价
  • 教学互动列表和教学互动评价
  • 训练记录列表、评价详情、PDF 下载
  • AI 学习助手无知识库降级流式回答
  • AI 学习助手命中知识库后的来源返回
  • 跨用户访问拒绝

API 文档

前端联调文档:

docs/03_api_design.md