
面试聊到 Agent 的规划能力我见过太多候选人挂在“背书式回答”上张口就是 ReAct、Task Decomposition、Reflection原理能倒背如流但一追问“为什么这个任务要拆成五步而不是三步”“子任务之间的依赖怎么管理”立刻卡壳。这道题真正考察的不是你会多少个英文名词堆砌而是你有没有在真实工程环境里理解下面这件事——Agent 的规划本质上是一个约束条件下的资源分配与控制问题。它考验的是目标拆解能力、上下文管理能力和容错设计能力这三件事缺一个都会导致整体系统在复杂任务中直接崩盘。这篇文章不会去复述那些翻烂了的论文术语。我想从一个实际面试官的提问逻辑切入拆解 Agent 规划的底层框架、关键取舍、常见误区和一线实操经验。不管是准备面试还是正在搭建一个真实的多步骤 Agent 应用这篇文章都值得你花二十分钟看完。我自己在面试中筛过上百份简历也亲手改造过若干个规划链路下面这些内容都是比“背诵 ReAct”更值钱的实战理解。1. 面试官为什么偏爱这道题规划能力决定 Agent 的真实水位先说个容易被低估的事实Agent 的能力上限不是模型推理能力决定的而是规划机制决定的。模型回答单个问题时再聪明如果没有一个可靠的规划层去分解目标、分配步骤、汇总结果它在真实业务里就只是个高级聊天机器人跑不了任何一趟完整的自动化流程。面试官问这题本质上在两到三轮对话里快速试探三件事。第一候选人对“规划”这个概念是否有工程视角。很多人以为规划是让模型自己“想清楚怎么做事”但工程上的规划是显式地定义任务图、状态流转和终止条件。模型负责填空规划器负责搭骨架这两者的边界必须清晰。如果你说不出这一步基本就暴露了没有做过完整 Agent 项目。第二候选人有没有处理过不确定性。真实环境里每一步都可能失败模型可能给出格式不合法的输出、中间结果可能超时、外部 API 可能挂掉。规划层能不能在异常出现时重试、撤销、换路这才是生产级别系统跟玩具 Demo 的分水岭。能把这个讲清楚的人通常是真的被线上事故毒打过。第三对 token 成本和延迟是否敏感。规划本身会消耗推理资源每多一个规划步骤就多一轮模型调用。怎么在任务质量和执行成本之间找到平衡点是衡量一个工程师有没有成本意识的试金石。面试只要追问到这里八成候选人的“理论骨架”就散了。所以这道题被用来做筛选非常有效。它嵌套了“原理理解、工程落地、异常处理、成本控制”四个层次能完整回答出后两层的候选人本来就是少数。用这道题作为开头基本两分钟就能判断面试者处于什么段位。2. 常见淘汰答法分析三大典型的误区和深层原因这道题淘汰率高的原因不只是题目本身难更多是候选人在回答时踩进了三个非常典型的误区。这三个误区我在面试现场几乎每周都要听一遍。2.1 只会列名词不会讲机制“我们可以用 ReAct 让模型边想边做也可以用 Plan-and-Execute 把规划和执行分开。”——这是标准的“名词党”回答。听起来很专业但经不起任何追问ReAct 里面Thought 和 Action 之间怎么约束Action 的输出格式怎么定义如果模型产出的 Action 不在预设范围内系统该怎么兜底Plan-and-Execute 的 Plan 阶段是一次性生成还是迭代生成执行阶段发现计划路线走不通谁来决定改计划这么一连串问题砸下来只会背名词的人马上暴露底牌。这个误区的深层原因是很多人只看过论文标题和科普文章就出来面试。论文里一句话带过的“action space”在工程里是一整套 JSON Schema 和校验流程论文里一整页的伪代码在工程里要接上重试逻辑和限流配额。你没实现过一个 Agent就永远不会知道理论跟工程之间的距离有多远。2.2 规划粒度一刀切毫无分层意识另一种高频回答是不管什么任务一律“先让模型列出步骤再逐步执行”。听起来没毛病但实际跑起来会发现灾难性后果简单任务比如“查询天气”硬生生拆出“分析意图、生成搜索词、调用天气 API、组织回答”四个步骤每步调一次模型延迟从一秒变成五秒成本翻了四倍复杂任务比如“写一篇行业分析报告”直接让模型一口气列十个步骤结果前三步还能对齐后面几步的上下文早就乱套了。这个问题背后的认知缺失是不知道规划粒度要跟任务的复杂度绑定。真实系统里规划器会先判断任务的难度等级简单任务直接执行或只做一次浅层规划复杂任务才进入深度拆解。没有这层“难度感知”任何规划机制都是纸上谈兵。2.3 只谈正向流程不谈失败恢复第三个高频误区把执行过程描述成完美瀑布流。“模型分析需求、模型生成计划、模型逐步执行、模型汇总结果。”整个流程行云流水没有任何分支没有任何异常处理。把所有设计成“一路通”的人基本没有跑过真实数据。受 LLM 的输出天然具有概率性的影响同一个 Prompt 让它跑五十次你至少能看到几次返回格式错误、结果缺失、幻觉内容。更别提外部系统的不可控性。生产级的 Agent 系统里规划层的核心工作甚至不是“规划”而是“规划失败的恢复”。谁掌握了异常恢复的设计谁就掌握了 Agent 系统的稳定性。当然这三大误区单独看来都知道不应该犯但一到真实面试高压场景还是会有人不由自主地滑向这些套模板的路径。面试之外这也是许多团队把 Agent Demo 做出来却迟迟不敢上生产的原因——规划逻辑太脆了。3. 优秀回答的核心框架规划机制的完整解构排除掉前面的误区后一个真正有分量的回答应该长什么样我从自己的实践出发把 Agent 规划拆成四个核心模块面试或做系统设计都可以沿着这条主线展开。3.1 第一步意图理解与目标物化规划不能凭空开始。第一步要求把用户的模糊输入转成一个“机器可执行的目标描述”。什么叫机器可执行就是目标必须有明确边界、验收条件和资源约束。举个例子“帮我整理一下这份销售数据”是个模糊指令机器不知道整理到什么程度算完成“对这份 CSV 做清洗、按月份聚合出销售额趋势、输出一张趋势图和一份关键结论摘要”才是一个可执行的目标描述。这一步常被忽略但它的重要性排在所有环节之前。意图理解的质量直接决定后续规划的上限。面试中如果能清晰地对话目标的边界由谁定义如果用户指令本身信息不足是让 Agent 追问还是基于假设执行这已经体现出了超过九成候选人的工程素养。3.2 第二步任务分解与结构设计目标清晰之后进入规划的核心环节任务分解。这里有一个极其重要的工程经验——不要让 LLM 自由发挥生成任务列表而要让它在预设的“动作原语库”里做组合选择。动作原语库就是系统预设好的能力单元比如“调用搜索”“读取文件”“写数据库”“生成图表”“调用代码解释器”。每个原语有明确的输入输出定义。实操中将大任务拆成子任务也需要遵循几条硬规则子任务之间尽量保持独立性减少共享状态。每个子任务的产出物必须可验证。如果子任务产出“一篇读后感的段落”这个没法验证改成“列出文章的五个核心观点并各附一句依据”就相对可校验。关键路径上的子任务必须设置检查点。执行完一个阶段先验证结果再决定是否进入下一阶段而不是一股脑走到底。任务分解的产出建议使用标准化的 JSON 结构而不要用自然语言的纯文本。原因在于后续无论是人工审查还是程序校验结构化数据都更容易处理。{ plan_id: plan_sales_q3, goal: 分析Q3销售数据并输出趋势报告, steps: [ { step_id: 1, action: read_csv, input: data/sales_q3.csv, output_check: rows 0 }, { step_id: 2, action: group_by_aggregate, input: step_1.output, params: { group_by: month, agg: sum(sales) } }, { step_id: 3, action: generate_chart, input: step_2.output, output_check: chart_file_exists } ] }看到这个结构你就能理解真正生产的 Agent 为什么比 Demo 稳定得多规划的产物是结构化数据而不是一段人读的自然语言。3.3 第三步执行器与原语层的能力边界规划做得再漂亮最终还是要落到具体执行上。这一步最容易出问题的地方是规划器调用了执行器能力边界之外的“原语”。所以在规划引擎的提示词里必须严格限定原语列表并附上每个原语的能力描述和参数模板模型只能从列表里挑选组合不能“发明新技能”。执行器的鲁棒性也非常关键。每个原语应该内置超时控制、重试机制、返回信息校验。执行失败时返回的错误信息必须结构化让规划器能根据错误信息做出下一步决策。不要返回“执行失败”四个字要返回“csv读取失败原因是文件编码格式不正确位置data/sales_q3.csv 第2行”这样才能为后面的自动恢复提供依据。这里补充一个测试中的常见现象同一个执行器在不同版本的模型上表现差异极大有的模型对工具调用式提示词非常敏感格式稍微调整准确率就大幅波动。所以执行器的 Prompt 建议单独调优和做回归验证不要混在规划层里一把梭。3.4 第四步反馈循环与计划修正机制任务分解得再完美现实中仍然会有执行失败、结果不符预期、上下文遗失的情况。优质规划的最后一环是拥有把“执行反馈”重新注入“规划决策”的回路能力。核心设计包含一个“重规划器”。重规划器只有在执行器报告异常或校验不通过时才被触发它接收三个输入原始目标、当前已执行状态包括已完成步骤和失败原因、系统当前可用原语集合。输出是一个调整后的新计划或一个终止信号。这里要特别注意避免将来回重试变成死循环。我的工程经验是设置最大重规划次数比如三次超过次数就让 Agent 显式地向用户披露“任务未能完成”以及当前已完成的阶段性成果、失败原因。这比无限重试更有尊严也更符合真实业务的预期。4. 实操中的规划系统搭建与现场记录把上面这些模块落地到真实代码里你会遇到很多文档上根本不讲的细节。我在这里分享一段改造实践给读者一个直观的参考。4.1 最少可用的规划器实现一个最简但五脏俱全的规划器通常由三个代码组件组合而成。下面给出一份核心框架省略了完整业务逻辑重点演示职责边界。class Planner: def __init__(self, llm_client, action_space, max_replans3): self.llm llm_client self.actions action_space # 原语库 self.max_replans max_replans def make_plan(self, objective: str) - dict: schema self.actions.get_schema() prompt f 你是任务规划器。 目标{objective} 可用动作{schema} 要求输出一个 JSON 计划包含 steps 数组。 每个 step 包含 step_id, action, input, output_check。 只使用给定的可用动作不要编造。 response self.llm.complete(prompt) return validate_and_parse(response) def replan(self, objective: str, state, error_info: str) - dict: # 此处决定是调整、重试还是终止 ...class Executor: def execute(self, step: dict) - dict: action self.actions.find(step[action]) try: result action.run(step[input]) return {status: ok, result: result} except ActionError as e: return { status: error, error_code: e.code, error_msg: str(e), step_id: step[step_id] }class AgentController: def run(self, objective): state [] plan self.planner.make_plan(objective) for step in plan[steps]: result self.executor.execute(step) state.append((step, result)) if result[status] ok: continue # 触发重规划 self.replan_count 1 if self.replan_count self.planner.max_replans: return self._give_up(state) plan self.planner.replan(objective, state, result)这段代码的价值不在于工程完整度而在于界定了三件事。执行器不负责决策只管调用工具并返回结构化结果规划器不负责具体执行只管产出进入执行器的动作序列控制中枢负责编排和状态管理包括触发重规划的上限保护。面试过程中能把这三层边界讲清楚就已经远超常规候选人的水平。4.2 一个真实场景的压测记录我挑一个实际做过的内部演示项目“行业报告自动生成助手”来说。早期版本没有规划器每次让模型直接从头写到尾问题一大堆报告生成了四千字但一半是幻觉数据中途模型开始重复开头段落偶尔写一半忘了已经收集到几条关键信息。后来重构成长短期任务校验链路规划器首先把报告需求拆成四个阶段——资料检索、关键信息抽取、大纲生成、逐段撰写、引用整理。每阶段执行完先跑一个轻量的校验器确认输出是否包含目标结构和必需信息校验通过才进入下一阶段。结果幻觉率大幅下降而且单次失败的影响被隔离在原地不用整篇重来。这类改动最让我意外的收益是延迟评估指标看起来其实更高了。多轮调用增加了步骤单次任务耗时反而长了但重试率和返工率下降得更多总体完成成功率从不到六成提高到接近九成。真实业务里稳定性和可控性比单纯的“快”更重要。4.3 核心参数调优的经验值规划器的行为很大程度上由几个关键参数决定不同的任务场景对应完全不同的最优取值区间。我以实际项目中积累的数据作为参考。参数作用推荐起始值调优方向最大重规划次数控制失败后的尝试上限3复杂任务可调到 5简单任务调为 1子任务粒度每个子任务的产出物大小单步几十行文本或一次 API 调用任务越复杂粒度越粗校验强度通过才进入下一步的比例要求0.8高价值任务调高上下文窗口使用上限保留给哪段历史最近三轮加关键检查点防止早期状态冲掉当前计划这些参数没有普适最优值不同的任务类型和模型版本组合下效果差异可能非常显著。做 Agent 系统参数调优需要当成独立的工程环节来对待而非简单拍脑袋花的力气一点都不比调主模型 Prompt 少。5. 面试应答时的直接话术参考说完了机制和实操这里直接给一些面试时非常加分的话术技巧和表达结构帮你在面对这道题时更稳妥地组织回答。5.1 高分段回答的话术骨架基本结构可以分成三步先给工程立场、再展开分层架构、最后落到失败恢复设计。整个回答最好在 3~5 分钟内完成避免过长失焦。“我认为 Agent 的规划不是一个让模型直接生成步骤列表的简单动作而是一个工程化的多层级协调过程。我会分成四个层次来设计。首先是意图层把用户的模糊请求转成带验收标准的目标描述第二层是任务分解层我会基于预设的动作原语库让模型做组合式规划产出标准 JSON 计划第三层是执行层每个原语都有独立的超时、重试和校验逻辑最后一层是反馈层当执行失败时触发重规划器基于当前状态产出一个新计划并设置上限避免死循环。”这段表述听起来不会太“教科书”因为它给了一个具体的分层结构同时暗含了每一层的核心职责面试官很容易顺着你的结构追问细节也说明你有自己的思考框架。5.2 回答中加入这些细节立刻拉开差距单纯讲架构还不足以证明你的工程经验要带出一两个“只有做过才会有感知”的细节。例如可以补充说“实际落地里最容易被低估的是输出检查器。规划器生成的计划步骤必须先过一道校验确保动作名称在预设原语库内、参数类型正确、输入依赖满足。因为模型偶尔会生成一个听起来可行但实际上不在系统能力范围内的动作。这道前置校验能把这类错误在设计阶段就拦住。”这个细节证明了你对 LLM 输出不确定性的理解以及防御性编程的自觉。再比如主动提一下缓存策略。“同一类任务的高频子步骤会缓存执行结果例如数据清洗和标准化这类通用环节。缓存不仅极大降低 token 成本还让重规划路径明显提速。”这种细节通常只有做过优化的人才会想到立刻就把你从“知道概念”提升到“实际调过优”的档位。5.3 能体现段位的“反问问题”面试是双向交流在回答完机制后合适的反问会让面试官觉得你的经验确实是在真实约束下打磨出来的。可以问这些“目前团队在规划层上是用显式 DAG 控制还是完全靠模型自组织”这个问题直接触及系统结构选择。“规划器的 Prompt 和模型的 reasoning 能力之间如果出现冲突你们倾向于调整哪一侧”这个问题展示了对稳定性优先的理解。“如果分支里出现了模型幻觉出来的步骤你们是用前置校验还是事后验证来解决”这个问题展示了你对错误模式的思考。这三个问题提出来后面试官通常需要认真组织语言回答而候选人在面试中赢得这种“思考时间”对后续沟通气场的帮助非常大。6. 一些常见的坑与复盘给正在实操的你最后聊一些实际做规划系统时最常见的坑。有些是我自己踩过的有些是帮别人 review 代码时发现的每一条背后都有真实的线上案例作为支撑。6.1 别让规划器背执行器的锅很多团队做失败了第一反应是“规划写得太糙”实际上大多数场景的根子在执行器能力不足或返回信息不规范。规划模型是无辜的。我见过一个案例执行器去调用搜索 API但 API 返回的结果在代码里被解析成空数组执行器不格式化原因就丢给规划器规划器看到“成功但无事发生”只能干瞪眼。把执行器的返回信息做结构化是规划器做出正确决策的前提这条链路顺序不能搞反。6.2 上下文越长规划越容易偏离航向Agent 执行到一个长任务的中间段时规划器能接触到的上下文越堆越长而“记住”的能力是有限的。解决方式不是无限扩大上下文窗口而是做显式的状态摘要。每个阶段执行完强制生成一段精炼的“阶段摘要”包括已确认的事实、已完成的产出、待办事项、当前风险。后续规划器主要依赖摘要做决策而不是回溯全文。这个技巧在很多“长任务到后期就发疯”的场景里特别对症。6.3 有规划不等于有控制权很多初做 Agent 的人把全部精力投进“怎么让规划更聪明”却忽略了执行层的“保险丝”。实际上真正的稳定性来自执行层的护栏。比如所有调外部工具的动作必须启用超时控制所有写外部数据的动作必须经过格式校验和备份。规划层可以允许模型大胆尝试执行层必须把风险锁在笼子里。这个设计哲学放到面试里也非常加分因为它体现了全局的风险控制思维而不仅仅是局部的规划调优。6.4 评估指标别只盯着“成功率”只看最终成功率会掩盖很多问题。有的系统成功率看着不错但平均每个任务悄悄重试了七次token 消耗是正常路线的四倍。有的系统成功率略低两三个点但整体延迟下降一半、失败时报错清晰可追溯。生产环境下我更看重“单位成功成本”和“失败可诊断性”这两个指标。所以在做 Agent 系统时除了记录任务成败过程指标一定要埋点规划轮次、执行器耗时、重试次数、各步骤 token 消耗这些数据是做规划参数调优的唯一依据。我也养成了一个习惯每次重构规划链路后除了跑成功路径的测试用例一定专门跑失败注入测试——模拟 API 超时、模拟返回格式错误、模拟中间结果不合预期确认规划器在每一个失败模式下都有合理的行为。这套测试跑顺后的系统上生产时心里底气完全不同。面试如果能把这类实践案例讲出来比任何理论都更能说明问题。做 Agent 规划最迷人的地方在于它没有标准答案但也不是没有规律。把目标物化、动作原语化、执行校验化、失败可恢复化这四件事做到位你的 Agent 才真正配得上“自主”这两个字。