Skip to content

Latest commit

 

History

History
186 lines (117 loc) · 22.5 KB

local-widget-model-plan.md

File metadata and controls

186 lines (117 loc) · 22.5 KB

ScriptWidget Mac 本地生成模型调研与微调方案

调研日期:2026-10-23。范围更新:仅考虑 Mac 本地模型,Web、iPhone 和 iPad 推理不在本计划中。状态:研究提案,尚未下载模型权重、运行推理、训练模型或接入产品。本文中的内存、资源预算和质量门槛是待验证的规划,不是实测结果。

当前优先级

根据新的产品方向,建议先交付外部 Coding Agent 的 Skill、校验与预览工作流,复用用户自己的模型;本地模型与微调保留为后续选项,不作为这条工作流的前置条件。下文保留 Mac 模型研究,尚未启动实施。

1. 建议与首轮范围

建议做一个我们维护的 Widget 专用模型:以 Qwen3.5-4B 为首轮微调候选,Qwen3.5-2B 为低内存对照,仅面向 Apple Silicon Mac。取消跨浏览器部署约束后,优先验证 4B 的生成质量;这是一项选型假设,最终仍以基线评测为准。先用基础模型、精简 API 检索和现有执行反馈建立基线,再进行 LoRA/QLoRA 微调;只有微调带来明确增益才发布自有模型。模型依据及固定 revision 见来源快照。

“自己的模型”指可追溯的基础权重、我们有权使用的数据、自有适配器、评测报告与版本化分发产物。可以暂定名 ScriptWidget-Creator-4B-v0.1;这只是提议名称,尚未创建 Hugging Face 模型仓库。基础模型的许可证、归属和 NOTICE 继续保留。

产品入口为 macOS Studio 内的本地 Agent,最终目标是下载一次后无需额外安装服务即可断网生成。首轮完成“描述需求 → 生成单个 JSX → 原生执行 → 最多两次修复 → 展示预览 → 用户保存副本”。支持中文和英文、组件尺寸、浅深色、离线示例数据,以及对已有 JSX 的有限修改。先不做截图反推组件、多文件自主 Agent、自动登录服务、模型自行安装插件或后台自主发布。

这是未来独立研发项目,不要求修改当前已送审的版本。本次提交只有调研与计划。

2. 为什么需要专门适配

ScriptWidget 使用自己的 JSX 方言和宿主 API。普通模型容易写出 React、React Native、DOM、Node.js 或其他 Widget 工具的代码,即使通用编程能力不错,也可能完全不能运行。我们要训练的是正确使用本项目的标签、属性、$render、异步 API、存储和权限约束,而不是泛化地“学会 React”。

可靠性需要模型与宿主一起提供:模型生成候选,宿主提供明确的 API 资料、受控执行、错误反馈、预算和保存流程。微调不能替代权限校验,能渲染也不代表符合用户要求或视觉质量合格。

当前代码中可复用的部分:

位置 当前能力 本地模型需要补充的部分
AIClient.swift、AISettings.swift 原生端已有 Ollama、OpenAI-compatible、自定义地址及无鉴权选项;凭证保存在 Keychain 验证具体本地服务器;增加有界生成预算、取消与加载状态;不能假设已有 Qwen thinking 配置
AgentLoop.swift 生成、执行、错误反馈、修复;产物为单个 JSX 本地配置限制为首次生成加两次修复,控制上下文;以后嵌入推理需要抽象 provider 接口
AgentRuntimeBridge.swift 独立临时预览包、原生执行与结果 明确使用固定 mock、禁止真实授权与敏感数据访问的生成验收模式;不能假设当前临时目录等同于完整隔离
PromptBuilder.swift 单段 JSX 输出、ScriptWidget 语法说明、尺寸约束 适合小上下文的精简版本化参考资料与按需检索
AI 质量检查 固定需求、真实生成/执行/修复、原生截图和回放 扩展成本地模型对照实验和独立留出集;现有在线测试的凭证条件需适配

3. Hugging Face 候选比较

下表的参数量来自模型仓库 safetensors 元数据,包含仓库中的相应模型模块,不能简单当作纯文本部署的精确内存。许可证按本次固定 revision 核对;兼容性只代表上游代码或配置存在,尚未在 ScriptWidget 上运行。

