Qwable-9B-Claude-Fable-5 · StraTA RL (个人复现)

声明 / Attribution:本仓库是对 StraTA (Strategic Trajectory Abstraction for Agentic RL, arXiv:2605.06642)个人爱好者独立复现非官方实现,与论文原作者无关。代码、超参与结果均为个人实验产物,正确性不作保证。如需权威实现请参阅原论文。

基座模型:empero-ai/Qwable-9B-Claude-Fable-5(Qwen3.5-9B,混合 Gated DeltaNet 线性注意力 + <think> 推理)。

⚠️ 先读:这个模型能干什么、不能干什么

它是 9B 的 agentic 编码智能体(StraTA RL 产物),不是通用聊天 / 通用编码 LLM

  • ✅ 能干:给一道有可执行验证标准test_command)的简单–中等编码题,它在沙盒里自主 write/read/bash/test,迭代到通过。
  • ❌ 不能干:① 开放式工程(如"做个闹钟 APP"——无规格/无验收命令,无法驱动);② Hard 算法题(超出训练难度);③ 当通用 chat / Codex CLI 后端(只认 STRATEGY/ACTION_PROMPT 固定格式,自由对话 = OOD = 半截 / 空回复)。
  • 实测fib(简单)1 步一遍过;LFU 缓存(Hard)6 步失败(算法结构正确,但实现有语义 bug、且自我调试偏弱)。
  • 正确用法见下方「方式 C(Agent loop)」;别裸 generate("写个 HTML")

在单卡 A800-80GB 上,对 9B 基座做 SFT 格式对齐 → 分层 agentic GRPO 强化学习,训练一个多步交互的编码智能体(在 CodeGym 沙盒里 write/read/bash/test)。


仓库内容(Files)

