字节跳动 AI Agent 工程师 - 面试题 & 面经
面试流程
-
2-3 轮技术面 + HR 面
-
每轮:自我介绍(5min)→ 技术问题(15-20min)→ 编程题(30min)
-
编程题难度:LeetCode Medium ~ Hard
一、Agent 核心面试题
Q: Agent 和 LLM 的区别?
参考答案:
-
LLM:语言模型,核心能力是文本生成和理解,本质是 next token prediction
-
Agent:以 LLM 为大脑的自主系统,额外具备:
- 环境感知和交互能力
- 工具调用能力
- 记忆管理
- 自主规划和决策
-
类比:LLM 是大脑,Agent 是有手有脚有记忆的完整人
Q: 如何设计高效的 Agent 上下文维护方案?
参考答案: 分层管理:
-
系统上下文:角色定义、工具说明(固定)
-
长期记忆:用户画像、历史总结(向量检索按需加载)
-
短期记忆:当前对话历史(滑动窗口 + 摘要压缩)
-
工作记忆:当前任务状态、中间结果(结构化存储)
优化策略:
-
上下文压缩:长对话做摘要
-
按需检索:不把所有信息塞进去
-
优先级排序:重要信息靠近末尾(recency bias)
-
结构化格式:JSON/XML 比自然语言更节省 token
Q: Agent 调用工具不正确怎么办?
参考答案: 多层防护:
-
预防:优化工具描述、few-shot 示例、参数校验
-
检测:工具返回值验证、类型检查、超时检测
-
恢复:重试机制、fallback 工具、人工介入
-
学习:记录错误案例,用于优化 prompt 或微调
Q: Agent 记忆机制如何设计?
参考答案: 三级记忆:
-
感官记忆:原始输入,不持久化
-
短期记忆:对话上下文,滑动窗口管理
-
长期记忆:
- 语义记忆(知识):向量数据库存储
- 情景记忆(经历):结构化日志
- 程序记忆(技能):工具和 workflow 定义
Q: 多 Agent 执行策略的智能选择和切换机制?
参考答案:
-
路由策略:根据任务类型分发到专业 Agent
-
协作模式:
- 顺序执行:pipeline 模式
- 并行执行:独立子任务
- 讨论模式:多个 Agent 辩论达成共识
-
切换机制:
- 基于置信度:Agent 不确定时转交
- 基于能力:任务超出当前 Agent 能力范围时
- 基于结果:输出不满足质量阈值时触发其他 Agent 审核
二、RAG 高频题
Q: RAG 系统流程?
参考答案:
-
索引阶段:文档分块 → Embedding → 存入向量数据库
-
检索阶段:Query Embedding → 向量相似度搜索 → 重排序
-
生成阶段:检索结果 + 原始问题 → LLM 生成回答
Q: 如何解决 "Lost in the Middle" 问题?
参考答案:
-
LLM 倾向于关注输入的开头和结尾,中间信息容易被忽略
-
解决方案:
- 将最相关内容放在开头或结尾
- 减少检索结果数量,只保留 top-k
- 对检索结果做摘要后再输入
- 使用 Map-Reduce:分别处理每个文档再汇总
Q: 向量检索 vs 关键词检索?
参考答案:
-
向量检索:语义匹配,处理同义词/近义表达好,但可能丢失精确匹配
-
关键词检索(BM25):精确匹配强,但无法理解语义
-
最佳实践:混合检索:两者结合 + 重排序(Cross-Encoder)
三、模型微调
Q: LoRA 原理?Q-LoRA 如何优化显存?
参考答案:
-
LoRA:冻结原始权重,添加低秩分解矩阵 A×B(r<<d),只训练 A 和 B
- 参数量:原始 d×d → r×d + d×r,大幅减少
-
Q-LoRA:在 LoRA 基础上将原始权重量化为 4-bit
- NF4 量化 + 双重量化 + 分页优化器
- 可在单卡 24GB 上微调 65B 模型
Q: LoRA 效果不佳时怎么办?
参考答案:
-
增大 rank(r),增加可训练参数
-
调整学习率和训练轮次
-
检查数据质量和数据量
-
尝试对更多层应用 LoRA
-
考虑全参数微调(如果资源允许)
-
数据增强或改善数据分布
四、计算机基础(仍然会考)
-
TCP/IP 协议栈、HTTPS 工作原理
-
协程 vs 线程区别
-
MySQL 事务隔离级别、索引覆盖
-
Redis 数据结构、持久化
-
消息队列保证消息不丢失
-
微服务架构
五、算法题
-
LeetCode 第 2 题(两数相加)等经典题
-
中等偏难为主