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,能大幅降低初期随机探索成本。