Views
No views yet
声明 / 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")。
CodeGym 沙盒里 write/read/bash/test)。| 路径 | 说明 |
|---|---|
*.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 | 固定版本依赖 |
1from transformers import AutoTokenizer, AutoModelForCausalLM
2MODEL = "pestlee/Qwable-9B-Claude-Fable-5-StraTA"
3tok = AutoTokenizer.from_pretrained(MODEL, trust_remote_code=True)
4model = AutoModelForCausalLM.from_pretrained(MODEL, dtype="bfloat16", device_map="cuda", trust_remote_code=True)1from peft import PeftModel
2base = AutoModelForCausalLM.from_pretrained("empero-ai/Qwable-9B-Claude-Fable-5", dtype="bfloat16", device_map="cuda", trust_remote_code=True)
3model = PeftModel.from_pretrained(base, "pestlee/Qwable-9B-Claude-Fable-5-StraTA", subfolder="adapters/rl-best")/agent/run)wuyueyi/qwable-strata-deploy(CNB 免费 L40)—— 网页 UI + API /agent/run:传 {description, test_command, max_steps},它自己跑 策略→动作→沙盒执行→验证,流式返回每一步 + 最终 solved + 生成的文件。prompt 与生成参数与本模型训练分布完全一致。1curl -N -X POST http://<host>:8000/agent/run \
2 -H "X-Api-Key: sk-strata-agent" -H "Content-Type: application/json" \
3 -d '{"description":"实现 fib(n),返回第 n 个斐波那契数",
4 "test_command":"python3 -c \"from solution import fib; assert fib(10)==55; print(42)\"",
5 "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。
data/train/(364 任务);eval 100 + eval_small 12。STRATEGY_PROMPT→<strategy>、ACTION_PROMPT→<action> 两种样本,assistant-only loss,bf16 LoRA(r=64, α=128)。→ adapters/sft/adapters/rl-best/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 快路径启用。| 阶段 | 解题率 |
|---|---|
| 基座(无 SFT) | ~0%(动作格式空) |
| SFT(无验证协议提示) | 12.5% |
| SFT + 验证协议提示 | 62.5% |
| SFT + 20 步 RL | 75.0%(9/12;并把 SFT 解不出的 synthetic_125 解出) |
| 最终 RL 模型 | 见训练日志 / training_log.json |
注:评估在小型合成集上;"可用性"以能否解出中等难度编码任务计,非通用 benchmark。
1# 1) 环境(torch cu124 + 依赖 + fla + causal-conv1d 快路径)
2bash setup/a800_env.sh
3bash setup/cc1d_build.sh # 编译与 torch2.6 兼容的 causal-conv1d(需 nvcc)
4# 2) 下基座模型到 model/
5huggingface-cli download empero-ai/Qwable-9B-Claude-Fable-5 --local-dir model
6# 3) 数据
7python3 -u src/prepare_data.py
8# 4) SFT → checkpoints/sft
9python3 -u src/sft_train.py
10# 5) RL
11python3 -u src/strata_trainer.py --config configs/full_a800.json \
12 --train-data data/train/all_tasks.json --eval-data data/eval/eval_small.json
13# 6) 合并 base+LoRA → 完整模型
14python3 setup/merge_model.py checkpoints/best merged_outsetup/ 脚本与 GitHub(源码/脚本):tvvshow/Qwable-9B-Claude-Fable-5-test。_collect_log_probs 返回值 bug。from solution import ... → 提示注入"写入 solution.py",解题 12.5%→62.5%。evaluate() NameError 修复。CodeGym 沙盒以 subprocess root 执行模型生成命令,无 Docker 隔离——仅限一次性实验机。test 而不改代码);不能做开放式软件工程、不能当通用 chat / Codex 后端——9B + 仅在 strategy/action 轨迹上 RL 的训练目标决定了这点。empero-ai/Qwable-9B-Claude-Fable-5。