Interview Outline · Agent / LangChain / LangGraph
Agent 面试大纲:汪勇
候选人两个项目都很集中:一个菜谱 RAG 问答,一个 LangGraph 四智能体系统。这份大纲围绕他简历深挖,重点考察真实理解,每题带标准答案、加分点和扣分点。点问题下方的「答案与评分」可展开。
面试结构
时间分配的重心放在 LangGraph 和项目深挖,这两块最能看出他是真做过还是包装。
| 环节 | 时长 | 看什么 |
| 热身 | 5 min | 自我介绍,让他自己选一个项目讲 2 分钟。听他先讲什么:先讲指标还是先讲问题 |
| Part 1 · Agent 概念 | 15 min | Q1–Q4。概念是不是理解到「控制流」「重规划」「记忆读写」这一层 |
| Part 2 · LangChain / LangGraph | 20 min | Q5–Q9。框架用得深不深,能不能画出自己系统的图 |
| Part 3 · 项目深挖 | 15 min | Q10–Q12。简历上的漂亮数字能不能对上真实评测 |
| 追问与反问 | 5 min | 留给他问你。问的问题质量也算信号 |
Part 1 · Agent 基础概念
15 分钟,4 题。目标:把「背概念」和「真理解」分开。
Q1
什么是 Agent?它和普通的 LLM 调用、和 RAG,本质区别在哪?
答案与评分
标准答案
- Agent = LLM + 工具 + 循环决策。核心是模型在循环里自己决定下一步:调哪个工具、继续想、还是结束。
- 普通 LLM 调用是一问一答。RAG 是写死的固定流程:检索、拼 prompt、生成。Agent 的控制流由模型在运行时决定,这是本质区别。
加分
- 点出「控制流由谁决定」这个分界;提到 workflow 和 agent 的谱系(Anthropic《Building Effective Agents》里的分类)。
- 能说 Agent 的代价:延迟高、不可控、成本高,不是万能选择。
扣分
- 只会背「感知—规划—行动」这类空话。
- 认为接了工具就叫 Agent;说不清 RAG 和 Agent 的区别。
Q2
讲讲 ReAct 怎么工作的。它有什么缺陷?
答案与评分
标准答案
- Thought → Action → Observation 循环:模型先想,再决定调哪个工具、传什么参数,工具结果作为 Observation 拼回上下文,继续下一轮,直到给出 Final Answer。
- 缺陷:每一步都是一次 LLM 调用,步数越多延迟和 token 花得越多;长任务容易迷路或死循环;上下文越滚越长;没有全局规划,走一步看一步。
加分
- 知道现代实现里 Action 已经从解析文本变成原生 function calling。
- 提到最大迭代次数、循环检测这类工程兜底。
- 能对比 Plan-and-Execute。他简历写了「轻量任务走 ReAct,复杂任务走 Plan-and-Execute」——追问:判别标准是什么?
扣分
- 说不清 Observation 从哪来;只把 ReAct 当黑盒用。
- 简历写了「失败动态重规划」,但说不出重规划的触发条件和实现。
Q3
Plan-and-Execute 下,执行到第 3 步发现计划不可行,怎么办?
直接打他简历里的「失败动态重规划」。
答案与评分
标准答案
- Replanning:把已完成步骤的结果加上失败信息喂回 Planner,生成新计划,而不是从头重来。
- 要分清两层:「步骤级重试」(同一步换参数再试)和「计划级重规划」(目标拆解本身错了)。
- 重规划要设次数上限,防死循环。
加分
- 他简历写了「拓扑排序执行」——让他解释:步骤之间的依赖怎么表达?没有依赖的步骤能不能并行跑?
- 提到用状态机 / LangGraph 条件边实现「执行 → 检查 → 重规划」这个环。
扣分
- 解释不了 DAG 依赖从哪来(是 LLM 输出的,还是人定义的)——这是简历注水的强信号。
Q4
Agent 的记忆怎么设计?短期记忆和长期记忆各解决什么问题?
答案与评分
标准答案
- 短期记忆 = 会话上下文:对话历史、当前任务状态。受 context window 限制,要裁剪或摘要。
- 长期记忆 = 跨会话持久化:结构化画像(用户偏好这类 KV)+ 语义记忆(向量库存事实,按相似度找回来)。
- 写入侧要有提取和总结(不是原文全存),读取侧是个检索问题。
加分
- 他简历写了「按访问频次与时间戳被动遗忘」——追问具体怎么算:类似 LRU 加时间衰减?有没有权重公式?答得出具体实现说明真做过。
- 提到记忆写入时机(每轮写还是会话结束写)、记忆冲突怎么处理(用户改口了怎么办)。
扣分
- 只会存储视角:「Redis 存短期,Milvus 存长期」,说不出提取、更新、遗忘的逻辑。
- 不知道上下文放不下时,摘要和截断各有什么取舍。
Part 2 · LangChain / LangGraph
20 分钟,5 题。Q7 是本场第一道验真题:让他现场画自己系统的图。
Q5
LCEL 是什么?| 管道背后是什么?
答案与评分
标准答案
- LCEL = LangChain Expression Language。所有组件实现 Runnable 接口(invoke / stream / batch / ainvoke),
| 把 Runnable 拼成 RunnableSequence。
- 好处:统一拿到流式、批量、异步,还有 with_retry / with_fallbacks 这些重试回退能力。
加分
- 说得出 RunnablePassthrough / RunnableParallel 在拼 RAG 链时怎么用。
- 知道 LangChain 0.2/0.3 之后,官方推荐复杂逻辑用 LangGraph,别硬拼 LCEL。
扣分
- 只会
prompt | llm | parser 一句话,不知道 Runnable 接口。
- 把 LangChain 当成「就是个调 API 的壳」。
Q6
LangGraph 的核心抽象是什么?State、Node、Edge 各是什么?为什么 Chain 不够用,要上图?
答案与评分
标准答案
- StateGraph:一个共享 State(通常 TypedDict 或 Pydantic),Node 是接收 state、返回 state 更新的函数,Edge 分固定边和条件边(conditional edge,由函数看 state 决定往哪走)。
- Chain 是单向 DAG,表达不了循环。Agent 的本质是环——执行、判断、再回到执行——所以需要图。
加分
- 能讲 reducer /
Annotated[list, add_messages]:state 更新是「合并」不是「覆盖」。说得出这个的基本是真写过。
- 提到 checkpointer(MemorySaver / SqliteSaver / RedisSaver)做持久化和断点恢复,知道 thread_id。
- 提到 interrupt / human-in-the-loop;提到 Send API 做动态并行分发。
扣分
- 不知道条件边和普通边的区别。
- 声称解决了「长会话上下文丢失」却没听说过 checkpointer。
Q7 · 验真题
你的规划 / 执行 / 检索 / 总结四智能体,在 LangGraph 里具体怎么路由?「轻量走 ReAct、复杂走 Plan-and-Execute」这个分流是谁判断的?
给他纸笔或白板,让他现场画:几个节点、条件边在哪、环在哪。
答案与评分
合格版答案
- 入口有个 router 节点(LLM 分类或规则),条件边路由到 ReAct 子图或 Plan-Execute 子图。
- 执行智能体失败时,条件边回到规划节点做重规划。
- 总结智能体在会话末端或达到阈值时触发,负责写记忆。
加分
- 说得清分流判据:意图分类的 prompt 怎么写的?分错了怎么兜底?
- 讲清「分层 Prompt 注入控制上下文污染」到底是什么——比如各节点只看到自己需要的 state 字段,而不是全量 messages。这是他简历里最玄的一句,务必追问。
扣分
- 画不出自己系统的图。
- 说不清「上下文污染」指什么、怎么隔离的。
- 四个智能体其实就是四个 prompt 顺序调一遍,没有真正的路由和环——那「状态机」就是包装词。
Q8
LangGraph 里多个 Agent 协作有哪些常见架构?各自适合什么场景?
答案与评分
标准答案
- Supervisor(中心路由)、层级式(supervisor 管 supervisor)、网状 / handoff(Agent 之间直接移交)、流水线式。
- Supervisor 简单可控,但中心节点是瓶颈,还多一跳延迟;handoff 灵活但难调试。
加分
- 提到子图(subgraph)复用,多 Agent 之间 state 哪些共享、哪些隔离。
- 提到 supervisor 模式下「传完整历史 vs 只传结果」的取舍。
扣分
- 只知道 multi-agent 这个词,说不出任何一种具体拓扑。
Q9
FastAPI + SSE 下,怎么把 LangGraph 的中间过程流给前端?
答案与评分
标准答案
- 用 LangGraph 的
astream / astream_events,stream_mode 有 values / updates / messages 等档。
- token 级流式用 messages 模式,或用 astream_events 过滤 on_chat_model_stream 事件。
- FastAPI 侧用 StreamingResponse / EventSourceResponse 转发。
加分
- 分得清两类流:「节点进度事件」和「token 流」。
- 流到一半出异常怎么办:SSE 里发 error 事件,而不是直接断连。
扣分
- 简历写了 SSE 流式,但实际只在最外层
llm.stream()——说明多智能体流程里没真正解决中间态流式。
Part 3 · 项目深挖 / 工程判断
15 分钟,3 题。Q10 是第二道验真题:漂亮指标必须对得上评测方法。
Q10 · 验真题
RRF 融合的公式是什么?为什么用 RRF,不直接加权分数融合?
答案与评分
标准答案
- RRF score = Σ 1/(k + rank_i),k 常取 60。
- BM25 分数和向量相似度量纲不同、分布不同,直接加权要先归一化,还不稳定。RRF 只用排名,天然不受量纲影响。
加分
- 说得出 k 的作用:平滑头部差距。
- 说得出 Hit@5 95% 这个数的评测集怎么来的:多少条、谁标的。答不出评测集来源,指标可信度直接存疑,重点扣分。
扣分
- 简历明确写了 RRF 这个词,却说不出公式。
- 交叉编码器重排和双塔召回的区别说不清。
Q11
语义缓存怎么判断「两个问题算同一个问题」?误命中怎么办?
答案与评分
标准答案
- query embedding 相似度超过阈值就命中。
- 风险是语义相近但答案不同:「红烧肉怎么做」和「红烧肉热量多少」。需要较高阈值,加上意图 / 实体一致性校验。
- 还要有缓存失效策略:TTL、知识更新时清掉。
加分
- 阈值是怎么调出来的:有没有一个 bad case 集。
- 说得出实际的命中率和误命中率数字。
Q12
熔断和降级:连续失败几次触发?半开状态怎么恢复?「切内存模拟」之后用户看到的是什么?
答案与评分
标准答案
- 熔断三态:closed / open / half-open。
- Milvus 挂了可以降级为内存向量检索,或干脆跳过检索、纯 LLM 回答——但要向用户提示能力受限。
加分
- 说得出自己系统里的具体阈值和恢复策略。
- 能讨论降级之后回答质量掉多少,值不值。
扣分
- 熔断只会背概念,说不出自己系统里的参数和实测行为——又一个简历注水信号。
评分总纲
| 维度 | 权重 | 关键判据 |
| Agent 概念深度 | 30% | Q1–Q4 能否讲到「控制流」「重规划触发条件」「记忆读写策略」这一层 |
| LangGraph 真实经验 | 30% | Q6–Q7 能否画出自己的图,讲清 reducer / checkpointer / 条件边 |
| 工程判断力 | 25% | Q10–Q12 指标可复现、失败处理、有取舍意识 |
| 诚实度 | 15% | 简历里「拓扑排序」「被动遗忘」「上下文污染」三处玄学表述能不能讲实 |
红旗信号 · 任一出现即强扣分
- Hit@5 95%、答案相关性 0.85,说不出评测集构成和评测方法。
- 声称 LangGraph 状态机,但画不出图、不知道 checkpointer。
- 「拓扑排序执行」解释不了依赖从哪来。
- 所有回答都停在「我用了 XX 框架的 XX 功能」,没有一处自己的取舍和踩坑。
强加分信号
- 主动讲某个方案的失败经历和后来怎么改的。
- 任何指标都能说出「怎么测的、测了多少条」。
- 能指出自己项目现在还有什么缺陷。
使用建议
两个项目都是个人项目,指标都很漂亮。重心放在 Q7(画自己的图)和 Q10(评测集来源)这两道验真题上——真做过的人这两题会越问越兴奋,包装的人会在第二层追问处崩掉。