候选及一手来源 许可证 / 总参数约数 建议角色与取舍
Qwen3.5-2B Apache-2.0 / 2.27B 低内存对照,必要时作为轻量档;MLX 上游有架构实现,需验证文本权重转换与实际质量
Qwen3.5-4B Apache-2.0 / 4.66B 首轮主候选。优先面向 16GB 及以上 Apple Silicon Mac,验证质量与并发预览内存,尚未实测
Qwen3-4B-Instruct-2507 Apache-2.0 / 4.02B 纯文本、非思考模式对照;需核对 MLX 转换、tokenizer 与聊天模板
Qwen2.5-Coder-1.5B-Instruct Apache-2.0 / 1.54B 较小代码模型备选;只有 2B 仍不满足轻量档资源目标时再加测,避免扩大首轮矩阵
Qwen2.5-Coder-7B-Instruct Apache-2.0 / 7.62B Mac 上的代码质量对照,或大内存 Mac 的离线合成数据教师,不作为首轮默认下载
Qwen3.5-0.8B Apache-2.0 / 0.87B 后续低内存实验,优先模板选择与参数修改;不预设能承担完整生成与修复
SmolLM3-3B Apache-2.0 / 3.08B 非 Qwen 对照。模型卡说明中文训练占比较低,需中文任务实测,首轮不优先投入微调
Gemma 4 E2B-it Apache-2.0 / 5.12B 新的备选。E2B 指有效参数规模,包含 embedding 后不是 2B 权重;MLX 架构与转换兼容性需单独验证,首轮不投入接入
Qwen3-Coder-30B-A3B-Instruct Apache-2.0 / 30.53B 大内存开发机上的质量上限或教师。约 3.3B 活跃参数不等于只存 3.3B 权重;4-bit 权重理论下限已约 15.3GB,实际更高
Qwen2.5-Coder-3B-Instruct Qwen Research / 3.09B 排除默认商业分发路线。该版本许可证只直接授予非商业使用,商业用途需另行获得授权,不能与 1.5B、7B 一概视为 Apache-2.0

Qwen3.5 默认会思考。首轮采用其官方支持的 enable_thinking=false 聊天模板配置,避免思考输出挤占代码预算;当前 AIClient 没有该参数透传,应先由本地服务器模板控制,再决定是否增加适配字段。不能只在提示词里写“不要思考”便当作已经关闭。模型卡说明。3B 的商业限制以固定版本 LICENSE为准。

不根据公共编码榜直接宣布胜者。若 2B 加检索已经达到产品门槛,可以保留更小方案;若 4B 没有明显质量收益,也不应仅为参数量更大而选择它。7B 作为质量对照,只有收益足以抵偿下载与内存成本时再考虑产品化。

4. Mac 部署与设备范围

原型:复用现有本地服务入口

原型优先使用现有 Ollama / OpenAI-compatible 入口连接本机推理服务器,验证真实 Agent 循环。这不要求先给 App 增加模型 SDK。服务器必须明确绑定 loopback;本地调用不需要把提示词传给云服务。用户需安装服务的原型,不等同于最终“一键离线”体验。

产品:macOS Studio 内嵌 MLX

如原型达到门槛,产品内嵌优先评估 MLX Swift LM,使用 Metal 和 Apple Silicon。上游已有 Qwen3.5 与 LoRA 实现,但仍需验证目标权重转换、量化、取消、资源释放和构建体积。其固定版本 Package.swift 最低要求 macOS 14,应将该功能按平台/系统隔离,不因此提高整个项目或 iOS App 的最低版本。固定版本源码。

训练使用 MLX LM,App 推理使用 MLX Swift LM;二者是训练工具与产品运行时,不是在 App 内嵌两套推理后端。llama.cpp 可作为 Mac 上的 GGUF / Metal 替代路线,只有 MLX 遇到实际阻碍时再评估,不同时接入。已有 Apple Private Cloud Compute provider 是另一条服务路径,不应标为完全离线或我们自行微调的本地权重。MLX LM 上游、llama.cpp 上游。

设备与离线验收

目标 首轮定位,均待实测
Apple Silicon、16GB 及以上 4B / 4-bit 的主要产品验收范围,必须同时测编辑器与原生预览
Apple Silicon、8GB 仅作为 2B 轻量档可行性实验,不承诺首版支持,也不阻塞 4B 主线
Apple Silicon、24/32GB 及以上 本机微调试验候选,同时测 7B 质量对照;完整训练是否可行以 100 步试跑决定
Intel Mac、旧版 macOS 本次内嵌 MLX 功能不覆盖,普通编辑与已有 provider 按现有兼容范围继续提供

