🧊 冷链库存智能副驾驶
Cold Chain Inventory Copilot:零延迟企业级药品合规 Agent
为医院药剂科与冷链仓储而生。不是语音播报,是直接入库的合规 JSON。
为什么选择这个项目?
市面上已有不少"药品 OCR"工具,它们的逻辑是:拍照 → 识字 → 念给你听。
这很好,但这是 To-C 的思路——为有视力障碍的用户设计的语音助手。
本项目解决的是完全不同的问题:
| 维度 | To-C 消费端方案 | 本项目(To-B 企业端) | |------|----------------|----------------------| | 目标用户 | 老人、视障患者 | 医院药剂师、冷链库管 | | 输出形式 | 语音播报、自然语言 | 严格 Schema 的机器可读 JSON | | 下游对接 | 无(人工处理) | HIS/ERP/WMS 系统零触碰入库 | | 核心价值 | 读懂标签 | 批量合规审计 + 自动预警 | | 模型调度 | 懒加载/释放节省内存 | 双模型常驻内存,零加载延迟 | | 处理模式 | 单张交互 | 批量流水线(冷链到货扫描) |
一句话定位: 本项目是为医院药剂科和冷链仓储设计的 AI 合规审计员,它的每一行输出都是可以直接写入数据库的结构化数据——而不是说给人听的句子。
核心输出:机器直接可用的合规 JSON
拍一张药品包装照片,30 秒内得到:
{
"drug_name": "重组人胰岛素注射液",
"lot_number": "BI20240318",
"production_date": "2024-03-18",
"expiration_date": "2026-03-18",
"is_expired": false,
"days_until_expiry": 661,
"warning_level": "SAFE",
"storage_conditions": "2~8℃冷藏,避免冻结",
"manufacturer": "某某生物制药股份有限公司"
}
warning_level 三级预警直接映射到 ERP 告警优先级:
| 值 | 含义 | 推荐动作 |
|----|------|----------|
| SAFE | 距过期 >30 天 | 正常入库 |
| WARNING: NEAR EXPIRY | 距过期 ≤30 天 | 标记优先使用,触发补货 |
| CRITICAL: EXPIRED | 已过期 | 立即隔离,拒绝入库 |
架构设计:Intel Lunar Lake 混合算力
┌─────────────────────────────────────────────────────────────────┐
│ Intel Core Ultra 7 258V │
│ 32 GB 统一内存 (MoP) │
│ │
│ ┌──────────────────────────┐ ┌──────────────────────────────┐ │
│ │ CPU / NPU │ │ Arc 140V iGPU (Xe2) │ │
│ │ │ │ │ │
│ │ Qwen3-VL-2B-Instruct │ │ Qwen3-14B INT4 │ │
│ │ 视觉 OCR Skill │ │ 企业合规审计 Brain │ │
│ │ FastAPI ← HTTP ← │ │ openvino-genai │ │
│ │ skill_api.py │ │ LLMPipeline │ │
│ └──────────┬───────────────┘ └──────────────┬───────────────┘ │
│ │ OCR 原始文本 │ 合规 JSON │
│ └─────────────┐ ┌─────────────────┘ │
│ ▼ ▼ │
│ local_agent.py │
│ 编排器 / Copilot 入口 │
└─────────────────────────────────────────────────────────────────┘
│
▼
HIS / ERP / 冷链 WMS 系统
Intel MoP 统一内存:我们的核心技术优势
传统方案(竞品普遍采用)将两个模型分时调度:先加载 VLM 做 OCR,卸载后再加载 LLM 做分析。每次切换耗时 15~60 秒,批量处理时延迟叠加,无法胜任医院高频扫描场景。
本项目的做法:
Qwen3-14B INT4通过openvino-genai常驻 Arc 140V GPU,显存占用约 8 GBQwen3-VL-2B通过transformers常驻 CPU 侧内存,约 6 GB- MoP 架构下 CPU 与 GPU 共享同一物理内存池,两模型同时在线,零拷贝通信
- 第一张图片后,所有后续推理均无加载开销——纯推理延迟 < 30s/张
懒加载方案(竞品): 加载VLM(30s) → OCR(10s) → 卸载 → 加载LLM(30s) → 分析(15s) = 85s/张
本方案(常驻内存): OCR(10s) → 分析(15s) = 25s/张(模型已在内存中)
企业使用场景
场景一:冷链到货批量验收
冷链车到货 → 扫描每箱胰岛素包装 → 实时比对批号与效期
→ warning_level=CRITICAL 的批次自动触发退货单
→ 合格批次 lot_number + expiration_date 直接写入 WMS
场景二:药房冷库定期盘点
盘点员手持设备拍照 → Copilot 批量生成合规记录
→ days_until_expiry ≤ 30 的品种自动生成补货申请
→ 盘点报告导出,供 NMPA / GMP 审查备档
场景三:ERP 实时库龄预警
每日定时任务扫描库存照片 → JSON 结果推送 ERP
→ 按 warning_level 自动分级处理
→ 药剂科主任收到日报:今日 CRITICAL 0 项,WARNING 3 项,SAFE 247 项
快速开始
环境要求
操作系统:Windows 11(已针对 Lunar Lake 平台优化)
Python:3.10 ~ 3.12(不支持 3.14)
硬件:Intel Core Ultra 200V 系列(其他平台 CPU 推理可用,GPU 加速需 Intel Arc)
1. 创建环境并安装依赖
conda create -n aipc python=3.11 -y
conda activate aipc
pip install -r requirements.txt
2. 确认模型文件
D:\zichenglee\Qwen3-VL-2B-Instruct\ ← 视觉 OCR 模型
D:\zichenglee\Qwen3-14B-int4-ov\
├── openvino_model.xml
├── openvino_model.bin ← 必须存在(~7~8 GB,需 Git LFS 完整拉取)
└── ...
⚠️ 若通过
git clone下载,请先执行git lfs pull确保.bin权重文件已下载完整。
3. 启动 Skill 服务(终端 1)
conda activate aipc
python skill_api.py
模型首次加载约 1~2 分钟,出现以下日志即表示就绪:
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000
验证:
curl http://localhost:8000/health
# {"status":"ok","model":"Qwen3-VL-2B-Instruct"}
4. 运行完整合规流水线(终端 2)
conda activate aipc
python local_agent.py drug_package.jpg
或用端到端验证脚本(无需提前启动 API 服务):
python validate_pipeline.py test_drug.png
API 参考
POST /extract_drug_info
请求
curl -X POST http://localhost:8000/extract_drug_info \
-F "file=@/path/to/label.jpg"
import requests
with open("label.jpg", "rb") as f:
r = requests.post(
"http://localhost:8000/extract_drug_info",
files={"file": ("label.jpg", f, "image/jpeg")}
)
ocr_text = r.json()["extracted_text"]
返回
{
"extracted_text": "药品名称:重组人胰岛素注射液\n批号:BI20240318\n有效期:2026年03月18日\n贮藏:2~8℃冷藏",
"filename": "label.jpg"
}
完整 OpenAPI 规范见 openapi.yaml,可直接导入 Postman / Swagger UI。
项目结构
drug-ocr-pipeline/
├── skill_api.py # ★ Skill 核心:FastAPI + Qwen3-VL-2B OCR 服务
├── openapi.yaml # ★ OpenAPI 3.0 规范(Agent 框架发现与调用)
├── local_agent.py # 企业编排器:Brain 推理 + 合规 JSON 生成
├── validate_pipeline.py # 端到端验证脚本(单命令跑通全流程)
├── requirements.txt # Python 依赖清单
└── README.md
技术栈
| 组件 | 技术选型 | 运行设备 |
|------|----------|----------|
| 视觉 OCR 模型 | Qwen3-VL-2B-Instruct | CPU(OpenVINO 优化) |
| 合规分析模型 | Qwen3-14B INT4 | Arc 140V iGPU |
| Skill 框架 | FastAPI + Uvicorn | — |
| GPU 推理引擎 | openvino-genai LLMPipeline | Arc 140V |
| 图像处理 | Pillow + qwen-vl-utils | — |
| 接口规范 | OpenAPI 3.0 | — |
常见问题
Q:报错 Empty weights data in bin file?
openvino_model.bin权重文件缺失。执行git lfs pull或手动确认文件大小 ≥ 7 GB。
Q:OCR 输出乱码或完全错误?
确认 transformers ≥ 4.52(含
Qwen3VLForConditionalGeneration支持)。执行pip install -U transformers。
Q:GPU 设备未找到?
安装 Intel Arc 驱动及 OpenCL 运行时,然后验证:
import openvino; print(openvino.Core().available_devices) # 应输出包含 'GPU' 的列表
Q:能否部署为医院内网服务?
可以。
skill_api.py是标准 FastAPI 应用,支持 Docker 容器化部署,或直接绑定内网 IP 供 HIS 系统调用。
许可证
本项目采用 Apache 2.0 开源协议。
<div align="center">
零延迟 · 零云端 · 零数据泄露
-Built with ❤️ for ModelScope & Intel "AI PC Agent Skills" Competition 专为 Intel Lunar Lake AI PC 设计 · 参赛项目:ModelScope × Intel "AI PC Agent Skills" 竞赛
</div>
微信扫一扫