Guides / 视频转图文攻略
CUA-S1-Forms:706K 参数的 Jev 型表单填写模型,CPU 就能跑
逐帧拆解 Fahd Mirza 的 8:52 实操:加载字节级 2.8MB 打分器,看它以 1.000 置信度选对电话号码,nvitop 全程 9MiB 纯 CPU 运行,最后经 CUA driver 写入真实的 Firefox 患者登记表单。
速览结论
CUA-S1-Forms 只做一件事:拿到表单元素和从文档里抽出的候选值,单次前向选出 fill、check、click 或 skip——它是填表管道的决策层,不是逐字段推理的 LLM。Hugging Face 卡片上的数字:706,000 参数、2.8MB,真实表单填写决策准确率 99.7%,对照 GPT API 约 83.6%。内部是一个微型字节级 transformer——两层、128 宽、4 个注意力头,直接读原始字节、不用 tokenizer——这正是它又小又快的原因。Fahd Mirza 在 Ubuntu 上的实跑把「小」验证得很诚实:机器上有 CUDA,这个在 Qwen 2.5 0.5B 基座上训练的打分器全程没碰 GPU,nvitop 停在 9MiB、利用率 0%。Demo 里最精彩的是语义消歧:同一份患者表单里同时有普通电话和故意长得像的紧急联系人电话,它以 1.000 的置信度填了紧急联系人——因为它读的是字段名,不是值的形状。后半段接上真实 GUI:开源的 CUA driver 实时读 accessibility tree,按 PID 和窗口 ID 列出窗口,把电话号码打进活着的 Firefox 患者登记表单——一个决策模型、一个 driver,全程没有视觉模型。
分步图文攻略
- 1
先认识模型:字节级选项打分器,不是填表 LLM
Hugging Face 卡片把 CUA-S1-Forms 描述为「small, byte-level System One one-pass option scorer for GUI form filling」。它不让 LLM 逐字段推理,而是把表单元素加文档候选值一次性送入,返回一个动作——fill、check、click 或 skip——每个选项带概率。卡片自述的测试:真实表单填写决策准确率 99.7%,对照 GPT API 约 83.6%,而它只有 706K 参数、2.8MB。

一件事,一次前向:元素加候选值,回来一个类型化动作。跳转至 0:15 - 2
加载 checkpoint,从配置读规格书
安装就是普通 Python:从克隆的仓库里 load_checkpoint("cua-s1-forms", device),配置会打印你在跑的到底是什么——一个两层的微型字节级 transformer,128 宽、4 个注意力头,直接读原始字节、不用 tokenizer,这正是它这么小这么快的原因。它的训练基座是 Qwen 2.5 0.5B,但真正做决策的是那个 706K 参数的打分头。

两层、128 宽、4 头、无 tokenizer——天生的小。跳转至 2:30 - 3
第一个决策:电话号码以 100% 置信度被填入
第一个测试给模型一个表单字段和从文档抽出的候选值:一个电话号码、一个出生日期,外加 check、click、skip 选项。输出给每个选项打分:fill 电话号码 1.000,其余全 0.000——出生日期被正确无视。这就是全部产品形态:一次前向、一个真实决策、一个可以设阈值的概率,整个链路里没有任何 LLM 犹豫。

每个选项都有分——管道只读赢家。跳转至 4:00 - 4
看 GPU 表:它压根没离开 CPU
测试中途,nvitop 讲出了硬件真相:RTX 4060 利用率 0%、显存 9MiB,模型照常工作——CUDA 就在那里,但这个 2.8MB 的打分器根本不需要它。这是这个量级决策模型安静的优势:不用规划显存、不占 GPU 队列,部署目标可以低到一台笔记本,甚至树莓派级别的小盒子。