仅在 Mac App 的生成阶段运行模型,macOS WidgetKit 扩展只运行保存后的 JSX。权重不放进脚本包、共享容器或 iCloud 脚本同步,不把推理引入 timeline。取消、重试与项目切换需重置 KV 和 Qwen3.5 的循环状态;要测试反复生成后的内存释放和不同项目间的上下文隔离。

离线安装包包括模型、tokenizer、聊天模板、配置与版本化 API 资料。首次下载需要联网;下载完成后必须测试断网冷启动、生成、修复、预览和保存。界面需显示体积、进度、空间不足、下载损坏、删除及重新下载状态。卸载模型后普通编辑仍可使用。设备不足时明确提示,用户另选已有 provider,不静默切换到云端。

WebLLM、MLC 导出、浏览器缓存、localhost 桥接和 iOS 设备适配均移出执行计划。来源快照中的 Web 推理资料仅保留为原始调研记录,不构成后续开发 TODO。

5. 生成流程与模型边界

  1. 用户选择尺寸、语言和“本地生成”,输入需求;真实数据来源或权限不明确时先询问。
  2. 根据版本化 API 索引,选取相关组件/API 说明与最多两个示例。先用关键词与结构化标签检索,初期不再增加 embedding 模型。
  3. 拼接有限上下文,生成单个 JSX。提示词明确本项目 JSX、$render 规则、允许 API 和当前能力;当前单段生成不引入 React/Node 导入。
  4. 在显式固定 mock 的预览环境执行,保留运行时限制。错误时只回传必要诊断和当前代码,最多修复两次;截断、超时、OOM 和取消均按失败记录。
  5. 展示预览、代码变化与需要的权限。保存新副本或经用户确认应用修改,使用项目 revision 检查,避免覆盖并发编辑。

在 macOS Studio 中复用现有 Swift Agent,内嵌推理时把当前具体 AIClient 调用整理为可替换接口;为 Mac 增加模型下载、加载、取消与卸载状态,避免阻塞编辑器主线程。MLX 依赖只进入 Mac App 的相应模块,不加入 widget 扩展、iOS 或 Web。

首轮以 4096 token 总预算试验,例如输入不超过 2500、输出不超过 1300,其余留给模板开销。实际以 tokenizer 计数并拒绝超预算,不简单按字符截断。长组件可能不适用这个预算,应明确反馈或在 Mac 验证后提供 8K 档;模型卡的 128K/262K 上限不等于本地实际预算。每次修复重新压缩上下文,不能无限累积历史。

6. 训练数据:从已有模板变成可审核数据集

现有模板是种子,不能仅把 JSX 文件批量复制就当成完成训练集。当前 release 校验覆盖 91 个模板;正式建集时重新生成清单并记录源 commit、内容 hash、模板族、运行时/API 版本、许可证和审核状态。

先审核 300–500 条高质量样本,再扩充到约 3000–5000 条通过验证的首轮 SFT 数据。数量是规划值,不是现有资产。建议配比:40% 从描述生成、30% 在已有组件上修改、20% 错误修复、10% 澄清与超出能力处理。最后一类应在 Agent 的控制层返回澄清,不能把解释文字当 JSX 执行;训练与推理必须使用一致的明确模式标识。

重点覆盖中文/英文、日期与 Unicode、八种尺寸配置、浅深色、习惯热力图的示例记录与真实存储逻辑、图表、空数据、权限拒绝、超时和数据缺失。模板的同布局变体、翻译、颜色变化和修复轨迹必须属于同一数据分区。

数据进入训练集前必须同时通过:

  • 来源与许可证核对。本仓库 MIT 不代表 Gallery 中所有第三方脚本、图片和字体都可直接训练、再分发。
  • 静态契约与运行检查,以及相关尺寸的 Mac 原生浅深色截图审核。训练与截图验收均固定 macOS runtime 版本。
  • 输入与输出脱敏,不含用户私有组件、真实健康/位置记录、token、账号或服务器敏感响应。
  • 语义审核:需求中的值、行为、布局和权限与结果一致;不能只筛选“未报错”。