路径 说明
*.safetensors / config.json / tokenizer* 合并后的完整 9B 模型(base + 最佳 LoRA 融合,开箱即用,bf16,~18GB)
adapters/sft/ SFT 格式对齐 LoRA 适配器(PEFT,~464MB)
adapters/rl-best/ RL 最佳 LoRA 适配器(GRPO 训练产物,~464MB)
src/ StraTA 训练/评估/沙盒/数据 全部源码
configs/ 训练配置(含 A800 放大版 full_a800.json
setup/ 复现脚本(a800_env.sh 装环境 + fla 快路径、cc1d_build.sh 编译 causal-conv1d)
requirements.txt 固定版本依赖

使用(Usage)

方式 A:直接用合并模型(推荐,开箱即用)

from transformers import AutoTokenizer, AutoModelForCausalLM
MODEL = "pestlee/Qwable-9B-Claude-Fable-5-StraTA"
tok = AutoTokenizer.from_pretrained(MODEL, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(MODEL, dtype="bfloat16", device_map="cuda", trust_remote_code=True)

方式 B:base + LoRA 适配器(省下载、可切换 sft/rl-best)

from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained("empero-ai/Qwable-9B-Claude-Fable-5", dtype="bfloat16", device_map="cuda", trust_remote_code=True)
model = PeftModel.from_pretrained(base, "pestlee/Qwable-9B-Claude-Fable-5-StraTA", subfolder="adapters/rl-best")

方式 C(推荐,最省心):现成的 agent loop 服务(/agent/run

不想自己写多步循环?用部署仓库 wuyueyi/qwable-strata-deploy(CNB 免费 L40)—— 网页 UI + API /agent/run:传 {description, test_command, max_steps},它自己跑 策略→动作→沙盒执行→验证,流式返回每一步 + 最终 solved + 生成的文件。prompt 与生成参数与本模型训练分布完全一致

curl -N -X POST http://<host>:8000/agent/run \
  -H "X-Api-Key: sk-strata-agent" -H "Content-Type: application/json" \
  -d '{"description":"实现 fib(n),返回第 n 个斐波那契数",
       "test_command":"python3 -c \"from solution import fib; assert fib(10)==55; print(42)\"",
       "max_steps":6}'

⚠️ 方式 A/B 的 generate() 直接喂自由文本(如"写个 HTML")= OOD,会半截 / 空回复。本模型必须走 agent loop(先 <strategy> 再循环 <action> 配合沙盒)。补充两点根因:训练时的 generate() 也用 apply_chat_template(非裸文本输入);且 max_response_tokens=512 塑形了输出长度——模型约 512 token 主动 EOS 收尾,调大 max_tokens 不会让它写更长。最低门槛见方式 C,或仓库内 src/interactive_demo.py / src/test_merged.py


训练流程(Training)

  1. 数据:合成编码任务(15 模板×变体) + HumanEval + MBPP → data/train/(364 任务);eval 100 + eval_small 12。
  2. SFT(格式对齐):STRATEGY_PROMPT→<strategy>ACTION_PROMPT→<action> 两种样本,assistant-only loss,bf16 LoRA(r=64, α=128)。→ adapters/sft/
  3. RL(StraTA GRPO):每步 σN 策略候选 → FPS 选 N → 每策略 M rollout → 跨 rollout group-relative 优势 + clipped-surrogate + KL 近似(无参考模型)+ 自我评判惩罚 κ。warm-start 自 SFT。→ adapters/rl-best/

A800 配置(configs/full_a800.json):N=4, M=4, σ=4, batch_size=2, max_steps=100, lr=2e-6, kl_beta=0.02。fla + causal-conv1d 快路径启用。


评估结果(Eval, eval_small n=12, max-steps=6)

阶段 解题率
基座(无 SFT) ~0%(动作格式空)
SFT(无验证协议提示) 12.5%
SFT + 验证协议提示 62.5%
SFT + 20 步 RL **75.0%**(9/12;并把 SFT 解不出的 synthetic_125 解出)
最终 RL 模型 见训练日志 / training_log.json

注:评估在小型合成集上;"可用性"以能否解出中等难度编码任务计,非通用 benchmark。


复现(Reproduction)

# 1) 环境(torch cu124 + 依赖 + fla + causal-conv1d 快路径)
bash setup/a800_env.sh
bash setup/cc1d_build.sh      # 编译与 torch2.6 兼容的 causal-conv1d(需 nvcc)
# 2) 下基座模型到 model/
huggingface-cli download empero-ai/Qwable-9B-Claude-Fable-5 --local-dir model
# 3) 数据
python3 -u src/prepare_data.py
# 4) SFT → checkpoints/sft
python3 -u src/sft_train.py
# 5) RL
python3 -u src/strata_trainer.py --config configs/full_a800.json \
  --train-data data/train/all_tasks.json --eval-data data/eval/eval_small.json
# 6) 合并 base+LoRA → 完整模型
python3 setup/merge_model.py checkpoints/best merged_out

详见 setup/ 脚本与 GitHub(源码/脚本):tvvshow/Qwable-9B-Claude-Fable-5-test


关键工程修复(从"跑不通"到"端到端跑通")

  1. chat-template 训练/推理一致化(修 0% 解出)。
  2. _collect_log_probs 返回值 bug。
  3. 空目标/非有限 loss 守卫(防 NaN 腐蚀 LoRA)。
  4. 验证协议对齐:沙盒 from solution import ... → 提示注入"写入 solution.py",解题 12.5%→62.5%。
  5. GRPO 信用分配修正:优势跨 M rollout 计算(非单 rollout 内时间步),修 Items=0 无信号。
  6. 串行→批量化:左 pad 批量生成 / 锁步 rollout / 批量 log-prob(B=16) / 批量 loss(B=2),8-12× 提速。
  7. 生成 prompt == log-prob prompt 对齐(存精确 prompt)。
  8. 路径相对化 + evaluate() NameError 修复。

局限与安全(Limitations)

  • 个人复现,超参简化,非论文级复现;评估集小。
  • CodeGym 沙盒以 subprocess root 执行模型生成命令,无 Docker 隔离——仅限一次性实验机。
  • 合并模型 ~18GB,需 ≥24GB 显存推理(bf16)。
  • 能力边界:甜区 = 简单–中等、带可执行验证的编码题(eval_small ~66.7%)。Hard 题不稳、自我调试偏弱(看到明确报错可能重复 test 而不改代码);不能做开放式软件工程、不能当通用 chat / Codex 后端——9B + 仅在 strategy/action 轨迹上 RL 的训练目标决定了这点。

致谢

  • 方法:StraTA(arXiv:2605.06642)。
  • 基座:empero-ai/Qwable-9B-Claude-Fable-5
  • 数据:HumanEval、MBPP + 合成编码任务。
Downloads last month
47
Safetensors
Model size
9B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for pestlee/Qwable-9B-Claude-Fable-5-StraTA

Finetuned
Qwen/Qwen3.5-9B
Adapter
(1)
this model
Adapters
2 models

Paper for pestlee/Qwable-9B-Claude-Fable-5-StraTA