4060 上只有 9MiB——模型在另一个世界:CPU。跳转至 4:18 - 5
消歧测试:紧急联系人 vs 普通电话
第二个测试才值得记住。表单里同时有普通电话和紧急联系人电话——值故意长得几乎一样。模型给紧急联系人字段的紧急号码打出 1.000,给形似值普通电话打出 0.000,因为它读的是真实的字段名和文档上下文,而不是匹配长得像的数字串。字段级语义消歧正是生成式猜测和正则管道最容易翻车的地方。

它读的是字段名,不是数字的形状。跳转至 5:18 - 6
经 CUA driver 接上真实 GUI
模型负责决策,总得有东西去碰屏幕。CUA 是控制真实电脑的 agent 开源框架,它的 driver 实时读 web accessibility tree。Demo 启动 driver 后调用 list_windows:JSON 返回屏幕上每个窗口——包括 Firefox 患者登记表单——每个都带进程 ID 和窗口 ID,代码可以直接指定目标。

PID 和窗口 ID 进,表单字段出——不截图,不上视觉模型。跳转至 8:15 - 7
写入真实 Firefox 表单,回到屏幕上验证
最后一步把整条链收口:带着 PID、窗口 ID 和 accessibility element token 调 set_value,把电话号码打进活着的患者登记表单,响应会报告发生了什么、可不可验证——delivery 状态和 affected 字段写得明明白白。回到浏览器,鼠标停在字段里,号码已经进去。2.8MB 的打分器选值,accessibility tree 打字,全程没人截图。