大模型可以生成候选任务、变体和修复轨迹,仍需上述过滤。优先本地教师;若后续使用云教师,只能发送经过许可的合成材料,并核查其使用条款是否允许相应训练用途。不开启用户提示词或代码的默认采集,不训练隐藏思维链。

7. 微调方法与资源预算

首轮采用监督微调 SFT + LoRA/QLoRA,保持基础模型能力,重点教会 ScriptWidget 方言、API 选择、修改与错误修复。不要从零预训练,也不先做强化学习或全参数训练。

训练也优先在 Apple Silicon Mac 上使用 MLX LM,减少首轮工具链数量。先用 100 步验证 Qwen3.5 当前架构、聊天模板、loss mask、适配层、显存和收敛;不能把只针对传统 attention 的 q_proj/v_proj 配置直接套到混合架构。用 assistant 输出监督,排除 prompt、填充和不需要的思考 token,固定 EOS 与推理时一致的模板。MLX LoRA 文档。

起始参数作为待调配置:LoRA rank 16/32、1–3 epoch、4K 最大序列、按有效 token 做 packing、固定随机种子;学习率用小规模验证集选择,不把一组参数写成所有模型通用配方。优先选择验证集最优 checkpoint,避免仅因训练 loss 更低而继续训练。

环节 首轮资源规划,均需实测
4B MLX LoRA/QLoRA 训练 先在 24/32GB 及以上 Apple Silicon Mac 做 100 步短跑;实际受序列、batch、量化与适配层影响,不能保证该内存足够
2B 训练 只有低内存产品档确有必要时再做;不与 4B 同时启动完整训练
2B 本地推理 4-bit、短上下文按约 3–5GB 工作内存预留;还要给系统、编辑器和预览留空间
4B 本地推理 先按约 5–8GB 预留;Mac 首轮测试优先 16GB 及以上

这些区间是工程预算假设,不是下载大小、设备规格或测量值。权重大小、KV/循环状态、运行时缓存、预览和峰值分配必须分别记录。

训练前先计数真实 token。例如 3000 条、平均 1200 token 为 360 万 token,一个到三个 epoch 为约 360–1080 万 token。100 步试跑后,用实际每步耗时与有效吞吐估算全程,再加数据处理、验证和导出耗时,设置费用与时长上限后才启动完整训练。本次研究不租用 GPU,也不产生训练开支。

导出顺序为:基础模型固定 revision + 适配器 → 合并为受支持的高精度中间权重 → 转换/量化到 Mac 使用的 MLX 格式 → 重新评测。不能假设 MLX 的 GGUF 导出自动覆盖 Qwen3.5;如需要 GGUF,须独立验证 llama.cpp 转换工具。首轮只交付一种 Mac 推理格式;不要求 MLC、ONNX 或其他平台产物。

8. 评测:决定是否值得拥有这个模型

先建立至少 300 条封存测试任务,训练集、调参验证集与测试集在任务构建前按模板族/布局来源分开。训练数据生成器和教师不能看到封存任务。现有 AIEvalCase 的标准用例来自模板描述;一旦这些模板参与训练,其结果只能算回归,不能宣称为未见任务泛化。

测试覆盖新需求、修改、修复、中文/英文、全部尺寸、浅深色、缺失数据、API 边界、拒绝权限、恶意提示与非法路径。保留人工设计的新布局与组合任务,避免只检验模板复述。

对主候选做同预算的 2×2 对照:基础模型 / SFT 模型 × 无检索 / 有检索。先比较基础 4B、2B、Qwen3-4B-2507 与 Coder-7B;只有主候选进入首轮训练,不为所有候选各做一次微调。统一采样配置、输入输出预算与首次生成加两次修复,固定三组种子,报告全部失败。

分别报告首轮成功率和修复后成功率、原生执行通过率、需求语义完成率、人工视觉接受率、权限违规、截断、超时和 OOM。记录 P50/P95 首 token 时间、完整生成时间、tokens/s、冷/热加载、峰值内存与下载体积;当前没有任何实测速度承诺。

以下是拟定的发布门槛,需在第一阶段冻结定义;不是当前成绩:

