海底捞大模型面经

面试官一上来没问传统的八股,直接问一个场景题怎么做一个海底捞智能点餐Agent的后训练。
我说那当然是先SFT再RL。
但这个不能只简单的sft,根本就没有训练数据,你这个场景还得是多轮的,用户又不是报菜名贯口选手,张嘴就来一串"番茄加牛油 + 麻一度+七寸盘脆毛肚"。没有对话数据,从哪开始炼?
先搞数据吧。
现在海底捞门店全是 iPad 和小程序点单,数据形态是用户行为轨迹(trajectory),不是对话:
- 选锅底(番茄 + 牛油)
- 加菜、撤菜
- 翻页停留(隐式反馈)
- 临时改备注
要把这套 UI 操作流翻译成自然语言多轮对话,再喂模型学。
目标语料长这样 👇
▎ Agent:先看锅底?
▎ 用户:有人吃辣有人不吃。
▎ Agent:番茄牛油鸳鸯,行么?
▎ 用户:可以,麻度调到 1。
▎ Agent:开始点涮菜吧。
▎ 用户:来份捞派脆脆毛肚……
把过去的点单流水批量合成几十万条这种对话,SFT 阶段仅计算 Agent 那一侧的 loss(User轮次全 mask 掉),不然模型会学着模仿用户瞎点菜。
多轮在线 RL 比 SFT 难十倍——没人能现场陪你跑几万局。所以得先训一个 User 模拟器:
- 输入种子 profile:黑海 / 金海 / 银海
等级、历史偏好、过敏忌口、是否「薅羊毛型选手」……
- 第一轮 Agent 出招后,模拟器接力生成第二轮回应,往返多轮
- profile 里塞一个 「结束点餐」special token,控制对话什么时候自然停下
有了这个模拟器,才能稳定 rollout 出多轮 trajectory 喂 RL。

面试官追问多轮RL的reward怎么设计?

我的思路是全部做成 verifiable reward,避免 reward hacking:
符合历史人均消费客单价+100分,点餐分量合理+80分,荤素分布合理或符合历史分布+60分,命中特殊需求轮次奖励+120分。
用pav信用算法分配考虑turn级的分配,,引导模型循序渐进引导式点单——而不是一上来甩一整本菜单让用户挑。

面试官说又追问,这么做的大模型应用真比直接点餐体验好吗?
我愣住了,你们招这岗位,不就是要做这个事吗。。。为啥还要质疑存在的合理性?我只能硬着头皮答😅

面试官说:谢谢你的时间。
后续是挂了 #万物皆可发面经#
全部评论
没考手撕嘛
点赞 回复 分享
发布于 昨天 12:18 广东
面多久 reward 还追问别的吗
点赞 回复 分享
发布于 昨天 11:32 上海

相关推荐

1. 你在本地生活服务项目里实现了两级的缓存架构,这个主要是为了解决什么问题?具体是怎么实现的?2. 那你有没有比对过 Redis 单机缓存跟多机缓存,在响应时间上有多大的差异呢?3. 那你是如何保证两级缓存和数据库之间的数据一致性的?4. 你这里查的是优惠券的基础信息,还是优惠券的库存这类动态数据?5. 优惠券的基础信息现在是不太会变动的,那如果有主动更新的场景,你这个方案怎么保证数据一致性呢?6. 你这个方案能保证最终一致性吗?或者说有没有可能还会存在部分数据不一致的情况?7. 你是通过缓存的自动过期时间来保证最终一致性是吧?8. 那比如说我想让最终一致性的实时性稍微更高一点,有什么其他的方案?9. 你现在是通过 MQ 去操作缓存来保证数据一致性对吧?10. 你这里还使用 Redisson 分布式锁和双重检查来解决缓存击穿的问题,这个可以详细讲一讲你的实现逻辑是怎么样的?11. 那你在获取分布式锁的时候,用的是哪个方法?是 tryLock 还是 lock?12. 你对 Redisson 分布式锁的实现有怎样的了解?有了解过它的具体实现原理吗?13. 在秒杀业务里,你这里用令牌桶进行限流,那这个令牌桶限流你是怎么实现的?是你自己实现的还是用了开源的实现方案?可以具体讲一讲实现的过程。14. 你的意思是,你的实现不是真的创建了一个桶来存放令牌是吗?这个方案是你自己设计的吗?15. 你这边完成库存扣减以后,会把消息投递到 RabbitMQ 去消费对吧?那如果 Lua 脚本里库存扣减成功了,但是投递 MQ 失败了,或者 MQ 本身消费没成功,你怎么保证库存扣减数量的一致性呢?16. 我这里假设一种极端场景,就是你 Lua 脚本完成库存扣减以后,服务直接挂了,还没来得及投递到 MQ,那服务重启成功以后,如何去校验这个数据的一致性?有考虑过这种极端情况吗?17. 你的 Lua 脚本里面会去写数据库吗?18. 那你的 Redis 和数据库,你以哪个的数据为准?你是先扣 Redis 库存,还是先扣数据库库存?19. 那如果 Redis 扣减成功了,数据库这边还没扣减、还没执行就挂了,那你是以数据库的数据为准是吗?20. 你还做了一个 Agent 的项目对吧?是基于 ReAct 模式做的,可以详细讲一讲 ReAct 模式是如何实现对话 Agent 的,以及上下文是如何管理的?21. 你是对工具调用的结果做了截断,还是做了其他处理?这个需要管理的信息具体是指什么?22. 你具体是怎么处理上下文的?是直接固定截断保留多少字节,还是会做内容压缩,或者是其他的处理方式?23. 那你的 Agent 记忆功能是如何做的?短期记忆以及长期记忆,是如何存储的,以及如何去检索的?24. 我看你这边讲到 token 节约了 50%,这个具体是怎么做到的?做了哪些相关的优化工作?25. 你在之前做项目或者学习的过程中,有没有承接过自身职责之外的事情?有的话可以讲一讲。26. 在 AI 相关领域,你主要用过哪些工具?或者学习过哪些相关的技能?可以讲一下你用得最多的一个。27. 你一般会怎么使用这些 AI 工具?比如用它帮你实现功能这类的场景?28. 你可以讲一讲你实现过的、觉得效果还不错的某一个 Skill。29. 这个 Skill 是你安装了别人开发的,还是你自己写的?30. 那你觉得有哪个 Skill 给你的影响比较深?31. 那你对 Skill、MCP 这类技术的理解是什么?为什么需要 MCP?Skill 用起来有什么样的优势?它们分别是为了解决什么问题?32. 那 MCP 和 Function Calling 会有什么区别?33. 那你觉得 MCP 和 Skill 是同一个维度上的东西吗?Skill 可以替代 MCP 吗?
点赞 评论 收藏
分享
评论
4
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务