Day 54:第一轮模拟面试 —— 基础原理与项目深挖
欢迎来到第五十四天!昨天我们完成了作品集梳理和简历初稿。今天进入实战演练:第一轮模拟面试。本轮重点考察两块:基础原理(ReAct、Function Calling、RAG、记忆、多智能体)和项目深挖(你简历中的项目细节)。我会扮演面试官,给出 10 个高频问题,每个问题附带考察点、参考答案要点、常见陷阱和点评。你可以先自己回答,再对照参考要点查漏补缺。
一、今日学习目标
- 通过模拟面试检验前 53 天的知识掌握程度。
- 掌握 AI Agent 岗位高频面试题的答题框架。
- 学会在项目深挖中“讲清楚背景、技术选型、挑战与结果”。
- 发现自己的知识盲区,制定后续补强计划。
- 完成一次完整的面试复盘,形成个人答题素材库。
二、模拟面试规则
- 形式:10 道题,建议每题先自己口述或写下答案(2-3 分钟),再看参考答案。
- 重点:不追求背标准答案,而是检查逻辑是否清晰、是否有项目实例支撑。
- 记录:准备一个
interview_notes.md,记录每题的自我评分(1-5 分)和待补强点。 - 评分维度:概念准确性(40%)、逻辑结构(30%)、项目结合(20%)、表达简洁(10%)。
三、10 道高频面试题与参考答案
问题 1:请解释 ReAct 范式和 CoT 的区别,各自适用什么场景?
考察点:Agent 核心范式理解、能否对比分析。
参考答案要点:
- CoT(思维链)只让模型显式输出推理步骤,不调用外部工具,依赖模型内部知识。适合数学、逻辑等纯推理任务。
- ReAct = Reasoning + Acting,模型交替输出 Thought、Action、Observation,通过调用工具获取外部信息,再继续推理。适合需要实时信息、多步操作、外部知识验证的复杂任务。
- 关键区别:CoT 是“闭卷考试”,ReAct 是“开卷考试 + 动手操作”。
- 项目结合:我在网络爬虫 Agent 和数学专家 Agent 中使用 ReAct,因为需要调用搜索/计算工具;纯逻辑题用 CoT 更高效。
常见陷阱:只说“ReAct 多了 Action”,不解释 Observation 循环和减少幻觉的机制。
面试官点评:能说清“为什么 ReAct 能减少幻觉”(通过观察外部结果修正推理)是加分项。
问题 2:Function Calling 的工作原理是什么?它和 ReAct 是什么关系?
考察点:工具调用底层机制、概念辨析。
参考答案要点:
- Function Calling 是 API 层机制:开发者传入 tools 的 JSON Schema,模型根据用户输入决定是否调用、调用哪个函数、生成参数 JSON,然后由程序执行函数,再把结果作为 tool 消息返回给模型,模型生成最终回答。
- 模型本身不执行函数,只生成调用意图和参数。
- ReAct 是 Prompt 范式,要求模型显式输出 Thought/Action;Function Calling 可以看作一种更结构化的“行动”机制。LangChain 的 Agent 通常结合两者:底层用 Function Calling,Prompt 引导模型模拟 ReAct 思考。
- 项目结合:Day 11 我手动解析 tool_calls 执行函数;Day 24 用 AgentExecutor 自动完成循环。
常见陷阱:误以为模型真的执行了函数。
面试官点评:能区分“模型生成参数”和“程序执行函数”是基本要求。
问题 3:你的带记忆客服 Agent 中,短期记忆和长期记忆分别怎么设计的?如何防止 Token 超限?
考察点:记忆系统架构、工程落地能力。
参考答案要点:
- 短期记忆:当前会话的消息列表,使用滑动窗口保留最近 N 轮,配合摘要压缩;设置 Token 阈值,超过时触发裁剪。
- 长期记忆:向量库(Chroma)存非结构化记忆(事实/偏好/事件),SQLite 存结构化用户画像;对话前检索相关记忆注入 System Prompt,对话后抽取新记忆并去重、更新。
- 防 Token 超限:用 tiktoken 估算消息 Token;设置安全阈值(如模型上限的 70%);滑动窗口 + 摘要 + 限制检索记忆条数(k=3)和单条长度。
- 项目结合:我的客服 Agent 中,历史超过 3000 Token 时触发摘要,长期记忆每次最多注入 3 条。
常见陷阱:只说“用 ConversationBufferMemory”,不解释超限处理。
面试官点评:能说出“软删除/版本控制/遗忘策略”会体现深度。
问题 4:RAG 中文档切分(Chunking)怎么选?chunk_size 和 overlap 如何影响效果?
考察点:RAG 核心实践、参数权衡。
参考答案要点:
- 切分策略:中文优先 RecursiveCharacterTextSplitter,分隔符包含段落、句号、问号等;结构化文档可用 MarkdownHeaderTextSplitter;代码可按函数/类切分。
- chunk_size 太小:语义不完整,检索片段缺乏上下文;太大:包含无关信息,浪费 Token,检索精度下降。
- overlap 通常为 chunk_size 的 10%-20%,保留边界上下文,避免关键信息被切断。
- 评估方法:构建测试查询,计算检索命中率/召回率;对比不同参数下生成回答的质量。
- 项目结合:我在本地文档问答中对比 200/500/1000 字符切分,最终选 500+100 overlap。
常见陷阱:给出固定数字但不解释权衡。
面试官点评:能提到“按文档类型选择切分器”和“用评估集调参”是加分项。
问题 5:MMR 检索是什么?为什么长期记忆检索需要它?
考察点:向量检索进阶、记忆系统优化。
参考答案要点:
- MMR(最大边际相关性)在“与查询相关”和“结果之间多样”之间做平衡,避免返回多条高度相似的记忆。
- 长期记忆中,用户可能有多条相似偏好或事件,普通 Top-K 会信息冗余;MMR 用 lambda_mult 控制相关性与多样性的权衡(0.5-0.7 常用)。
- 配合元数据过滤(user_id、memory_type、status=active)和相似度阈值,提升召回质量。
- 项目结合:客服 Agent 检索用户记忆时用 MMR,确保偏好、事件、事实都能覆盖。
常见陷阱:只背定义,不说为什么需要多样性。
面试官点评:能说出“fetch_k 先取候选再精选”体现工程细节。
问题 6:CrewAI 和 AutoGen 有什么区别?你的项目如何选型?
考察点:多智能体框架理解、技术选型能力。
参考答案要点:
- CrewAI:角色扮演 + 任务驱动,核心是 Agent/Task/Crew/Process,适合流程明确、分工固定的流水线(需求→设计→编码→测试)。
- AutoGen:对话驱动,核心是 ConversableAgent/GroupChat/GroupChatManager,适合需要多轮讨论、辩论、代码执行、人类介入的场景。
- 选型:迷你软件公司用 CrewAI(Sequential + Task context);投资辩论赛用 AutoGen GroupChat(自定义发言顺序 + 终止条件)。
- 也可以混合:CrewAI 编排主流程,AutoGen 处理需要辩论或代码执行的子任务。
常见陷阱:只说“CrewAI 简单,AutoGen 复杂”,不结合场景。
面试官点评:能说出“Task 依赖用 context”“GroupChat 用 speaker_selection_method 控制节奏”是项目真实性的体现。
问题 7:Agent 陷入死循环或反复调用同一工具,你怎么调试和解决?
考察点:工程调试能力、错误处理经验。
参考答案要点:
- 调试:开启 verbose 或 LangSmith 追踪,查看每步 Thought/Action/Observation;用 return_intermediate_steps 获取中间步骤;自定义回调记录日志。
- 解决:设置 max_iterations;在 Prompt 中要求“获得足够信息后立即输出最终答案”;在 Observation 中提示“请更换策略”;检查工具描述是否让模型误以为需要重复调用;handle_parsing_errors=True 处理格式错误。
- 项目结合:我在 ReAct Agent 中设置 max_iterations=5,并在工具返回错误时要求模型修正输入而非重复调用。
常见陷阱:只说“加最大轮数”,不分析根因。
面试官点评:能区分“解析错误”“工具错误”“模型决策错误”是加分项。
问题 8:项目深挖 —— 你项目中最大的技术挑战是什么?怎么解决的?
考察点:项目真实性、问题解决能力、复盘深度。
参考答案要点(以带记忆客服为例):
- 挑战:记忆冲突与重复。用户偏好会变,简单追加会导致旧记忆干扰新回答;重复抽取会撑大向量库。
- 解决:设计记忆状态(active/superseded/deleted);新记忆先检索相似记忆,用 LLM 判断 duplicate/update/conflict/unrelated;update 时软删除旧记忆;存入前做相似度去重;定期遗忘低重要性记忆。
- 结果:记忆召回准确率提升,重复记忆减少,偏好变更后能正确回答。
- 反思:LLM 判断冲突有成本和不稳定性,后续可加入规则兜底和人工审核。
常见陷阱:说“没有挑战”或只讲技术不讲结果。
面试官点评:STAR 结构清晰、有量化结果、有反思,是高质量回答。
问题 9:如果让你设计一个企业级带记忆的客服系统,你会怎么架构?
考察点:系统设计、扩展性、工程化思维。
参考答案要点:
- 接入层:Web/APP/API 网关,鉴权,会话管理。
- 记忆层:短期记忆(Redis 存会话消息,TTL 过期);长期记忆(向量库按 user_id 分片 + 关系库存画像/工单);记忆抽取异步队列,避免阻塞主流程。
- Agent 层:路由(意图分类)→ 专业 Agent(售前/售后/VIP);工具层(订单、物流、工单 API)做权限隔离和参数校验。
- 安全与合规:敏感信息脱敏、用户可删除记忆、审计日志、限流。
- 可观测性:LangSmith/LangFuse 追踪、Token 与延迟监控、记忆命中率评估。
- 扩展:多租户隔离、模型降级策略、缓存高频问答。
常见陷阱:只讲 Agent 不讲存储、安全、监控。
面试官点评:能提到“异步抽取记忆”“权限隔离”“可观测性”会明显加分。
问题 10:如何评估一个 Agent 的效果?你会看哪些指标?
考察点:评估方法论、数据驱动意识。
参考答案要点:
- 任务完成率:端到端成功率、多步任务通过率。
- 工具调用准确率:是否选对工具、参数是否正确、是否多余调用。
- 检索质量:Recall@K、Precision@K、记忆命中率。
- 生成质量:事实准确性、幻觉率、格式合规率、用户满意度。
- 工程指标:平均延迟、Token 消耗、单次任务成本、错误率。
- 方法:构建测试集(问题+期望工具+期望答案);人工评估 + LLM-as-Judge;A/B 测试;线上日志分析。
- 项目结合:迷你软件公司用“测试通过率”和“迭代轮数”评估;客服 Agent 用“记忆召回准确率”和“回答正确率”。
常见陷阱:只说“看回答好不好”,没有指标和测试集。
面试官点评:能说出“LLM-as-Judge 的偏差”和“线上监控”是高级加分项。
四、面试复盘与自我改进
完成 10 题后,按以下表格自评:
| 题号 | 主题 | 自评分(1-5) | 卡壳点 | 改进动作 |
|---|---|---|---|---|
| 1 | ReAct vs CoT | |||
| 2 | Function Calling | |||
| 3 | 记忆系统 | |||
| 4 | RAG 切分 | |||
| 5 | MMR | |||
| 6 | CrewAI vs AutoGen | |||
| 7 | 死循环调试 | |||
| 8 | 项目挑战 | |||
| 9 | 系统设计 | |||
| 10 | Agent 评估 |
改进建议:
- 自评 ≤3 分的题目,回到对应 Day 的代码和笔记复习,并用自己的话写一段 200 字答案。
- 项目深挖题要准备 2-3 个“挑战-解决-结果-反思”故事,每个控制在 2 分钟内。
- 系统设计题可以画文字架构图,练习边画边讲。
五、今日总结与作业
今天你完成了:
- ✅ 完成第一轮模拟面试的 10 道高频题。
- ✅ 对照参考答案检查了概念准确性和项目结合度。
- ✅ 建立了个人面试复盘表,明确了知识盲区。
- ✅ 学习了项目深挖和系统设计的答题框架。
今日作业(必做):
- 将 10 道题的自己的答案(口述转文字或手写要点)整理到
interview_notes.md,标注自评分和待补强点。 - 针对自评 ≤3 分的题目,写出 200 字左右的改进答案,并附上项目中的代码/文件位置作为证据。
- 准备一个 2 分钟的“最大技术挑战”故事,用 STAR 结构写下来,并录音回听,检查是否啰嗦。
- (思考题)如果面试官追问“你的记忆抽取准确率 85% 是怎么测的?测试集多大?有没有人工标注?”,你该如何回答?请写出你的回答思路。
明日预告:我们将进行第二轮模拟面试,重点考察系统设计和场景题,例如“设计一个多智能体协作的代码审查系统”“如何让 Agent 安全地执行用户代码”“线上 Agent 突然大量调用工具失败,如何排查”。请准备好纸笔,明天我们继续实战!
有任何问题欢迎随时评论交流!