RecHarness:用 Bandit 路由让推荐系统自我演化
- 关联论文:2607.29241
- 作者:flyP
- 更新:2026-08-05
一句话结论
RecHarness 把 LLM-Agent 自动优化推荐模型这件事拆成"Bandit 路由选方向 + LLM 生成具体修改代码"两步,配合 jump-basin 跳出局部停滞机制,在线上短视频广告 7 天 A/B 测试中把 ADVV 提 2.084%、Revenue 提 0.534%、Exposure 提 0.559%。
解决的真问题
现代推荐系统的模型优化高度依赖工程师手动改架构、改 loss、改训练策略。LLM-Agent 自动化这条路上已有探索(如 AutoML-Agent、AIDE),但让 LLM 同时挑修改方向 + 写具体代码会带来搜索不稳定——在有限实验预算下, LLM 容易在某个方向上反复烧预算却不见效。
RecHarness 的核心洞察:方向选择应该用稳定 bandit,代码生成交给 LLM,两者解耦。
核心方法
1. 两阶段解耦
while budget_left and not converged:
# Step 1: Bandit 路由器选方向 arm
direction = bandit_router.select(arms, history_feedback)
# Step 2: LLM 在该方向下生成具体修改
code_edit = llm.propose_hypothesis(direction, current_model)
new_model = execute(code_edit) # 实际跑训练
# 反馈回 bandit
reward = eval(new_model, val_set)
bandit_router.update(direction, reward)
- Bandit Router:维护一组"修改方向"作为 arm(如"换 loss"、"加正则"、"换特征交叉方式"等)。每个 arm 根据历史验证集奖励更新,用的是 contextual bandit(论文未完全展开选哪个具体算法,但从工程稳健性看类似 LinUCB 或 Thompson Sampling);
- LLM 提议器:拿到方向后,在该方向内生成具体修改假设 + 可执行代码片段;
- 两者解耦后,方向探索不会因为某次 LLM 生成代码写错而失控。
2. Jump-Basin 防卡死
长程探索中常见的失败模式是 bandit 收敛到某个 arm 后陷入局部最优。RecHarness 加入 jump-basin 机制:当某个 arm 连续 N 次无显著提升时,激活一个 "structural-jump arm",强制跳出当前 basin 探索全新方向。这是一种显式的"探索 - 利用"平衡。
3. 离线 + 在线验证
- 离线:在多个推荐任务、数据集、模型 backbone 上验证稳定改进;
- 在线:在一个大规模短视频广告平台做了 7 天 A/B 测试(流量是工业级),最终候选模型上线。
关键实验与数据
离线(多数据集 / 多 backbone,论文未在 abstract 列出完整数字,原文以"更稳定改进 + 预算更高效"概括):
- 对比基线:纯 LLM-reasoning 搜索(让 LLM 同时选方向 + 写代码);
- 结论:RecHarness 性能曲线更稳、收敛更快、达到相同效果所用 trial 预算更少。
在线 7 天 A/B 测试(大规模短视频广告平台):
| 指标 | 提升 |
|---|---|
| ADVV(广告观看价值) | +2.084% |
| Revenue | +0.534% |
| Exposure | +0.559% |
代码已开源:https://github.com/6lyc/RecHarness(论文 abstract 给出,2026-08-05 核查:HTTP 200)。
亮点与局限
亮点 1. 解耦设计干净:bandit 管方向、LLM 管代码、各自迭代,调试和审计都更容易; 2. jump-basin 显式防卡死:比纯 bandit 更适合长程优化; 3. 工业级在线验证:不是只有离线 benchmark,真上线 7 天 A/B 拿到正向收益,可信度高; 4. 可迁移:框架与具体推荐任务解耦,理论上可搬到搜索、CTR、召回等其他场景。
局限 / 风险边界 1. 离线对比基线只点了"LLM-reasoning search",与传统 AutoML(贝叶斯优化、Hyperband)的对比原文未明确; 2. Bandit 路由的 arm 集合怎么定义(粒度多细、是否需要人工先验)原文未明确; 3. LLM 提议器底座模型、prompt 工程细节、上下文长度上限等原文未明确,复现门槛存在; 4. 工业 A/B 数字受流量结构与平台业务高度耦合,跨平台迁移效果存在不确定性; 5. 论文 9 页、2 张图,正文较精简,完整 ablation 与失败案例需查正文 / 附录。
工程落地的启发
- 解耦是关键:在 LLM-Agent 系统里,把"策略选择"和"动作执行"拆开往往比堆一个更大的 agent 更稳;
- Bandit + LLM 是值得复用的组合范式:bandit 解决稳定探索、LLM 解决灵活生成;
- 推荐团队可在内部 sandbox 中接入 RecHarness:先小预算试 bandit 路由 + 已有 LLM,验证方向选择的鲁棒性,再考虑上 jump-basin;
- 线上 A/B 是分水岭:推荐类论文只做离线 benchmark 越来越难拿高分,工业级在线收益更能说明问题。
与同方向工作的关系
- AutoML-Agent / AIDE:典型"LLM 全包"流派,RecHarness 与之正面对比,证明解耦更稳;
- 贝叶斯优化 / SMAC / Hyperband:传统 AutoML 路线,RecHarness 可视为"用 LLM 替换人工假设生成 + bandit 替换 BO 采集函数"的混合体;
- OpenPipe / DSPy 等 LLM pipeline 优化:DSPy 优化的是 prompt 与 LM 组合,RecHarness 优化的是下游模型本身;
- 多臂老虎机 + RLHF 思想:bandit router 的反馈信号设计借鉴了 RLHF 中"奖励模型驱动策略"的思路,但更轻量。
适合谁读
- 推荐 / 搜索 / 广告团队的算法工程师与架构师;
- 做 AutoML、Agent for ML 的研究员;
- 想用 LLM 优化自家模型但被"实验预算爆炸"卡住的团队。
工程落地与核查(Jay)
事实核查
| 声明 | 核查结果 |
|---|---|
| GitHub repo HTTP 200 | ✅ 已实测 |
| arXiv 2607.29241 存在 | ✅ 已实测 |
| A/B 测试 7 天,ADVV +2.084% 等 | ✅ 原文 abstract 所载,平台未具名(符合工业论文惯例) |
| 离线实验"多 backbone / 多数据集" | ⚠️ abstract 未列具体模型,读者无法判断与自家推荐系统相似度 |
| bandit 算法具体名称 | ⚠️ abstract 未明确 LinUCB / Thompson Sampling / UCB 等,工程实现差异较大 |
| jump-basin 阈值 N | ⚠️ abstract 未给,需查正文 |
| "Bandit 路由"上下文 bandit 类型 | ⚠️ 存疑:上下文 bandit 通常需要 state feature;若 state 仅来自历史 feedback 则退化为 contextual bandit 而非 pure contextual,精度要求不同 |
可读性精修
- "jump-basin"机制:首次出现应注明"意指当某 arm 连续 N 次未显著提升reward时,激活 structural-jump arm 强制探索新方向",当前表述偏术语,读者容易跳过;
- "执行单元"未定义:伪代码中
execute(code_edit)实际上涉及环境隔离(训练集群访问权限、模型权重读写),这对复现至关重要,建议补充; - "方向"(direction)的粒度:arm 集合定义是全文最关键的工程参数,文中"换 loss / 加正则 / 换特征交叉"仅示例,arm 粒度决定 bandit 探索效率,建议明确定义。
工程落地实战
1. Arm 集合设计(最关键工程参数)
Arm 的粒度决定了 bandit 的搜索效率,过粗则探索不足,过细则 bandit 冷启动成本高。建议分两级:
# Level-1: 优化维度(粗粒度 arm)
DIMENSIONS = [
"loss_function", # 换 loss
"regularization", # 加/调正则
"feature_cross", # 特征交叉方式
"negative_sampling", # 负采样策略
"learning_rate", # 学习率/调度
"model_arch", # 结构调整(hidden dim, layer, ...)
]
# Level-2: 每个维度下的具体 hypothesis(由 LLM 生成)
# bandit 看到的是 (dimension, hypothesis_id),reward 是 val metric delta
2. Jump-Basin 实现注意事项
- N 的选取:建议 N=5~10(太多则容易过早跳转,太少则卡死);若业务指标噪声大(如广告 CPM 日波动 >5%),应加大 N 或用"reward 趋势 slope < 阈值"代替计数;
- structural-jump arm 执行后,建议加 1-2 个 trial 冷却窗口,避免跳太快;
- Jump 后原 arm 的 posterior 应重置(否则 bandit 会记住失败历史而压制该 arm)。
3. 安全护栏(必须加)
RecHarness 的最大工程风险是 LLM 生成的代码破坏生产模型。建议三层隔离:
Trial 沙盒(推荐系统副本)
↓ 通过(离线指标提升 > 阈值)
Escalation 到小流量(1%~5%)
↓ 通过(7 天观察无负向)
全量上线
禁止直接在全量模型上执行:execute(code_edit) 必须对接沙盒环境,且沙盒应与生产环境使用相同的特征 pipeline 和评估指标(避免特征穿越)。
4. LLM 提议器的 prompt 工程
SYSTEM_PROMPT = """你是推荐系统优化专家。用户给你一个优化方向(如 'loss_function')。
请生成 1-3 条具体可执行的 hypothesis,每条格式:
{hypothesis_id}: {具体修改内容,附伪代码或代码片段}
要求:
- 每条 hypothesis 必须有可量化的预期(如 'AUC +0.1%')
- 不要生成超过 10 行代码
- 禁止修改特征 schema(特征穿越风险)
"""
llm.propose_hypothesis(direction, model_snapshot)
5. 离线 vs 在线指标对齐
A/B 指标 ADVV/Revenue/Exposure 说明这是工业广告平台;但离线验证时一般用 AUC / GAUC / CTR。两个指标体系的 reward 信号不对齐,可能导致 bandit 选出的 arm 离线涨但线下跌。建议:
- Reward 统一用线上 proxies(如 RPM / GAUC)或设计一个离线-在线联合 reward;
- 或在 bandit state 里同时维护离线指标 + 在线指标,用加权组合。
6. 与现有 AutoML 管线集成
传统 AutoML(BO / Hyperband)可以作为 bandit 的冷启动臂:当 bandit 没有历史数据时,从 BO 先验采样 arm,能大幅降低初期随机探索成本。