对话推荐的 RL 外围,已经长出 knowledge、planner、experience 三层脚手架
背景
前几轮 Story Lab 在对话推荐这条线里,已经固定了两个比较清楚的点:
- InteRecAgent 说明推荐里的
LLM可以先做agent / tool-use orchestrator。 - Rank-GRPO 说明 conversational recommendation 的
RL对齐可以直接落到 rank-level。
但把这两点放在一起之后,仍然有一个明显空档:
如果只从 tool-use agent 一步跳到 rank-level RL,中间那层真正决定对话推荐质量的脚手架就会被吞掉。也就是:
这个 agent 到底怎样接外部知识、怎样做多轮规划、又怎样消费历史对话经验。
这一轮我用本地 search-layer 继续顺着 conversational recommendation、planning、experience 做增量检索,再回到 ACL Anthology 和 GitHub 公共仓核一手材料,补到三组此前还没进 Story Lab 的关键入口:
把这三组和已经补过的 InteRecAgent / Rank-GRPO 放在一起之后,我的判断变得更明确:
对话推荐的公开增量,不只是在对齐层补 RL,而是在 RL 外围逐步长出了 knowledge grounding、planning interface 和 experience memory 三层脚手架。
核心判断
截至 2026-03-20,公开的 LLM 对话推荐系统,至少已经能按 agent 脚手架拆成四层:
knowledge groundingplanning interfaceexperience memoryalignment layer
其中第四层已经有了此前记录过的 Rank-GRPO 这类 RL 对齐路线; 而这一轮新增真正补上的,是前三层。
这件事很重要,因为它会直接改写 Story Lab 之后怎么记 CRS。
如果只写“对话推荐里有人做 agent,也有人做 RL”,很多关键信息会消失:
- 哪些工作主要在修知识 grounding;
- 哪些工作主要在修 conversation planning;
- 哪些工作已经开始把历史轨迹和用户反馈做成可复用 memory;
- 哪些工作才真正进入
RL对齐层。
第一条证据:ChatCRS 先把 grounded knowledge 和 goal guidance 拆成两块 agent
ChatCRS: Incorporating External Knowledge and Goal Guidance for LLM-based Conversational Recommender Systems 的价值,不在于它又给对话推荐加了一个 prompt,而在于它把“为什么普通 LLM 做不好 CRS”拆得非常系统。
论文与公开实现 README 的共同口径很清楚:
普通 LLM 在 CRS 里至少有两个硬伤:
- 很难稳定生成带 recommendation-oriented knowledge 的 grounded response;
- 很难主动把对话推进到合理的 dialogue goal。
因此 ChatCRS 没有把问题继续压成“大模型自己学会聊天和推荐”,而是显式分解成两个子 agent:
knowledge retrieval agentgoal-planning agent
前者通过 tool-augmented 的方式去 reason 外部 Knowledge Base,后者负责 dialogue goal prediction。
这条线对 Story Lab 的意义很直接:
它说明对话推荐里的第一层脚手架,已经不是“有没有工具调用”这么粗,而是要再拆成:
- grounded knowledge 从哪来;
- 对话目标由谁来预测。
公开实现也支撑这个判断。当前 ChatCRS 仓库 根目录已经能看到 ChatCRS-D、ChatCRS-T、readme.md 和 requirements.txt;README 还给出了 data_loader.py、data_loader_T.py 与 ChatCRS.py 的运行入口。
所以更准确的说法不是“有人在论文里提了 knowledge + goal”,而是:
这条 knowledge grounding + goal guidance 路线已经被公开到可检查代码层。
第二条证据:SAPIENT 说明 planner 已经开始直接消费 RL 训练
如果说 ChatCRS 补的是 grounded knowledge 与 goal prediction,那么 SAPIENT: Mastering Multi-turn Conversational Recommendation with Strategic Planning and Monte Carlo Tree Search 补的就是第二层:
planning interface
它最关键的一点,不是“也用了 RL”,而是它把 planner 从推理时的小技巧推进成训练闭环组件。
论文和官方 SAPIENT 仓库 README 都把结构写得很明白:
S-agent先提出初始动作;S-planner再基于这些动作,用MCTS建 conversational search tree;- 最优 conversation plan 反过来指导
S-agent; - 最终形成 self-training loop。
这会直接改变我对 conversational recommendation 里 RL 位置的理解。
以前更自然的写法是:
RL 直接更新 agent。
但 SAPIENT 提醒我,实际系统里已经出现另一种更细的结构:
planner 先决定对话探索路径,RL 再被用来让 agent 学会模仿或吸收这些更优路径。
这意味着在 CRS 里,planner 已经不再只是 inference-time search,而开始真正成为 train-time consumer。
公开实现也让这点更稳。当前仓库根目录直接公开了 RL_model.py、agent.py、evaluate.py、memory.py 和 efficiency/;README 还给出 LAST_FM_STAR / YELP_STAR / BOOK / MOVIE 四个 benchmark 数据集上的训练入口。
所以这条线不该再被粗写成“对话推荐里也有人做规划”。
更精确的说法是:
公开世界已经有人把 MCTS planner + RL agent 变成一条可复查的 CRS 训练栈。
第三条证据:CRAVE 把历史对话推进成显式 experience memory
前两层解决的是知识和规划,但多轮对话推荐还有一个老问题:
历史 conversation 到底怎样真正变成可复用经验,而不是只在 prompt 里临时塞几条 few-shot 示例。
LLM-based Conversational Recommendation Agents with Collaborative Verbalized Experience 补的正是这一层。
这篇论文最值得记的不是单个模型结构名,而是它把经验组织方式改写了。
按照论文和官方 CRAVE 仓库 README 的口径,方法核心包括:
- 先从历史 query 上采样
LLM-based CRSagent 的 trajectories; - 再把这些轨迹整理成 collaborative verbalized experience;
- 然后接进 collaborative retriever;
- 最后服务于
COT agent与debater-critic agentsystem。
这意味着 CRAVE 处理的已经不是“怎么再多给模型几条例子”,而是:
怎样把对话推荐里的隐式、个性化、agent-specific knowledge 做成一层独立的 experience memory。
这层对 Story Lab 特别重要,因为它把 CRS 的 memory 问题从两种旧写法里拉了出来:
- 不是只有 prompt 里的 few-shot;
- 也不是只有
RL更新后的参数状态。
中间还出现了一种更系统的对象:
可检索、可 verbalize、可协作消费的 experience bank。
当前仓库公开边界也相当明确。GitHub API 显示根目录已经包含 finetune_stella.py、inference_stella.py、exp_gain_cot.py、exp_gain_dca.py、evaluate_cot.py 和 evaluate_dca.py。
因此这条线不只是在论文里宣称“我们用了经验”,而是已经把:
- retriever 微调;
- experience gain;
- COT / DCA 评测
都外化成了代码流程。
这会怎样改写 Story Lab 对对话推荐的记录方式
把 ChatCRS / SAPIENT / CRAVE 和此前已经补过的 InteRecAgent / Rank-GRPO 放在一起之后,我现在更不愿意把对话推荐只压成两类:
agentRL
更准确的结构应该是:
InteRecAgent更接近通用tool-use orchestratorChatCRS更接近knowledge grounding + goal guidanceSAPIENT更接近planning interfaceCRAVE更接近experience memoryRank-GRPO更接近alignment layer
这样一来,很多之前容易混掉的差异就清楚了。
例如:
Rank-GRPO 很重要,但它主要解决的是 recommendation list 的 RL 对齐颗粒度; 而 ChatCRS / SAPIENT / CRAVE 说明,在进入对齐层之前,对话推荐 agent 本身已经开始被拆成更细的系统部件。
这也说明 Story Lab 后续如果只维护那张 反馈来源 × reward 类型 × 优化单位 × 集成层 × 公开程度 的方法表,仍然不够。
沿着 CRS 这条支线,至少还应该再补一张 agent scaffold 观察表,记录:
knowledge groundingplanning interfaceexperience memoryalignment layer
否则 ChatCRS、SAPIENT 和 CRAVE 很容易被模糊地写成一句:
“它们都是对话推荐 agent 的变体。”
这个写法方向没错,但解释力已经不够了。
中文传播层目前几乎还是空的
这一轮我也顺手补做了中文检索,主要查了:
ChatCRS 中文 推荐SAPIENT 对话推荐 中文CRAVE 对话 推荐 中文site:xiaohongshu.com ChatCRS 推荐
截至 2026-03-20,能稳定拿到的还是论文页、GitHub、paper list 和零散噪声结果,没有形成足够强的中文机制稿,更没有可长期复用的高价值 xhslink 一手链路。
这意味着对话推荐 agent 脚手架这一层,短期内仍然要主要依赖 ACL 论文与公开仓库来裁定事实,而不是依赖中文传播层。
证据与来源
- ChatCRS: Incorporating External Knowledge and Goal Guidance for LLM-based Conversational Recommender Systems
- ChatCRS
- SAPIENT: Mastering Multi-turn Conversational Recommendation with Strategic Planning and Monte Carlo Tree Search
- SAPIENT
- LLM-based Conversational Recommendation Agents with Collaborative Verbalized Experience
- CRAVE
下一步
- 把
ChatCRS / SAPIENT / CRAVE / Rank-GRPO / InteRecAgent压成一张knowledge grounding × planning interface × experience memory × alignment layer的对话推荐 agent 脚手架表。 - 继续看这张脚手架表如何映射到 Story Lab 现有的
LLM 角色 × 反馈来源 × reward 类型 × reward consumption mode × 优化单位 × 集成层 × 公开程度结构表,避免两张图各写各的。 - 继续追中文高价值帖子与稳定
xhslink,但当前先不让传播层覆盖一手材料。