Instructions to use fzkun/kev-queue-v4-4b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use fzkun/kev-queue-v4-4b with PEFT:
from peft import PeftModel from transformers import AutoModel base_model = AutoModel.from_pretrained("Qwen/Qwen3.5-4B-Base") model = PeftModel.from_pretrained(base_model, "fzkun/kev-queue-v4-4b") - Notebooks
- Google Colab
- Kaggle
KEV Queue-v4 4B:中文排队位置决策模型
基于 KEV 框架微调的中文排队位置决策模型。输入现有队列和明确的插入规则,输出候选位置的概率分布及 position_N 选项。模型不生成自由文本,也不用于医疗诊断或判断患者病情紧急程度。
本仓库包含 LoRA 适配器和 KEV 决策指针头,不包含完整的基础模型权重。运行需要指定版本的基础模型、KEV 框架、分词器和推理代码;直接用通用文本生成管线加载适配器,无法复现本模型的决策输出。
公开网页是 确定性规则演示,不调用微调模型。本地版本通过服务端代理调用内网模型 API,并对照规则答案。网页后来新增的普通报到后移策略不属于本模型原有训练范围,不能用网页中的规则计算结果代表模型准确率。
支持的排队规则
| 策略 | 匹配条件 | 搜索阈值 | 插入间隔 |
|---|---|---|---|
| 回诊 | IsReturnWait=true 且 Emergency 严格等于“回”“转”“续”之一 |
前 7 人有匹配,才继续搜索全队最后一名匹配者 | max(1, 配置间隔) |
| 献血优先 | 标记包含“献血”,不要求回诊标志 | 前 5 人有匹配,才继续搜索全队最后一名匹配者 | 1 人 |
| 家优优先 | 标记包含“家优”,不要求回诊标志 | 前 5 人有匹配,才继续搜索全队最后一名匹配者 | 1 人 |
阈值范围内没有匹配时,就停止向后搜索。只要阈值范围内出现匹配,代码会继续搜索全队,队列总人数超过阈值不会导致搜索停止。
设原队列人数为 N,有效间隔为 g,全队最后匹配者的 1 基位次为 L;前缀阈值未开启时取 L=0。标准答案为:
插入位置 = min(N, L + g) + 1
原有患者的相对顺序保持不变。候选名称 position_16 已表示 第 16 位,不要再加 1;模型置信度不是位置编号,也不是正确率保证。
评估输入假定新患者 X 不在原队列中。已有患者重排时,业务系统应先正确移除目标患者,再根据当前队列计算插入位置。
普通报到与已调整位置的边界
call-system 的普通报到流程还会按排队号计算候选位置,跳过候选落点后连续的已调整患者,在第一个未调整患者之前停止。该流程与回诊、献血、家优的搜索算法不同,不能统一追加到所有策略中。
公开网页已增加这个规则的模拟场景,但 本模型尚未针对普通报到、调整状态、跨班次或加号规则重新训练。这些操作应由业务代码处理。网页保留源码 index < len(list)-1 的后移扫描边界,仅演示同班次普通号。
训练方法与参数
此次实际训练采用 多任务监督微调(SFT)和对称的候选排列一致性 KL 约束,没有进行 RL 或 RLCD。
| 项目 | 配置 |
|---|---|
| 框架 | KEV,源码版本 fe64b1274ea7f80d4095866df90666abb03e9cf6 |
| 基础模型 | Qwen/Qwen3.5-4B-Base@1001bb4d826a52d1f399e183466143f4da7b741b |
| 初始化权重 | Queue-v3 的 KEV 适配器与指针头,最初继承自 jaredpalmer/kev-4b |
| 训练方法 | 多任务 SFT + 对称的候选排列一致性 KL |
| RL / RLCD | 未运行 |
| 训练记录 | 7200 条:4800 条主要队列样例 + 2400 条辅助样例 |
| 主要样例组成 | 回诊 3300 条、献血 750 条、家优 750 条 |
| 辅助任务组成 | 前缀阈值判断 650 条、最后匹配定位 650 条、算术 900 条、匹配判断 200 条 |
| 主要提示词格式 | 60% 公式格式、40% 统一描述格式 |
| LoRA | 秩 16,覆盖全部目标模块 |
| 指针头维度 | 256 |
| 精度 | 冻结的基础模型使用 BF16;可训练适配器与指针头使用 FP32 |
| 学习率 | 1e-5 |
| 优化步数 | 900 步,1 个训练轮次,批大小 1,梯度累积 8 |
| 训练 state 上限 | 1280 tokens |
| 排列一致性 KL | 权重 0.03;符合条件的记录以 0.25 概率采样 |
| 最终提示词 | 根据开发集选择 formula 格式 |
| 概率校准 | 温度 0.25,基于合成任务校准 |
训练和评估均使用合成数据,没有使用生产患者记录。标签由确定性的 Go 排队规则生成。评估队列排列与训练数据、前几轮实验数据分离;通用规则描述模板也出现在训练中,因此评估不是未见过措辞的泛化测试。辅助任务不会把已经解出的最后匹配位置或答案作为主要位置决策任务的输入特征。
KL 约束用于减少打乱候选顺序造成的输出变化,本身不能保证位置正确;本次没有进行关闭 KL 的消融实验。温度影响置信度,不改变获胜候选。
评估结果
新生成的合成队列
| 测试集 | 回诊 | 献血优先 | 家优优先 | 总体 |
|---|---|---|---|---|
| 普通队列,8–24 人 | 298/300 | 150/150 | 150/150 | 598/600,99.6667% |
| 长队列,25–32 人 | 224/225 | 112/112 | 113/113 | 449/450,99.7778% |
统计覆盖全部样例,没有按置信度过滤。训练已包含长队列的长度和间隔取值,因此长队列测试验证的是新队列排列,不代表对未见过长度或间隔的外推能力。180 个候选逆序样例的位置一致性为 180/180,位置准确率为 179/180。尚未评估生产数据准确率。
回诊、优先和过号标记混合的功能测试
| 测试项目,原始候选顺序 | 位置完全正确 |
|---|---|
| 回诊 | 29/30 |
| 献血优先 | 25/25 |
| 家优优先 | 25/25 |
| 新增迟到报到流程提示词 | 6/6 |
| 新增手工指定位置重排提示词 | 2/6 |
新增流程提示词不属于原训练的策略类型。手工指定位置重排应由确定性代码执行。在这个混合测试中,候选逆序还引入了一个额外的回诊错误。有错误位置的返回概率接近 1,因此高置信度不能替代规则核验。
加载与 API 接入
建议在 Docker 中使用指定版本的 KEV 源码及兼容依赖。已验证部署采用 PyTorch 2.8.0、transformers 5.17.0、peft 0.21.0、flash-linear-attention 0.5.2,并保留参考卷积回退实现。更换计算内核可能改变概率和最终位置。
# 在包含指定版本 KEV 及兼容依赖的 Docker 环境中执行:
export KEV_BACKEND=torch
export KEV_DTYPE=bf16
export KEV_MERGE=0
export KEV_TEMPERATURE=0.25
export KEV_FUSED=0
export KEV_CUDA_GRAPHS=0
export KEV_PREFIX_CACHE=0
python -m kev.serve --run /models/kev-queue-v4-4b --host 0.0.0.0 --port 8000
上面的原生启动方式提供 KEV API,但不会自动复现所有自定义容量限制和数值行为。实际验证的封装见 deployment/service.queue.py 和 deployment/compose.queue.yaml:输入分支不超过 2048 tokens 时,使用与离线评估相同的模型前向及问题读出;更长输入使用框架的节省内存注意力上下文和原生服务路径。
该封装避免了 BF16 原生服务路径在一个短队列功能样例上的位置差异。最终 184 个功能 HTTP 请求的位置与离线输出完全一致(184/184),这表示部署与离线结果一致,不表示所有答案正确。
TypeSafe 兼容接口的请求结构如下:
{
"model": "jev-latest",
"state": "按顺序列出原始患者、准确规则和通用插入公式",
"questions": {
"position": {
"type": "choice",
"instructions": "选择新患者最终插入的位次,位次从1开始。",
"criteria": {
"position_1": "第1位",
"position_2": "第2位"
}
}
}
}
这只是结构示意,不是已评估的完整队列提示词。实际公式模板请使用 example-request.json 和 format.py;必须包含从 1 到 N+1 的所有候选位置。不要把训练标签 label 或训练元数据发送给推理 API。
读取 answers.position.choice,或选择概率最高的 候选键,不能把数组下标当成位置。业务输入格式可以自定义,但应先映射到已经验证的模型输入格式;新提示词和新规则需要重新评估。
上下文容量与使用限制
- Docker API 已验证中文、英文长输入及恰好 8192 个总输入 tokens 的请求。state 或 state 加某个问题分支超过配置上限时返回 422,不静默截断。
- 支持 8K 输入不代表 8K 队列准确率已经验证。 位置评估使用较短的公式格式,最多 32 人;训练 state 上限为 1280 tokens。
- 不用于医疗紧急程度、诊断、资格认定或治疗决策,只计算明确指定的排队规则。
- 尚未验证生产数据库、缓存、并发操作和已有患者重排的端到端正确性。
- 业务要求精确位置时应保留确定性规则校验;错误答案也可能有很高置信度。
- 适配器和指针头需要原始指定版本的基础模型,本仓库不包含完整基础权重。
文件与复现
| 文件 | 内容 |
|---|---|
adapter_model.safetensors、adapter_config.json |
LoRA 适配器及配置 |
head.pt |
KEV 决策指针头和架构元数据;只加载可信来源的 PyTorch 检查点 |
tokenizer.json、tokenizer_config.json、chat_template.jinja |
分词器和模板 |
training_config.json、training_metrics.json |
训练配置与实测指标 |
reports/ |
训练准确率、混合功能测试、API 容量与部署一致性报告 |
format.py、rule_templates.py、example-request.json |
推理格式参考 |
deployment/ |
Docker 服务封装与配置 |
已核验权重 SHA256:
adapter_model.safetensors
11a94573ecca10b34794e5ce2573f8186a7c37564b27b7d28ff448cd9226de5d
head.pt
bd6eddb818e91917b46c46e064fa7c2be8a48241b817fd19e27ee8c86ab6575c
模型继承自 KEV 和 Qwen3.5,采用 Apache-2.0 许可证。本仓库与演示 Space 均公开;上传内容不包含 API Key、Hugging Face Token 或患者记录。
- Downloads last month
- 30
Model tree for fzkun/kev-queue-v4-4b
Base model
Qwen/Qwen3.5-4B-BaseSpace using fzkun/kev-queue-v4-4b 1
Evaluation results
- 插入位置完全正确率 on Queue-v4 新生成的合成普通队列self-reported0.997
- 插入位置完全正确率 on Queue-v4 新生成的合成长队列self-reported0.998