个人推荐官最重要的能力,不是一次性生成一组看起来合理的推荐,而是能够随着用户使用不断进化。

这种进化不是依赖用户填写大量偏好表,也不是让模型每次凭感觉总结,而是基于用户真实点餐行为,持续更新一个属于该用户的推荐 skill。

这个 skill 就是个人推荐官的长期记忆。

什么是推荐 Skill

推荐 skill 可以理解为一段结构化的偏好策略文本。

它不是简单的标签列表,而是一段可以被大模型直接理解和执行的推荐准则。

例如:

用户倾向选择清淡、低油、熟食、价格适中的菜品。偏好鸡肉、蔬菜、沙拉、汤类等风险较低的选择。对重辣、生食、陌生内脏类菜品接受度较低。推荐时应优先选择描述清晰、口味稳定、适合单人点餐的菜。

这段 skill 会在后续推荐时作为上下文注入给模型。

它的作用不是替用户做死板限制,而是帮助模型理解“这个用户大概率喜欢什么、应该避开什么、在不确定时应该如何选择”。

为什么 Skill 比固定标签更适合

传统偏好系统通常会维护一些固定字段,例如:

  • 是否吃辣
  • 是否忌口
  • 是否过敏
  • 预算范围
  • 偏好菜系

这些字段当然有用,但它们表达能力有限。

真实偏好往往更加细腻。

比如用户可能不是完全不吃辣,而是不喜欢“重油重辣”;用户可能不是不吃生食,而是在陌生餐厅里不愿意冒险;用户可能不是只吃便宜菜,而是更倾向于“价格和稳定性匹配”的菜。

这些偏好很难用几个字段完整表达。

Skill 的优势在于,它可以用自然语言描述复杂偏好,同时还能被大模型直接使用。

数据来源:真实点餐轨迹

Skill 自进化的核心数据来源是用户的点餐轨迹。

当用户使用点单句功能时,说明这次购物车里的菜已经接近真实点单结果。

因此,系统会记录这一轮点餐中的关键信息:

  • 菜品原始名
  • 菜品中文名
  • 数量
  • 价格
  • 菜品简介
  • 菜品标签
  • 用户生成的点单句
  • 时间信息
  • 当前已有的用户偏好字段

这些数据共同构成一次点餐轨迹。

它比用户随手点开的详情页更有价值,因为它代表用户最终愿意下单的选择。

为什么每 5 次作为一个 Batch

系统不会每次点单后都立刻更新 skill,而是每累计 5 次点餐轨迹后再触发一次进化。

这样设计有三个原因。

第一,减少偶然行为的影响。

用户某一次点了甜品,不代表他长期偏好甜品;某一次点了重辣,也可能只是因为朋友想吃。

如果每次都更新,skill 很容易被偶然行为带偏。

第二,让模型看到更完整的模式。

5 次轨迹可以形成一个小样本,让模型观察重复出现的倾向。

比如连续几次都选择清淡菜、避开生食、选择中等价格,这就比单次行为更可信。

第三,控制更新成本。

点餐行为可能很频繁,如果每次都调用大模型更新 skill,成本和延迟都会增加。

Batch 更新可以在效果和成本之间取得平衡。

Skill 自进化流程

一次 skill 自进化可以拆成六步。

第一步:读取当前 Skill

系统先取出该用户当前已有的推荐 skill。

如果用户是第一次使用,系统会初始化一个基础 skill。

基础 skill 通常来自用户注册或偏好设置中的信息,例如:

  • 过敏原
  • 忌口
  • 不喜欢的食材
  • 饮食限制
  • 辣度偏好
  • 预算范围
  • 常用语言

这些信息构成推荐官的初始判断基础。

第二步:收集最近 5 次点餐轨迹

系统把最近尚未用于进化的 5 次点餐轨迹取出,整理成模型容易理解的格式。

示例:

轨迹 1:
- Caesar Salad / 凯撒沙拉
- 数量:1
- 标签:清淡、沙拉、蔬菜
- 价格:8.5

轨迹 2:
- Grilled Chicken / 烤鸡
- 数量:1
- 标签:熟食、蛋白质、低风险
- 价格:12.0

