是什么与核心能力
这个项目的核心是把一个代码大模型训练成《用水彩作画》的画师:模型收到一段文字描述(例如 a peach hibiscus),不是直接出图,而是写出一段约 150 行的 JavaScript 代码,使用 p5.brush 库在画布上模拟水彩效果,最终渲染成图像。p5.brush 不是绘制几何图形,而是模拟真实媒介——颜料会洇出边界、纸面有纹理、笔触有质量、流场会牵引笔刷走向。当模型调用 brush.fillBleed(0.25) 时,它决定的是墨迹晕开多远。
整个流程的输入是文本提示,输出是一段可读、可编辑、可重跑的 JavaScript 程序,决策逻辑保留在代码注释里。这与传统文生图模型《提示词即杠杆》的方式不同,模型对每一笔的控制权更细。
关键技术原理
为了让模型真正学会这种风格,训练采用了强化学习中的 GRPO(Group Relative Policy Optimization)算法,配合 TRL 与 OpenEnv 框架。整个工作链路分四层:
- 受限的生成空间:p5.brush 一共暴露 47 个方法,但系统提示只允许 10 个:scaleBrushes、noStroke、fill、noFill、fillBleed、fillTexture、beginShape、vertex、endShape 和 circle。其他方法(线条、阴影、自定义笔刷)会破坏水彩质感,因此被刻意屏蔽。
- 沙箱化执行环境:环境内嵌 p5.brush 库、限制性系统提示、无头 Chromium 渲染器,以及一个守门器(gate)。守门器拒绝不符合规则的代码——例如未调用库而直接用 p5、画布上写字作弊等。
- 奖励函数四要素:
- gate(权重 0.05):代码能编译并渲染出真实颜料;
- length(权重 0.05):软性鼓励稍长的代码;
- pairwise judge(权重 0.60):用 Qwen3-VL-30B-A3B-Instruct 作为成对审美评判器,从池中随机抽 4 张参考图与候选作品同屏比较,正反顺序各跑一次,胜率即为得分;
- HPSv3(权重 0.30):开源的 7B 偏好模型,给出独立的美学评分。
- 手工筛选的参考池:池中 178 张画作分为 love 和 okay 两档,全部由四个开源模型(GLM-5.2、Kimi-K3、Qwen3-Coder-Next、Qwen3.5-122B-A10B)以 iNaturalist 上的真实扶桑花照片为提示生成,并由一位作者逐张打分。成对评判器每次从池中抽 4 张参考(一半 love、一半 okay),让弱策略也能拿到对比信号。
与上一代的差异
上一阶段的实验聚焦于《特写花朵》且未公开制品。本次复现的关键变化有三:
- 基座模型的迁移:基座由一个早期模型换成了 Qwen3.5-35B-A3B,这是一个 MoE(混合专家)架构,传统的 target_modules 列表只能命中约十分之一的线性层,导致 LoRA 几乎学不动。改用 all-linear 之后才能让适配器覆盖足够多的层。
- 训练器配置的四项修正:
- 学习率从 2e-5 提到 5e-5;
- 调度器从 linear 改为 constantwithwarmup(线性衰减在前半段就耗尽预算);
- scale_rewards 从 group 改为 none(避免守门器拒绝把整组优势压扁);
- target_modules 从手工列表改为 all-linear,命中所有线性层。
- 三
如何用起来:通过 OpenStarry 接入
如果你想直接用上 qwen 这类模型/工具,可以通过 OpenStarry 用一个 Key 快速接入,无需各自注册多个平台:
- 一个 Key 接入 13 款模型,完整兼容 OpenAI SDK,两行代码即可迁移;
- 官方原厂通道与自动容灾,节点异常时自动切换;
- 按量付费、人民币结算,模型调用费用以 OpenStarry 官网标价为准。
接入示例:
base_url: https://api.openstarry.com/v1
api_key: <你的 OpenStarry Key>
model: qwen3.7-max