真实面经题目 · 原创解析
在现有 LangGraph Agent 上新增功能时,如何设计节点、边、state schema、工具注册和回归测试?
这题考的是把 Agent 功能扩展做成可维护的状态机工程,而不是在一个大 prompt 或一个大节点里继续堆逻辑。高质量回答应说明如何先界定新功能的触发条件和输出契约,再决定是否新增节点、边、state 字段和工具,并用可回放测试证明新增路径没有破坏原有 Agent 行为。
真实面经题目 · 原创解析
这题考的是把 Agent 功能扩展做成可维护的状态机工程,而不是在一个大 prompt 或一个大节点里继续堆逻辑。高质量回答应说明如何先界定新功能的触发条件和输出契约,再决定是否新增节点、边、state 字段和工具,并用可回放测试证明新增路径没有破坏原有 Agent 行为。
我会先把新增功能当成一次 LangGraph 状态机变更来设计,而不是直接往现有节点里塞代码。第一步明确功能边界:它解决什么用户意图,输入需要哪些信息,成功输出是什么,失败或缺信息时如何停止、追问或回退。第二步检查图结构:如果新功能只是某个节点内的局部处理,可以扩展该节点;如果它有独立决策、外部工具调用、可重试逻辑或人工确认点,就应拆成新节点,并通过条件边接入现有 router。第三步设计 state schema:只放跨节点需要共享、可序列化、可审计的字段,例如用户意图、检索结果、工具结果、错误状态、重试次数、置信度和最终产物;节点内部临时变量不要污染全局 state。第四步做工具注册:工具要有清晰名称、描述、入参 schema、返回 schema、超时、权限、幂等和错误码,不要让模型靠自然语言猜工具边界。第五步设计边和停止条件:正常路径、缺参路径、工具失败路径、低置信度路径和终止路径都要明确,避免循环失控。最后用 harness 做回归:固定历史会话、mock 工具、snapshot state、断言节点路径和最终输出,覆盖旧功能不变、新功能成功、失败降级、工具异常和多轮恢复。面试里重点是体现你能把 LangGraph 当成显式可测的工作流,而不是只会调用框架 API。
新增功能前要先回答它是不是 Agent 的一个新能力、一个旧能力的分支,还是一个工具层增强。需要明确触发意图、必须输入、可选输入、输出格式、失败语义和是否需要多轮补充。如果这个边界不清楚,后面的节点、边和 state 都会膨胀,最终变成一个难以调试的全能节点。
LangGraph 节点最好对应一个稳定职责,例如意图识别、参数补齐、检索、工具调用、结果校验、回答生成或人工确认。新功能如果有独立的副作用、重试、错误处理或观察指标,就值得成为独立节点。节点输入应来自 state,输出只更新必要字段;节点内部失败应返回结构化错误,而不是直接抛到全局不可控。
边不是简单的 next,而是 Agent 行为控制面。需要定义从 router 到新节点的条件、从新节点到工具执行或结果生成的条件、缺少参数时回到追问节点的条件、工具失败后重试或降级的条件、以及达到停止条件时的 END。边的判断逻辑要尽量基于结构化 state,而不是只靠自由文本。
state 应只保存跨节点必须共享的事实和决策,例如 normalized intent、slots、tool_results、validation_errors、retry_count、confidence、final_answer、trace_id。不要把大段 prompt、中间草稿、临时对象或不可序列化连接放进去。字段要有版本意识和默认值,避免新增字段后历史会话恢复失败。
工具不是随便暴露一个函数。注册时要写清工具名称、用途、适用场景、参数 schema、返回 schema、错误码、超时、重试策略、权限范围和幂等要求。对有副作用的工具要考虑确认节点或 dry-run;对查询工具要考虑缓存、分页和空结果语义。工具描述过宽会让模型误调用,schema 过松会让运行期错误变多。
Agent 回归不能只看最终回答是否像样,还要断言走了哪些节点、调用了哪些工具、state 关键字段如何变化、错误分支是否按预期终止。可以用固定输入、固定模型响应或模型 stub、工具 mock、状态快照和 trace 断言构建测试集。旧能力样本要继续跑,证明新增边没有抢路由或改变旧功能。
新增功能上线前要记录节点耗时、工具成功率、路由命中率、fallback 率、循环次数、人工接管率和用户侧成功率。灰度时可以只对特定意图或小流量开放,并保留一键回退到旧图的能力。LangGraph 的优势是图结构显式,应该把这种显式性转化成可观测和可回滚的发布机制。
如果只是现有节点内部的局部计算或格式变化,可以改现有节点;如果新增了独立决策、工具调用、重试、人工确认、错误处理或监控指标,就更适合新增节点。判断标准是职责是否独立、是否需要单独测试和是否会影响图的控制流。
schema 太大会让节点互相耦合,历史会话恢复困难,测试快照不稳定,也会把临时推理内容误当成事实。更稳的做法是只存跨节点需要共享的结构化事实、决策和结果,临时变量留在节点内部。
路由条件要足够精确,并用历史样本做回归,比较新增前后的 route label、节点路径和最终输出。对不确定意图可以先走低置信度 fallback 或人工确认,而不是让新功能贪婪匹配。
先区分可重试错误、参数错误、权限错误、空结果和下游不可用。可重试错误按次数和退避重试;参数错误回到补参节点;权限错误走解释或人工确认;下游不可用要降级或终止,不能无限循环调用工具。
最终回答可能偶然正确,但路径已经错了,例如误调用工具、重复重试、污染 state 或绕过确认。LangGraph 的价值在于状态和路径可见,所以测试应该同时检查 trace、state、工具调用和输出。
可以给图版本、state schema 版本和工具版本打标,灰度时按流量或意图选择图版本。保留旧图入口和 state 迁移默认值,发现异常时能快速切回旧图,而不是临时删代码。