指标 初始门槛
首次输出语法与输出格式有效 ≥95%
最多两次修复后原生执行通过 ≥90%
独立新需求语义完成 ≥85%
原生浅深色截图人工接受 ≥80%,双人盲评并记录分歧
固定安全负例的越权执行 0;不能因模型拒绝就跳过宿主拦截测试
微调收益 相同检索与预算下,相比基础模型语义完成率提高 ≥10 个百分点,或失败率降低 ≥25%;关键切片不下降超过 3 个百分点
转换/量化 高精度与 Mac MLX 量化复跑同一套用例,差异须解释并满足以上门槛

整体比例附 95% 置信区间;同任务的模型差异采用配对统计,三次采样不能当作三倍独立需求。速度与内存门槛按目标设备试跑后冻结,不能只看开发机平均值。模型自身可靠性与 Agent 修复收益分开呈现。

9. 离线、权限和分发要求

本地模型推理传输属于宿主能力,不通过 widget 的 $http 实现,也不为它放宽 Package 2.0 的私有地址、networkDomains 或权限规则。脚本、导入包、Skills、检索片段和模型输出都属于不可信内容。

生成预览只用显式 mock,不自动请求系统权限、读取真实健康/位置、调用真实服务或写入用户现有包。临时文件只在受控目录内,保留路径、归档、网络和执行预算校验。Skills 仍然只增强提示,不能给模型授予工具权限;需要的包 manifest 由宿主验证,不能凭模型声明扩大权限。

模型文件单独存储。只从维护的固定来源下载,校验大小与 SHA-256,配置、tokenizer 和可执行模型库也需版本匹配;不执行任意模型仓库 Python,不依赖 trust_remote_code。提供断点恢复、空间检查、取消、删除及损坏后重新下载。不能把模型分发伪装成 Gallery 脚本安装。

最终分发清单需记录 base revision、adapter hash、数据集版本与许可汇总、训练/量化配置、运行时版本、API snapshot hash、文件大小/校验和、适用设备、评测报告、已知限制及许可证。只有通过评测与许可核对后,才在我们控制的 HF namespace / CDN 发布权重。

实验模型可先保存在私有仓库。Mac 产品优先使用公开、可校验的权重下载;若未来需要私有分发,另行设计用户授权流程,不在 App 二进制、配置或脚本中内置共享 HF token。推理、训练和遥测默认不上传用户内容,也不静默调用云端补救。

10. 分阶段执行与停止条件

阶段 必须交付 进入下一阶段的条件
A:基线与导出探针 冻结任务/许可清单;4B/2B/纯文本 4B/代码 7B 基线;4B 在 Mac 本地服务和 MLX 各跑通生成/修复案例;16GB 目标机资源报告 Mac 主路径可用,MLX 导入探针通过,预算与质量差距明确;如果是兼容问题先解决,不立即训练
B:数据与小规模 SFT 人审种子集、隔离的数据分区、3000–5000 条可用样本、Mac 上 100 步资源试跑、4B adapter 与复现实验记录 独立验证集显示收益,无明显中文/权限/修改能力退化;否则修数据或停止投入
C:独立测试与 Mac 产物 封存任务报告、量化回归、Mac MLX 产物、原生截图盲评、离线冷启动和中断恢复测试 满足质量门槛及目标设备资源预算;4B 收益不足时重新选择 2B 或缩小任务,不自动追加多模型训练
D:产品接入与小范围发布 下载/删除/能力探测、Mac provider 接口与 Studio 界面、取消/保存冲突处理、模型卡、许可与分发清单 Mac 端到端验收通过后再安排 macOS App 发版

每阶段先交付可检查的报告,再决定下一阶段,不在本次研究后自动启动长期开发。若仅检索就达到门槛,可以先提供本地模型能力,把自有微调推迟;若微调没有稳定收益,不发布一个只换了名字的模型。

后续 TODO:多文件包生成、参考截图输入、0.8B 蒸馏、偏好训练和自动任务规划。这些均不属于首轮交付。

11. 证据与本次交付

上游模型和推理库会变化,选择时以固定 revision 的来源快照复核。本文的“支持”仅表示本次检查发现相关实现或配置,未完成实际兼容、性能或生成质量验证。

本次交付包括本方案、10 个模型的元数据/许可证来源、推理库固定版本记录,以及现有 AI 质量文档的索引链接。没有训练权重、产品实现或发布变更。下一步最值得做的是阶段 A:在 Mac 上用实际 ScriptWidget 需求比较 4B 的质量收益和 2B 的资源优势,再决定训练投入。