打分器决策,driver 落笔——从头到尾都是 accessibility tree。跳转至 8:06
常见问题(FAQ)
一句话说清 CUA-S1-Forms 是什么?
一个 706K 参数、2.8MB 的字节级「System One」打分器:把表单元素和文档候选值交给它,它单次前向返回一个动作——fill、check、click 或 skip——每个选项带概率。它是填表管道的决策层,和 Jev 型类型化决策同一品类;卡片自报真实表单填写决策准确率 99.7%,对照 GPT API 约 83.6%。
它真的只靠 CPU 运行吗?
视频里是的,而且证据就挂在表上。测试机有一张支持 CUDA 的 RTX 4060,但 nvitop 显示模型工作期间 GPU 利用率 0%、显存 9MiB——两层的字节级 transformer 只有 2.8MB,没有理由去碰 GPU。这就是这个量级的打分器和 LLM 管道的实际区别:不用规划显存,一台普通办公电脑就能跑。
它和 Jev、computer-use agent 有什么区别?
CUA-S1-Forms 是只干一件事的决策模型——表单动作;Jev 是托管的通用类型化决策 API。和解析原始截图的 computer-use agent 相比,这套栈读的是 accessibility tree:CUA driver 按 PID 和窗口 ID 列窗口、暴露表单字段、直接写入,比视觉方案更快、更便宜也更可靠。本站的 computer-use 指南讲的是 OS 级屏幕解析路线;这个模型展示的是同一套「先决策、后行动」形状在表单场景的特化。
它为什么能选对紧急联系人号码?
因为它读语义,不读形状。测试把普通电话和紧急联系人电话放进同一份文档——数字串几乎一样——然后让它填紧急联系人字段。它给紧急号码打 1.000、给普通电话打 0.000,因为字节级上下文里包含真实的字段名。换成正则或值相似度匹配,这就是一道五五开的猜题;字段名才是消歧器。
能用到自己的表单和文档上吗?
这正是它的设计形态:用你现有的解析器从文档抽候选值,让打分器判断哪个值填哪个字段,再用 CUA driver(或你自己的 UI 自动化)执行。模型在 Hugging Face 上开源,信任之前可以先读它的卡片、测试和训练说明。保持视频里展示的那份诚实:在概率上设阈值,低置信度的字段送去人工复核,而不是硬填。
谁做的?和 TypeSafe 有关系吗?
CUA-S1-Forms 是第三方开源项目——它上了收录 Jev 生态的 madewithjev 展示区,但不是 TypeSafe AI 官方产品。「System One」的命名表明的是品类:非生成、单次前向、概率背书的决策。视频是 Fahd Mirza 在 Ubuntu 上从公开 Hugging Face 仓库安装的独立实操。
相关推荐
Jev Computer Use:给 agent 用的 OS 级屏幕解析
截图解析的兄弟路线:没有 accessibility tree 可读时,agent 的本地 UI 状态方案。
阅读Jev + Claude Code:语音控制浏览器自动化
类型化决策驱动真实浏览器——表单级动作之上的 agent 编排层。
阅读Jev 简历筛选:类型化评估实操
同一形状在重文档工作流里的应用:先抽取,再用类型化问题和阈值决策。
阅读文档分类:填写之前先拆分文档包
上游步骤——Noul 边界问题把混合文档拆干净,字段抽取才有干净输入。
阅读更多视频攻略
- Jev 极速分类实战:从 API 调用到 Choice/Score/Noul 三大原子类型
- 7 分钟透析 Jev 架构:为什么 70ms 决策模型颠覆了 LLM 自动化工作流?
- Jev 赋能极速浏览器 Agent:178ms DOM 决策循环与双模型协作实战
- OpenJevs 开源 Jev 模型全景:Semif、Nimble、Decider、DiffusionGemma 与 Laya 实测
- Jev 会取代 LLM 吗?Krish Naik 白板图解 Jev vs LLM 与混合架构
- Jev Trader 教程:在 Monad 上搭建亚秒级 AI 交易机器人
- Jev Model Router 实战:用 Jev 搭建带隐私门控的本地模型路由器
- Jev 入门教程:State、三类问题与 TypeScript SDK 实操
- 本地跑 Jev:Kev、SemIf 与 Von,自己的 GPU 就够了
- Jev RAG Reranker 实战:用可执行 criteria 打造策略化检索重排
- Jev 什么时候该用:工程视角核实宣传口径、守门与失败模式
- LangChain + Jev 集成实战:路由、护栏与评测
- Jev MCP Server 接入指南:把 Jev 决策层接进 Claude Code 与 Cursor
- Jev vs Luna 独立基准实测:「更快更准更便宜」是真是假?
- Jev Agent Harness 实战:决策闸门该装在 LLM 循环的哪个位置
- Jev Playground 实测攻略:热狗课程、criteria 校准与四平台 token 账单
- Jev 文本分类 API 实战:用 classifier.dev 打通零样本 CLI 与 REST 调用
- Jev API 实战示例:第一条 curl、载荷结构与三种问题类型
- 用 Expanso Edge 和 Jev 搭建日志分流流程
- Treg + Jev 线索丰富:ICP 分类与注册用户评分
- 在 Heym 中使用 Jev 决策节点:语言判断与模型路由
- Laya 上手教程:开源自托管决策引擎的安装、路由与概率校准(Laya vs Jev 实操)
- 训练自己的 Jev:花 $5–$17 微调一个 Jev 式决策模型(能训什么、不能训什么)
- Jev 实用技巧:拿到更好决策结果的 8 条最佳实践(state、questions、criteria 与阈值)
- Jev 上下文压缩实战:不用生成式摘要,直接剪枝 Agent 记忆
- Jev 当 LLM 评审:置信度级联,只要强模型 0.36% 的成本
- TypeSafe Computer Use 实操:用 Jev 做本地桌面自动化
- Jev 简历筛选实战:Express + Jev JavaScript SDK 搭一个 AI 简历评估器
- Jev + Claude Code 实战:语音控制浏览器,类型化决策全程接管
- Jev vs Ollama:本地跑 AI 决策,数据不出门真的可行吗?
- 自己动手造一个 Jev:免费开源零样本分类器(还能打 Doom)
- 用 Jev 做 NOC/SOC 告警分诊:规则先行、一个类型化问题、一道策略闸门