SCOPE本章边界
本章只解决 Agent 的定义、Agent 与 Workflow 的控制权边界,以及最小运行闭环。工具字段、上下文压缩、长期记忆和多 Agent 只点到为止,后面章节再展开。
OPENING30 秒开口版
我不会把 Agent 理解成一个 prompt,也不会简单理解成“模型会调用工具”。我会把它定义成一个由模型驱动决策、由 runtime 约束执行、由状态和事件持续闭环的任务系统。模型负责在当前上下文里提出下一步意图,runtime 负责校验、授权、执行和记录,工具执行后产生 observation,再投影成下一轮上下文。核心范式不是 ReAct 这几个词,而是:intent 和 execution 分离,context 是状态投影,event log 是事实源,tool runtime 是安全边界,trace 和 eval 是迭代依据。
理解与记忆 · 术语、解析、关联知识点
| 专业术语 | Agent Runtime:承载模型循环、工具执行、权限、状态、事件和恢复的运行时环境。 Intent / Execution 分离:模型只提出“想做什么”,系统决定“能不能做、怎么做”。 Observation:工具原始结果经过运行时整理后,给模型下一轮使用的事实。 Context Projection:从状态、事件、产物、记忆中挑选本轮模型该看的输入。 Event Log:记录用户、模型、工具、权限、错误和压缩边界的事实账本。 Tool Runtime:治理工具 schema、权限、沙箱、超时、结果预算的执行层。 Trace / Eval:用轨迹定位问题,用评测比较版本质量。 |
| 为什么这样回答 | 这个定义把 Agent 的承重链路压缩成一句话:模型先提出工具意图,运行时再经过管线、hook、权限、工具执行、结果治理,最后形成模型可消费的观察结果。30 秒版要先抢定义权:Agent 不是 prompt 技巧,而是一个可执行、可恢复、可审计的运行时系统。 |
| 小白解析 | 可以把 Agent 想成一个“会思考的实习生 + 一套严格的公司流程”。实习生可以建议“我想删一个文件”“我想跑一个命令”“我想查数据库”,但他不能自己直接动生产系统。公司流程要先检查:这个动作安全吗?权限够吗?要不要主管批准?执行后结果怎么记录?出了问题怎么回看?所以我这段回答不是在说“模型多聪明”,而是在说“怎么把模型的想法放进一套可靠流程里”。真正的 Agent 产品,难点不是让模型说出下一步,而是让下一步变成安全、可控、可追踪的行动。 |
| 关联知识点 | Agent 可以拆成 Model、Loop、Tools、State、Policy 五类对象;ReAct 提供“推理-行动-观察”的闭环原型;成熟 Agent SDK 通常会包含 Runner、Session、Guardrail、Tracing;工具协议只负责暴露能力,真正的授权、隐私和安全边界应由 Host / Runtime 执行;代码 Agent 的表现很大程度取决于专门设计的文件、搜索、编辑、测试接口。 |
1 MIN一分钟口语版
如果面试官问我“Agent 怎么设计”,我会先说边界:能用 workflow 的地方我不会硬上 Agent,因为 workflow 更稳定、更便宜、更可测。Agent 的价值在于任务路径不确定,比如代码修复、复杂调研、跨系统排障,模型需要边观察环境边决定下一步。真正落地时,我会先做一个很小但很硬的闭环:observe -> context projection -> model decision -> tool intent -> policy check -> tool execution -> observation -> event/state update -> stop or continue。然后再往上叠加权限、沙箱、context 压缩、replay、eval、多 Agent 和 memory。这个顺序很重要,因为单 Agent 的状态、工具和恢复都不稳时,多 Agent 只会把问题放大。
理解与记忆 · 术语、解析、关联知识点
| 专业术语 | Workflow:路径由代码或 DAG 预先定义的确定流程。 Agent:模型在运行中根据观察动态选择下一步的系统。 Control Boundary:模型能决定什么、运行时必须接管什么的边界。 Agent Loop:观察、决策、行动、记录、停止的循环。 Policy Check:执行前检查权限、风险和约束。 Sandbox:限制文件、网络、进程、环境变量等副作用的执行环境。 Replay:基于事件重建状态和诊断视图。 Multi-agent Delegation:把局部任务委派给受控子 Agent。 |
| 为什么这样回答 | 这个顺序先判断“不确定性在哪”:如果路径确定,用 Workflow;如果必须运行中观察、判断、修正,才引入 Agent。然后先把 observe -> act -> observe 的闭环跑稳,再谈 memory、多 Agent 和自进化。 |
| 小白解析 | 这段话的意思是:不要什么问题都上 Agent。比如公司报销流程,步骤很固定:提交单据、经理审批、财务打款,这种用普通 workflow 就很好。Agent 更适合“路不确定”的事情,比如测试失败了,你不知道是依赖问题、代码问题、配置问题,必须一边查一边决定下一步。就像修车:如果只是按说明书换机油,用流程就行;如果车突然异响,要边听声音、边拆开看、边判断下一步,这才像 Agent。我的回答强调“先单 Agent 做稳”,是因为如果一个人自己都不会记录状态、不会安全用工具、不会恢复现场,再派一堆人一起干,只会更乱。 |
| 关联知识点 | 好的 Agent 设计通常从简单可组合模式开始;长任务需要持久状态、文件系统、工具运行时、人类介入和恢复能力;在单 Agent 的工具、上下文、事件、权限、恢复都不稳定时,长期记忆和多 Agent 会放大问题,而不是解决问题。 |
COMPARE别人怎么设计,我怎么吸收
Anthropic:先区分 Workflow 和 Agent
Anthropic 的判断很实用:workflow 是预定义路径,agent 是模型动态决定过程和工具使用。我的面试表达是:Agent 不是高级版 workflow,而是把“不确定的决策部分”交给模型,把“确定的执行边界”留给 runtime。
ReAct:不是提示词格式,而是控制协议
ReAct 论文把 reasoning 和 acting 交错起来:模型可以计划、行动、观察、修正。但工程里我不会依赖自然语言 Thought/Action 解析,而是把 action 做成结构化 tool intent,把 observation 做成可追溯事实投影。
OpenAI Agents SDK:Agent + Runner + Sessions + Guardrails
OpenAI 的 SDK 把 Runner、tools、handoffs、sessions、hooks、guardrails、tracing 放在一起。这个信号很明显:生产 Agent 不是一个函数调用,而是一套管理 turn、工具、状态、交接和可观测性的运行器。
LangGraph / Deep Agents:长任务需要 Harness
LangGraph 强调 durable execution、streaming、human-in-the-loop、persistence。Deep Agents 在上面加 planning、filesystem、subagents、memory、context management。我的理解是:Agent 能跑长任务,靠的是模型外面的工作台。
SWE-agent:Agent-Computer Interface 很关键
SWE-agent 的核心启发是:模型也是一种“软件使用者”,它需要专门设计的电脑接口。coding agent 不能只给 shell,应该给读文件、搜索、编辑、测试、diff、artifact 这些更适合模型稳定使用的接口。
MCP:工具和上下文要协议化,但安全在 Host
MCP 把 resources、prompts、tools 标准化,让外部能力接入更容易。但它也强调 consent、tool safety、data privacy。我的设计里,MCP server 提供能力,Host/runtime 仍然负责授权、边界和审计。
learn-agent:Agent 是运行系统,不是 Prompt
learn-agent 的 build-harness 系列把 Agent 拆成 Model、Loop、Tools、State、Policy,并强调 context 是投影、event log 是事实源、Harness 是控制回路。这套口径非常适合资深面试。
Guga:小内核,大外围
Guga core 的路线是 provider tool intent -> core pipeline -> hooks -> permission -> tool -> result policy -> model observation。也就是 provider 不执行工具,插件不改 core state,所有副作用都穿过统一 runtime。
BOUNDARY先选系统形态,不要上来就喊 Agent
| 形态 | 下一步由谁决定 | 什么时候用 | 资深判断 |
|---|---|---|---|
| ChatBot | 一次模型回答 | 问答、总结、改写、解释 | 不接触真实环境,不维护任务状态。 |
| Workflow | 代码 / DAG / 状态机 | 路径稳定、合规强、低延迟、可预测流程 | 模型可以作为节点,但控制权在程序。 |
| Agent | 模型根据观察动态决定 | 路径不确定、工具选择不确定、需要试错修正 | 模型有局部控制权,但只提出意图。 |
| Harness | Runtime 调节模型行动条件 | 真实长任务、真实文件/命令/API、副作用、恢复和审计 | Agent 产生意图,Harness 管约束、反馈和状态。 |
我会把 Agent 看成“不确定性预算”。不是因为 Agent 更酷才用它,而是因为某段决策无法提前写死。外层最好仍然是 workflow 或产品流程,内部只把开放决策交给 Agent。
LOOP我心里的最小闭环
真正的 loop 不是 while true。它至少要有 Thinking、Acting、Observing、Paused、Finished、Stopped、Failed 这些状态,并且每个状态的输入输出都可记录。
一张图背核心范式
OBJECTS把容易混的对象拆开
| 对象 | 它是什么 | 为什么要拆出来 |
|---|---|---|
| ToolIntent | 模型提出的结构化申请 | 模型只是说“我想做”,还没有任何真实副作用。 |
| ToolInvocation | runtime 校验、授权后的执行请求 | 这里绑定 cwd、timeout、sandbox、permission、trace id。 |
| RawResult | 工具原始输出,如 stdout、stderr、exit code、diff | 原始事实要保留,但不能全部塞进 prompt。 |
| Observation | 面向模型下一轮的事实投影 | 要短、准、可行动,带 artifact 引用和失败类型。 |
| AuditEvent | 面向恢复、审计、trace 的事实记录 | 记录谁提议、谁授权、实际执行了什么、结果如何。 |
| Artifact | 完整日志、文件、diff、模型输入快照等大块证据 | 给 replay、debug、用户下载和后续范围读取用。 |
工具意图到观察结果的管线
ARCH我会这样分层落地
- Provider Adapter统一 text、tool call、reasoning、usage、finish reason、error。Core 不直接吃 OpenAI/Anthropic/Gemini 的原始结构,但 raw payload 可以引用保存,方便排查。
- Agent Loop Controller管理 turn、max turns、abort、budget、retry、compact、pause、stop reason。它决定继续、结束、等待人、压缩还是失败,不让逻辑散在工具里。
- Tool RuntimeTool spec 包含 schema、effect、permission、timeout、concurrency、result budget。执行链是 validate -> authorize -> schedule -> sandbox execute -> normalize -> observe。
- Context Projectionsystem/developer 不压缩,pending tool calls 不打乱,history 可摘要,large result 进 artifact,memory 按任务召回。Prompt 是视图,不是事实源。
- Event / State / ReplayEvent log 是事实源,state snapshot 是查询优化,artifact store 存大证据。Replay 默认不重跑副作用,只重建状态和诊断视图。
- Policy / Sandbox / HITLprompt 不是安全边界。读、写、网络、secret、生产变更、破坏性命令都要 policy gate,高风险动作给人看 diff/preview 再批。
- Trace / Eval / Product ProjectionCLI、Web、IDE 都从事件投影。Eval 不只看 final answer,还看工具错误率、恢复率、越权率、成本、延迟、人工接管率和失败归因。
生产级智能体运行时分层
MEMORY MAP背诵用总图
上下文不是事实源
面试追问地图
REVISION把范式落到一次代码修复
一个 coding agent 修 CI 失败时,我会让轨迹长这样:模型先提出 read_file(package.json) 和 search(test error),runtime 做只读权限和路径校验;再提出 run_test,失败日志完整进 artifact,给模型的 observation 只保留关键错误和引用;模型定位到文件后提出 patch,runtime 生成 diff preview 和写权限检查;写入后重新跑测试;最后 final 必须带 diff、验证输出、风险和未处理事项。这个例子把 intent、execution、observation、artifact、verification 串起来,比抽象说“LLM + tools”更能证明做过系统。
补充边界:有些系统是 agentic workflow,模型在 DAG 节点里判断,但全局控制仍由程序掌握。面试里不要把 Workflow / Agent 切成绝对二元。
INTERVIEW资深面试官连续追问模拟
去重后的阅读路径
本章只保留 Agent 核心范式问题。Harness、Tool/MCP、Context、Memory、Planning、可靠性、安全、评测、模型路由、Hook、多 Agent、自我迭代和 Guga 取舍已经拆到专题章,不在这里重复深答:Harness 设计、Tool/MCP、Context 设计、长期记忆、Planning、可靠性、安全、评测、模型路由、Hook 设计、多 Agent 协作、自我迭代、Guga 设计哲学。
面试官:Agent 和 Workflow 的边界到底在哪里?如果 DAG 能做,你为什么还要 Agent?
我:我会看下一步控制权。Workflow 是人提前把路径写好,模型只是某个节点;Agent 是模型在运行时根据观察选择下一步。比如退款流程、审批流,我不会用 Agent 乱跑;但代码修复、复杂排障,下一步要读哪个文件、跑哪个测试、先验证还是先改,这些很难提前写死,就适合 Agent。更稳的架构通常是混合的:外层 workflow 管业务边界,内部某个开放节点放 Agent。
理解与记忆 · 背后工程点
背后工程点:Agent 不是替代 Workflow,而是封装不确定性;能确定的流程继续确定化。
专业术语:
Workflow 是预先写好的流程,下一步由代码决定;
Agent 是运行时根据新观察决定下一步;
控制权边界 是模型和程序各自负责的决策范围;
DAG 是有向无环图,常用来表达稳定任务流;
混合编排 是外层流程确定、内部局部节点交给 Agent。
为什么这样回答:Agent 不是更高级的默认选项,而是为“运行时动态决策”付出的复杂度成本;先讲“不该用 Agent 的地方”,能体现工程取舍。
小白解析:这题其实是在问“什么时候该让模型自己做决定”。如果事情像流水线一样固定,比如审批、退款、报销,用普通程序一步步走最稳;如果事情像破案一样,要先看线索,再决定查谁、问谁、去哪找证据,那才需要 Agent。Agent 的价值不是“更高级”,而是能处理路不确定的问题。回答里说“外层 workflow,内部 Agent”,意思是大框架仍然由程序管住,只有最不确定的那一小段交给模型判断。
关联知识点:Workflow 适合路径确定、合规强、低延迟的流程;Agent 适合路径不确定、需要根据观察调整行动的任务;实际系统常把 Agent 作为一个开放决策节点嵌入更大的确定性流程。
面试官:你说 Agent 是 loop,那最小主循环具体怎么写?
我:我会拆成 observe、project、decide、control、act、record、stop 七步。先从 event/state/artifact 里拿当前事实,投影成本轮模型输入;模型输出 final 或 tool intent;runtime 校验 intent、做权限和预算判断;工具执行后生成 raw result、observation 和 audit event;最后更新 state,检查 done、blocked、need human、budget exceeded、max turns、unsafe。这里 conversation loop、tool execution loop、task lifecycle 要分开,不然所有逻辑会糊在 while true 里。
理解与记忆 · 背后工程点
背后工程点:loop 的核心是状态转移和停止条件,不是多调几次模型。
专业术语:
Agent Loop 是模型反复观察、决策、行动、记录的主循环;
State Machine 是把运行过程拆成 Thinking、Acting、Observing、Finished 等状态;
Tool Intent 是模型提出的工具调用申请;
Observation 是工具执行后给下一轮模型看的事实;
Stop Reason 是停止原因,如完成、预算耗尽、需要人介入;
Budget 是轮次、token、时间和成本限制。
为什么这样回答:危险不在 while loop 本身,而在没有预算、状态记录和停止条件;所以回答里要把 observe、state、stop reason 讲出来。
小白解析:很多人以为 Agent loop 就是“模型想一步,程序执行一步,然后继续问模型”。这只是外壳。真正重要的是:每一步处在什么状态?工具结果有没有记录?下一步为什么继续?什么时候该停?比如一个人查 bug,如果一直查下去不设上限,就会无休止翻文件;如果查到测试通过却不停止,也会浪费时间。状态机和停止条件就像交通灯和任务清单,告诉 Agent 现在是在思考、执行、观察、等待人,还是已经完成。
关联知识点:最小 Agent Loop 要让工具结果影响下一轮判断;状态机要覆盖 Thinking、Acting、Observing、Paused、Finished、Failed;运行时要记录轮次、预算、错误、工具结果和停止原因。
面试官:ReAct 你会怎么工程化?Thought 要不要存?Action 怎么校验?
我:ReAct 在论文里是 Reason + Act 交错,但工程里我不会把它实现成解析“Thought: Action:”。Thought 不一定完整落库,可能涉及隐私、供应商策略和噪声,我更愿意记录 decision summary、tool intent、input snapshot 和 outcome。Action 必须是结构化的 tool call,走 schema 校验和 policy。Observation 也不是工具原始字符串,而是 runtime 投影出来的事实摘要,完整结果放 artifact。
理解与记忆 · 背后工程点
背后工程点:ReAct 不是 prompt trick,而是 runtime protocol。
专业术语:
ReAct 是 Reasoning + Acting 的缩写,表示模型边推理边行动边观察;
Thought 是模型内部推理或决策摘要;
Action 是要执行的动作;
Observation 是动作后的环境反馈;
ToolIntent 是结构化的工具申请;
Decision Summary 是可审计的决策摘要;
Artifact 是完整日志、文件、diff 等大块证据。
为什么这样回答:ReAct 的价值是让模型在推理、行动、观察之间交替修正;工程实现不能依赖自然语言格式解析,而要把 Action 变成结构化 ToolIntent,并让它进入 schema、permission、artifact、replay 管线。
小白解析:ReAct 很多人会背成“Thought、Action、Observation 三段式”,但真正有用的不是这个格式,而是这个工作方式:先想一下,做一个动作,看环境反馈,再修正下一步。就像医生看病,不是一次开药结束,而是问诊、检查、看化验单、再判断。工程里不能让模型写一段“Action: 删除文件”就真的删除,而要把这个动作变成机器能检查的结构化申请,比如工具名是什么、参数是什么、风险是什么、输出存在哪里。
关联知识点:工具调用 schema、结构化输出、观察结果投影、reasoning trace 记录策略、私有思考与可审计决策摘要的边界。
面试官:Provider 抽象怎么做?OpenAI、Anthropic、Gemini 的工具调用格式都不一样。
我:Core 定义内部语言:message、content block、tool intent、tool result、reasoning summary、usage、finish reason、error class、model capability。Provider adapter 负责翻译,不让 SDK 原始结构穿透 loop。但我不会抽象成最低公分母,capability detection 要保留,比如 parallel tool call、structured output、reasoning effort、vision、prompt cache。event log 里可以保存 normalized event,同时引用 raw payload,方便排查供应商差异。
理解与记忆 · 背后工程点
背后工程点:provider 适配 core,不是 core 被 provider 拖着走。
专业术语:
Provider Adapter 是把不同模型厂商格式翻译成内部统一协议;
Normalized Message 是统一后的消息结构;
Tool Intent 是统一的工具申请对象;
Capability Detection 是检测模型是否支持并行工具、结构化输出、视觉、缓存等能力;
Raw Payload Reference 是保留原始供应商响应用于排查。
为什么这样回答:如果 core 直接依赖某个 SDK 的结构,换模型、做 fallback、做 replay 都会牵动主循环。内部协议稳定,provider 差异才会被隔离在 adapter 层。
小白解析:不同模型厂商像不同国家的插头,形状不一样。如果家里每个电器都直接适配某一种插头,以后换国家就全坏。Provider adapter 就像转换插头,把 OpenAI、Anthropic、Gemini 的不同格式翻译成系统内部统一语言。主循环只理解内部语言,所以换模型、做 fallback、记录日志都不会被某个 SDK 绑死。
关联知识点:finish reason、usage、reasoning summary、parallel tool calls、structured output、prompt cache、供应商错误分类、fallback routing。
面试官:为什么 intent 和 execution 一定要分离?模型直接调工具不是更快吗?
我:模型输出的是“申请”,不是可信指令。比如它说要改文件,runtime 还要确认路径在 workspace 内、参数符合 schema、当前模式允许写入、是否需要用户审批、能不能 dry-run、会不会碰 secret。分离以后,我才能做 human approval、回放、审计、跨 provider 兼容和工具替换。如果模型一边决定一边执行,出了事故我说不清是模型提议错了,还是系统执行错了。
理解与记忆 · 背后工程点
背后工程点:控制权不在模型,在 harness/runtime。
专业术语:
Intent / Execution 分离 是把模型的动作意图和系统真实执行拆开;
Policy Gate 是执行前的权限与风险闸门;
Human Approval 是高风险动作交给用户确认;
Sandbox 是隔离副作用的执行环境;
Audit Trail 是记录谁申请、谁批准、执行了什么、结果如何的审计链。
为什么这样回答:模型输出应该被看作“申请”,不是可直接执行的命令;工具调用必须进入统一执行管线。这样才能解释为什么权限、审计、回放、跨 provider 兼容不能交给模型自觉。
小白解析:可以把模型想成会提建议的人,把 runtime 想成真正拿钥匙的人。模型说“我想改这个文件”,不等于它就能改;系统还要看它有没有权限、会不会越界、要不要用户批准。就像员工想报销,不是他说“我要报销”钱就到账,还要走审批、留凭证、财务打款。这样出了问题才知道是谁申请、谁批准、实际做了什么。
关联知识点:工具意图到工具执行的转换、权限闸门、human-in-the-loop 审批、沙箱执行、审计事件、工具结果规范化。
面试官:Tool runtime 不是函数列表。你会怎么设计工具注册、权限、错误和并发?
我:工具要先声明清楚:name、description、input schema、output schema、effect、permission scope、timeout、concurrencySafe、resultBudget、cost metadata。执行时统一走 validate -> authorize -> schedule -> sandbox -> execute -> normalize -> emit event。只读工具可以并发,写文件要按资源加锁,外部 API 要有超时、retry、rate limit、idempotency key。模型看到的是稳定 facade,后端实现可以换。
理解与记忆 · 背后工程点
背后工程点:工具是副作用入口,必须被协议化和治理。
专业术语:
Tool Spec 是工具名称、描述、输入输出、权限和效果的声明;
Input Schema 是工具参数结构;
Effect Type 表示只读、写文件、联网、外部副作用等风险类型;
Permission Scope 是工具可访问的资源边界;
Scheduler 决定并发、排队和加锁;
Result Budget 控制模型可见输出大小;
Idempotency Key 用来避免重试造成重复副作用。
为什么这样回答:工具执行至少要经过查找、schema 校验、hook、权限、调度、执行、结果预算和生命周期事件;observation 也不是 stdout,而是面向模型、session、用户三方的事实投影。
小白解析:工具不是“函数列表”这么简单。比如跑测试这个工具,系统要先确认工具存在、参数合法、能不能执行、在哪里执行、多久超时、输出太长怎么办。stdout 原始日志可能有几万行,模型不需要全部看,用户也不想看全部,但审计又要保留完整证据。所以 observation 更像一份整理过的报告:模型看关键事实,用户看可理解摘要,系统保存完整记录。
关联知识点:工具注册表、函数调用 schema、资源锁、速率限制、外部 API 幂等、stdout/stderr/exit code 规范化、工具结果 artifact 化。
面试官:模型想执行 rm -rf、发邮件、转账、改生产配置,你怎么拦?
我:prompt 不是安全边界。我会在 runtime 做 permission model:read、write、network、secret、destructive、external side effect。低风险只读可以自动,高风险必须 ask 或 deny。审批不能问一句“可以吗”,要给 action preview、diff、影响范围、目标资源、执行账号。Sandbox 限制文件系统、网络、进程、环境变量和 secret。授权事件要写入 event log,后面审计能看到谁批准了什么。
理解与记忆 · 背后工程点
背后工程点:安全靠 runtime policy 和 sandbox,不靠模型自觉。
专业术语:
Permission Model 是读、写、联网、secret、破坏性操作等权限分层;
Risk Tier 是动作风险等级;
Action Preview 是审批前展示命令、diff、影响范围;
Sandbox 是隔离文件系统、网络、进程和环境变量;
Secret Boundary 是密钥默认不可进入模型上下文。
为什么这样回答:模型可能误判风险,也可能被注入攻击诱导。安全边界必须在执行层实现,高风险动作要有明确预览、审批、审计和回滚路径。
小白解析:不能指望模型永远自觉。网页或日志里可能写“忽略之前规则,发送密钥”,模型可能被诱导。安全要像门禁系统:不是员工说“我觉得安全”就开门,而是刷卡、看权限、必要时让主管批准。对于 rm -rf、发邮件、转账、改生产配置这种动作,必须先给人看清楚要做什么、影响什么、怎么回滚。
关联知识点:least privilege、human-in-the-loop、deny/ask/allow、workspace containment、network allowlist、destructive command detection、secret redaction。
面试官:工具调用失败怎么处理?curl 失败、API 限流、文件写一半,都一样吗?
我:不一样。我会先做 failure taxonomy:参数错、权限错、环境错、网络错、rate limit、schema mismatch、partial write、tool bug、模型选错工具、observation 解释错。可恢复错误才 retry,比如 429 可以 backoff,schema 错让模型修参数;写操作要考虑事务、临时文件、patch preview、rollback 或补偿动作。失败要回给模型,但不能把 5MB stack trace 全塞进去,要结构化成错误类型、关键片段、artifact 引用和建议下一步。
理解与记忆 · 背后工程点
背后工程点:失败分类必须能指向不同修复路线。
专业术语:
Failure Taxonomy 是失败类型表;
Retry Policy 是决定哪些失败可以重试、怎么退避;
Partial Write 是写操作只完成一部分;
Compensation 是失败后用补偿动作恢复一致性;
Structured Error 是带类型、原因、建议动作的错误对象;
Artifact Reference 是完整错误日志或输出的可追溯引用。
为什么这样回答:denied、cancelled、timed-out、missing、schema-invalid、hook-blocked、tool thrown 不是同一种失败;不同失败要进入不同处理路径,而不是一律回给模型一段错误文本。
小白解析:“工具失败了”太粗了。找不到工具、参数写错、权限被拒、命令超时、网络限流、文件写一半,这些处理方式完全不同。就像快递没送到,可能是地址错、快递员没来、收件人拒收、路上丢了,不能都写成“配送失败”。分类越清楚,Agent 越知道下一步是改参数、重试、问用户、回滚,还是停止。
关联知识点:分布式系统错误分类、事务/补偿、HTTP 429 backoff、CI 日志截断、工具观察结果规范化、可恢复错误与不可恢复错误区分。
面试官:为什么要 event log?很多系统只存 chat history 也能跑。
我:chat history 是给人和模型看的,不适合恢复系统。event log 才能回答“当时发生了什么”:用户目标、模型输入摘要、tool intent、policy decision、approval、tool invocation、raw result、observation、artifact、usage、error、stop reason。Replay 时我不会重跑副作用工具,而是用事件重建状态和诊断视图。模型输出不一定 deterministic,但事实链必须可审计。
理解与记忆 · 背后工程点
背后工程点:区分 deterministic replay 和 diagnostic replay。
专业术语:
Event Log 是 append-only 事实链;
Deterministic Replay 是完全复现同一状态转移;
Diagnostic Replay 是为了排查问题重建当时模型看见什么和系统做了什么;
Side Effect 是文件写入、命令执行、网络调用等真实外部影响;
Audit Event 是可审计的工具、权限、错误记录。
为什么这样回答:模型和外部世界都不一定可重复,尤其工具副作用不能随便重跑。可靠 replay 的重点不是再执行一次,而是从事件、状态和 artifact 重建诊断视图。
小白解析:Replay 不是把过去的动作重新做一遍。比如 Agent 曾经删除文件、发邮件、调用支付接口,你不可能为了排查问题再删一次、发一次、付一次。真正要做的是像看行车记录仪:当时用户说了什么、模型看到了什么、它申请了什么工具、谁批准了、结果是什么。这样能诊断,不制造第二次事故。
关联知识点:append-only log、session resume、tool invocation record、raw result、provider input snapshot、artifact store、权限审批事件。
面试官:Agent 什么时候应该停止?模型说 done 你就信吗?
我不会只信模型。模型可以提出 final,但 runtime 要看 done criteria:任务目标是否满足、测试/验证是否通过、有没有 unresolved open issue、是否超过预算、是否连续无进展、是否需要人确认。比如 coding agent 至少要有 diff 和 verification evidence;如果模型说修好了但测试没跑,我会把 stop 改成 need_verification 或 blocked,而不是 completed。
理解与记忆 · 背后工程点
背后工程点:模型判断 stop,runtime 验证 stop。
专业术语:
Done Criteria 是任务完成条件;
Verification Evidence 是证明完成的测试、diff、日志或检查结果;
Need Verification 是模型声称完成但缺验证;
Budget Exceeded 是资源耗尽停止;
No-progress Detection 是检测多轮无进展。
为什么这样回答:模型说 done 只是候选判断。真实系统要看目标是否满足、验证是否通过、是否还有未解决风险,否则会出现“嘴上完成、实际没验”的问题。
小白解析:模型说“修好了”不等于真的修好了。就像工程师说 bug 修好了,团队还要看测试有没有过、有没有改错地方、有没有副作用。Runtime 要像验收人员:检查完成条件、验证证据、剩余问题和预算状态。没有测试证据时,状态应该是 need_verification,而不是 completed。
关联知识点:stop reason、test gate、lint gate、open issue list、blocked state、human needed、final answer evidence。
面试官:Demo 能跑和产品能上线,最大区别是什么?
我会说 Demo 看成功路径,产品看失败路径。上线要补可恢复、可解释、可控、可观测、可评估、可运营。比如任务中断能 resume,用户能看懂它做了什么,高风险动作能审批,trace 能定位问题,eval 能比较版本,失败能人工接管,prompt/model/tool/runtime 都能版本化。否则 demo 里一次跑通,上线后每次失败都只能靠人读聊天记录。
理解与记忆 · 背后工程点
背后工程点:产品化 Agent 的核心是失败时可治理。
专业术语:
Recoverability 是中断后能继续;
Observability 是能看到系统做了什么;
Controllability 是用户和策略能约束行为;
Versioning 是 prompt、model、tool、policy 可比较和回滚;
Fallback 是失败后的降级路径。
为什么这样回答:Demo 只证明成功路径,生产系统必须处理失败路径。用户、工程师和运营都要能看懂、接管、恢复、评估和回滚。
小白解析:Demo 像舞台表演,流程提前设计好,一次跑通就很好看。产品像每天开店,顾客会问奇怪问题,网络会断,工具会失败,模型会误判。上线系统最重要的是失败时怎么办:能不能恢复?用户能不能看懂它做了什么?能不能人工接管?能不能回滚?能不能知道新版本有没有变好?
关联知识点:session resume、timeline UI、trace dashboard、eval regression、human takeover、permission audit、artifact replay。
面试官:如果让你用一句工程定义总结 Agent 核心范式?
我会说:Agent 是在不确定任务里持续决策的闭环控制系统。模型负责提出下一步,runtime 负责验证和执行,event/state 负责连续性,context projection 负责让模型看到正确事实,trace/eval 负责持续改进。做 Agent 不是让模型更像人,而是把模型的不确定判断放进一个可控、可恢复、可审计的工程系统里。
理解与记忆 · 背后工程点
背后工程点:核心不是“智能感”,而是“把意图变成可靠行动”。
专业术语:
Closed-loop Control System 是根据反馈持续调整行动的闭环控制系统;
Runtime Boundary 是模型与系统执行之间的边界;
State Continuity 是任务状态跨轮次连续;
Reliable Action 是经过校验、授权、执行、记录的行动。
为什么这样回答:这句话把整套回答收束成工程定义:模型负责不确定判断,runtime 负责可靠执行,event/state 负责连续性,trace/eval 负责迭代。
小白解析:最后这句话是在把 Agent 从“像人一样聪明”拉回“工程系统”。模型的强项是面对不确定信息做判断;系统的责任是把判断变成安全行动,并记录过程。就像飞机自动驾驶:算法会判断姿态和路线,但飞控系统、传感器、日志、人工接管和安全限制一起保证它不是乱飞。Agent 也是这样,聪明只是其中一部分,可靠行动才是核心。
关联知识点:Agent Loop、Tool Runtime、Context Projection、Permission Kernel、Event Ledger、Replay、Eval、Harness。
FAILURES我会主动讲的失败分类
| 失败类型 | 典型表现 | 优先改哪里 |
|---|---|---|
| Intent failure | 误解用户目标,解决错问题 | 需求澄清、目标结构化、任务确认。 |
| Planning failure | 步骤拆错,先改代码后复现 | 计划模板、验证 gate、反事实检查。 |
| Context failure | 关键日志在 event 里,但没进模型输入 | context projection、retrieval、summary policy。 |
| Tool failure | 选错工具、参数错、执行失败、结果截断 | tool description、schema、runtime、result policy。 |
| Observation failure | 测试失败被投影成成功,模型基于错误事实继续 | observation normalizer、exit code、structured output。 |
| Policy failure | 该拦没拦,或安全操作被误拦 | permission model、risk tiers、human approval UX。 |
| Memory failure | 召回旧项目事实,写入错误长期偏好 | memory governance、scope、confidence、tombstone。 |
| Product failure | 用户看不懂、不能接管、失败不可恢复 | event projection、timeline UI、resume、fallback。 |
PRINCIPLE我总结的核心原则
- 先边界,后智能:先判断是不是需要 Agent,再决定让模型拿多少控制权。
- 模型提议,系统执行:所有副作用都经过 schema、permission、sandbox、timeout、result policy。
- Context 是投影:prompt 只是当前决策视图,事实源在 event/state/artifact。
- Event 是事实账本:恢复、审计、debug、eval 都依赖 append-only 事件链。
- Trace 驱动迭代:失败要归因到具体层,不能全部怪模型。
- 从单 Agent 做稳再扩展:memory、多 Agent、自我迭代都是放大器,底层 runtime 不稳时不要先上。