字节 Agent 开发二面(2026 年 7 月)
面经与参考答法
字节 Agent 开发二面(2026 年 7 月)
这是一份 A 级第一手二面记录。本文删除个人背景细节,保留项目、Agent 架构、规划、记忆、工具、RAG 与算法等真实问题,并补成可以复习的回答框架。
(1)怎样讲 Agent 项目和框架选型?
先用“业务目标—约束—架构—指标”讲项目,再解释框架选择。框架不是越全越好:简单、确定的流程可用普通代码;需要循环、分支、持久状态和人工审批时再用图式编排。比较 LangChain、LangGraph 或自研运行时时,应落到状态模型、可观测性、恢复能力、生态与迁移成本,而不是只列名称。
(2)Agent 由哪些部分组成,怎样运行?
工程上的 Agent 通常包含模型、指令与上下文、状态/记忆、工具、控制循环和安全/评估层。一次运行可概括为:读取目标和状态,生成下一步决策,调用工具并校验结果,更新状态,直到成功、失败或达到预算。关键是给循环明确的终止条件、最大步数和副作用边界。
延伸阅读:智能体定义、类型、PEAS 与 Agent Loop。
(3)Planning 是框架做的还是模型做的?
两者共同完成。模型擅长提出、修订计划;框架负责保存计划、约束状态转换、执行依赖和处理失败。常见方式包括 ReAct 的边推理边行动、Plan-and-Execute 的先规划后执行,以及任务图/DAG。任务较长、工具有依赖或失败代价较高时,应显式记录计划并支持动态重规划。
延伸阅读:任务规划、分解与动态重规划。
(4)短期记忆和长期记忆有什么区别?
短期记忆服务于当前 run 或 session,保存最近消息、工具结果和未完成步骤;长期记忆跨会话保存相对稳定的用户偏好、事实或历史摘要。长期记忆不能把所有对话原样写入,应经过提取、去重、权限校验、过期和冲突处理。
Function Call 的请求与结果通常应以结构化事件进入短期状态,否则模型看不到工具执行结果,可能重复调用或基于旧状态继续推理;体积过大时保存摘要和引用。
延伸阅读:短期记忆、长期记忆与检索。
(5)MCP 和自己写工具怎样取舍?
单一应用内的少量工具可以直接实现函数契约;需要跨模型、跨客户端复用资源和工具时,MCP 能提供统一发现与调用协议。无论哪种方式,都要定义输入 Schema、超时、权限、幂等和错误语义。模型负责选择工具,不代表可以绕过服务端授权。
延伸阅读:MCP / A2A 智能体通信协议、工具发现、选择与路由。
(6)RAG 召回阶段怎样调参?
先准备带答案与相关证据的评测集,再分别观察 Recall@K、MRR/nDCG、上下文精确率和最终回答质量。可以调整 chunk 大小与重叠、embedding、top-k、元数据过滤、混合检索和 rerank。不要只把 top-k 调大:更多噪声会增加延迟和上下文干扰。
(7)Python 问题怎样准备?
原帖只记录“Python 的一些内容”,没有公开具体题目,因此不能补造。复习重点可覆盖数据模型、可变/不可变对象、迭代器与生成器、异常与上下文管理器、线程/进程/协程,以及类型标注和测试。
(8)合并两个有序数组怎样实现?
若目标数组尾部有足够空间,可以从后往前放置较大元素,避免覆盖未处理值。双指针各自只移动一次,时间复杂度为 $O(m+n)$,额外空间为 $O(1)$。
function merge(nums1: number[], m: number, nums2: number[], n: number): void {
let i = m - 1, j = n - 1, write = m + n - 1;
while (j >= 0) {
nums1[write--] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
}
}