这些轨迹会作为事实输入,不要求模型猜测用户是否喜欢,而是让模型从行为中总结规律。

第三步:让模型提取稳定偏好

模型需要从这 5 次轨迹中提取稳定倾向。

例如:

  • 用户多次选择熟食
  • 用户倾向中等价格
  • 用户偏好描述明确的菜
  • 用户较少选择生食
  • 用户常选择蔬菜、鸡肉、沙拉类菜

同时,模型需要区分“稳定偏好”和“偶然选择”。

如果某个菜只出现一次,而且和其他轨迹没有共同特征,就不应该被过度写入 skill。

第四步:合并旧 Skill 和新观察

Skill 更新不是覆盖旧版本,而是合并。

旧 skill 代表长期经验,新轨迹代表最近行为。

模型需要判断:

  • 哪些旧偏好仍然成立
  • 哪些新偏好值得加入
  • 哪些偏好需要弱化
  • 有没有出现新的禁忌或风险点
  • 推荐策略是否需要调整

例如,旧 skill 认为用户偏好低价菜,但最近 5 次用户都选择了中高价但评价稳定的菜,那么 skill 可以从“偏好低价”调整为“重视性价比和稳定性,不一定选择最低价”。

第五步:生成新的 Skill

模型输出新的推荐 skill。

新的 skill 应该保持简洁、可执行、面向推荐任务。

它不应该变成流水账,也不应该记录每一道具体菜的历史。

更好的写法是:

用户倾向选择清淡、熟食、描述明确、价格中等的菜品。推荐时优先考虑沙拉、烤制肉类、蔬菜、汤类等稳定选择。用户对生食、重辣和过于陌生的菜接受度较低。若用户没有明确输入,应默认推荐风险较低、适合单人点餐、价格不过高的菜。

这样的 skill 可以直接用于后续推荐。

第六步:标记轨迹已使用

更新完成后,系统会把这 5 次轨迹标记为已用于进化。

后续新的点餐行为会进入下一轮 batch。

这样可以避免重复使用同一批数据,也能让 skill 按时间逐步成长。

Skill 在推荐中的使用方式

当用户再次上传菜单并请求推荐时,系统会把当前 skill 作为推荐上下文。

模型看到的不只是当前菜单,还包括:

这是该用户的长期推荐 skill:
用户倾向选择清淡、熟食、价格中等、描述明确的菜品。对重辣、生食接受度较低。推荐时优先选择风险较低、适合单人点餐的菜。

然后模型再结合用户本次输入,例如:

用户当前想法:想吃当地特色,但不要太贵。

最终推荐会同时考虑长期偏好和当前意图。

这使得推荐结果更像一个熟悉用户的私人管家,而不是一个临时菜单问答机器人。

如何避免 Skill 失控

Skill 自进化需要控制边界,否则可能出现越写越长、越写越偏的问题。

因此,更新 skill 时应遵守几个原则。

第一,只写稳定偏好,不写偶然行为。

第二,只保留对推荐有帮助的信息。

第三,不把具体菜品历史无限堆进去。

第四,新 skill 应该比旧 skill 更清晰,而不是更冗长。

第五,涉及过敏、宗教、健康限制等硬约束时,不能随意弱化。

这样可以保证 skill 长期可用。

这个创新的关键价值

Skill 自进化让推荐系统从“响应式”变成“成长型”。

普通推荐系统只回答当前问题。

Skill 自进化系统会记住用户行为,并把行为转化成下一次推荐能力。

用户使用越多,推荐官越了解他。

而且这种了解不是靠用户填写复杂资料,而是来自自然使用过程中的真实选择。

总结

Skill 自进化的核心逻辑是:

真实点餐行为
  ↓
累计 5 次形成 batch
  ↓
结合当前 skill 进行总结
  ↓
生成新的推荐 skill
  ↓
用于下一次个性化推荐

它把用户每一次点餐都变成推荐官成长的一部分。

这也是个人推荐官区别于普通大模型推荐的关键创新:

它不是每次重新理解用户,而是在每一次使用后变得更懂用户。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