Agent 面试指南

Agent 可靠性与恢复要如何设计?

可靠性不是“多 retry 几次”,而是让长任务在失败、中断、恢复、回放时仍然有事实依据。

SCOPE本章边界

本章专讲长任务如何在中断、半执行和外部状态变化后恢复。这里把 replay、retry 和 time travel 的副作用语义讲清楚,其他章只复用这套分法。

30 SEC面试开口版

我会把 Agent 可靠性设计成 durable facts + recovery gates + idempotent effects。模型、工具、权限、artifact、context projection、验证结果都要写事件账本;外部副作用要有幂等键、锁、事务或补偿;恢复时先重建 session/runtime binding,再扫描 interrupted run、pending effect 和未完成 tool pair,最后从安全边界继续、分叉或请求人工确认。

理解与记忆 · 术语、解析、关联知识点
专业术语Durable Facts:可持久化事实。
Recovery Gate:恢复前的安全检查门。
Idempotency:重复执行仍保持同一效果。
Pending Effect:未确认完成的副作用。
Replay:从记录事实重建视图或模拟轨迹。
为什么这样回答可靠性题最怕只说重试。先讲事实源和副作用语义,面试官会知道你考虑过崩溃、重复执行和恢复安全。
小白解析不是摔倒了就一直重跑,而是先看账本:做到哪一步、钱扣没扣、文件写没写、还能不能安全继续。
关联知识点Guga M5 明确采用 append-only session/event/artifact store;LangGraph durable execution 强调 checkpoint、determinism、idempotent side effects。

1 MIN一分钟口语版

我的可靠性分五层。第一,事件事实源:run、turn、model request、tool intent、permission、execution、artifact、context decision、verification 都要有 durable event。第二,副作用治理:写文件用 patch/atomic/write set,API 写入用 idempotency key,无法回滚就标记需要人工确认。第三,恢复协议:resume 时不相信内存,重建 conversation、workspace、tool registry、permission mode 和 artifact refs。第四,回放模式分开:诊断 replay 不重跑副作用,simulation replay 写成新 trajectory,live retry 重新走权限。第五,产品层要有 interrupt、resume、fork、rollback、handoff 和失败解释。

理解与记忆 · 术语、解析、关联知识点
专业术语Append-only Event Log:只追加事实日志。
Atomic Write:原子写入。
Simulation Replay:模拟回放。
Live Retry:真实重试。
Fork:从历史节点分叉。
为什么这样回答一分钟版要覆盖存储、执行、恢复、回放、产品五层,避免可靠性只停留在后端存储。
小白解析长任务像长途运输:有运单、GPS、交接单、损坏处理和备用路线,车坏了也知道货在哪里。
关联知识点learn-agent hosted harness 把 job、workspace、sandbox、secret、durable step、worker lease 分开;Guga JSONL session store 支持 revision、idempotency 和 corruption diagnostics。

FLOW从故障到安全继续

FACTS模型、工具、权限、验证都先落事实。
EFFECTS副作用带幂等、锁、补偿和状态。
CHECKPOINT在安全边界保存可恢复进度。
RESUME恢复时扫描 interrupted 和 pending effect。
CONTINUE继续、分叉、回滚或请求人工确认。

可靠性恢复链路

Agent 可靠性与恢复要如何设计? Mermaid diagram 1

COMPARE主流方案怎么讲

LangGraph

LangGraph durable execution 通过 checkpointer 保存进度,要求非确定性和副作用放进 task,并强调 idempotent side effects 和恢复语义。

Temporal / Durable Workflow 思路

长任务系统通常把状态、步骤结果和副作用边界外部化,让 worker 重启后能从历史恢复,而不是依赖进程栈。

OpenAI / Agent 平台

Tracing、sessions、guardrails 和 hosted tools 展示了运行轨迹、状态和控制面都需要成为可观察对象。

Guga / learn-agent

Guga M5 把 session/event/artifact/replay 作为 memory-ready substrate;learn-agent hosted harness 讨论 worker、lease、vault、artifact 和 notification。

DESIGN我会怎么设计

  1. Event Storeappend-only,带 session id、branch id、revision、schema version、actor、causation、idempotency key。
  2. Effect Ledger记录准备执行、已经执行、是否可回滚、外部 id、补偿路径和确认状态。
  3. Resume Gate恢复时检查 tool pair、workspace diff、pending effects、permission mode、artifact availability 和 context projection。
  4. Replay Modes诊断回放不重跑世界;模拟回放走 mock/frozen provider;真实重试重新走权限和幂等。
  5. User Control用户可以暂停、恢复、分叉、回滚、查看失败解释和批准高风险恢复动作。

TRADEOFF常见问题和优化

问题:每步持久化太慢

按风险选择 durability mode:低风险异步写,高风险副作用前后同步写,关键 checkpoint 强一致。

问题:重试可能重复副作用

写操作必须带幂等键、外部 request id 或补偿策略;恢复默认保守,不自动重跑未知状态。

问题:日志很多难诊断

event log 是事实源,trace view 是诊断投影;不要把所有日志原样给用户。

问题:恢复后上下文变旧

resume 时重建 runtime binding 和 context projection,检查 workspace、资源、权限和 active plan 是否仍有效。

REVISIONPending effect 恢复案例

如果事件账本里只有 effect_started(api.create_ticket, idempotency_key=k),没有 effect_completed,恢复时不能直接重试。第一步用 k 查询外部系统;查到已创建,就补写 completed event 和外部 ticket id;查不到,且 API 支持幂等,才允许 retry;查不到且 API 不支持幂等,进入 need_human,让用户确认是否可能已产生副作用。写文件也类似:atomic rename 崩溃后先检查 temp file、目标 hash 和 write set,再决定补交、回滚或人工确认。

LangGraph checkpoint / persistence 很有价值,但 checkpoint 不天然解决外部副作用一致性。time travel 会重新执行 checkpoint 后节点,所以要把它和 diagnostic replay 分开讲。

REVISIONCancel 如何传播

位置取消动作完成后状态
模型 streamingabort provider stream,写 cancel_requested 和 model_abort 事件。不再追加模型输出;保留已生成片段为 partial artifact。
本地工具进程向 process group 发终止信号,超时后强杀,收集 stdout/stderr 和 exit 状态。tool_cancelled / tool_killed,进入 pending effect scan。
外部 API 工具如果请求已发出,使用 idempotency key 查询外部状态;不盲目重试或反向补偿。completed、cancelled、unknown_pending 三选一。
子 Agent父 run 广播 cancel token;子 run 写 cancel_requested,停止继续委派和高风险动作。child_cancel_ack 或 child_cancel_failed。
最终 run保存 partial artifacts、已完成证据、未确认副作用和下一步恢复建议。cancelled / interrupted,不伪装成 failed 或 completed。

取消不是简单把 UI 状态改成停止,而是要让模型、工具、子任务和副作用账本都收敛到一个可解释状态。

INTERVIEW高强度追问

面试官:Agent 长任务最常见的可靠性问题是什么?第二层追问:为什么不能只靠 retry?

我:我第一反应不会是加 retry。Agent 长任务的可靠性问题包括 process crash、provider timeout、tool half-executed、context compaction missing facts、permission wait、external state change。比如 Agent 正在发邮件、写文件、创建 ticket,retry 可能会重复发、重复写、重复创建。真正要先保证 durable facts、checkpoint、effect ledger、idempotency 和 recovery gate:事实能不能落账,副作用有没有完成,恢复时还能不能安全继续。只有这些判断清楚了,才决定要不要 retry。

理解与记忆 · 背后工程点

背后工程点:Retry 只是恢复策略之一,不是可靠性基础。
专业术语:
Retry:重试。
Checkpoint:检查点。
Idempotency:幂等。
Recovery Gate:恢复闸门。
为什么这样回答:先反驳简单重试,抓住可靠性本质。
小白解析:转账失败不能一直点重试,先要确认钱有没有扣。
关联知识点:LangGraph durable execution 要求副作用用 task 包起来并保证幂等;Guga M5 恢复默认保守。

面试官:哪些状态必须 durable?第二层追问:哪些可以重算?

我:我会把事实源和派生视图区分开。必须 durable 的是 session metadata、event log、tool intent/result、permission decisions、artifact refs、pending effects、plan state、context decisions、verification results 和 usage。可以重算的是 UI projection、部分 summary、token estimate、cache 和 model input view。可重算不等于随便算,必须从 durable facts 重新生成。比如恢复后重新投影 context 可以,但不能靠旧 messages 猜工具到底有没有执行。

理解与记忆 · 背后工程点

背后工程点:事实源和派生视图要分开。
专业术语:
Source of Truth:事实源。
Projection:投影视图。
Artifact Ref:产物引用。
Usage:用量。
为什么这样回答:列出具体状态能显示工程经验。
小白解析:发票和付款记录必须保存,报表图表可以重新生成。
关联知识点:Guga M5 区分 durable events、artifact refs、conversation/model-input/audit view。

面试官:工具执行中途崩溃怎么办?第二层追问:怎么判断有没有副作用?

我:工具执行中途崩溃,最怕的是系统不知道副作用到底执行到哪了。所以执行前要写 effect_started,执行后写 effect_completed;只有 started 没 completed,就是 pending effect。恢复时按 effect 类型检查:文件写看 temp file、diff、worktree;API 写查 idempotency key、external request id 或外部状态;shell 看进程、输出和 changed files。能确认就 commit 或 rollback,不能确认就 ask human 或 mark inconsistent。不能靠 retry 硬重跑,因为可能把真实世界副作用重复一遍。

理解与记忆 · 背后工程点

背后工程点:半执行副作用要被显式建模。
专业术语:
Effect Started:副作用开始事件。
Effect Completed:副作用完成事件。
Pending Effect:待确认副作用。
Inconsistent:不一致状态。
为什么这样回答:这是可靠性题的硬工程点。
小白解析:装修工走了,不知道墙拆没拆完,要先现场检查,不要直接继续砸。
关联知识点:learn-agent hosted harness 强调 durable step、worker retry/resume;Guga 事件 marker 区分 completed/failed/cancelled/timeout/interrupted。

面试官:Replay 是不是重新执行一遍?第二层追问:LangGraph replay 和你的 replay 有什么区别?

我:Replay 不是让事故再发生一次,而是看行车记录仪。我会分三种:diagnostic replay 只从 durable facts 重建模型输入、工具时间线和审计视图,不重跑 provider 或 tool;simulation replay 用 mock tool 或 frozen provider 生成新轨迹,适合测策略变化;live retry 才是真实重试,必须重新走权限、幂等、沙箱和 pending effect 检查。比如复盘一次错误转账,只能看历史流水和当时 observation,不能为了复盘再真转一次钱。

理解与记忆 · 背后工程点

背后工程点:回放模式不同,副作用语义完全不同。
专业术语:
Diagnostic Replay:诊断回放。
Simulation Replay:模拟回放。
Live Retry:真实重试。
Trajectory:轨迹。
为什么这样回答:能体现你不会把“回放”说混。
小白解析:看监控录像不等于让事故重新发生一遍。
关联知识点:Guga replay audit 默认不重跑 provider/tool/mutating hook;LangGraph time travel 文档说明 checkpoint 后节点会重新执行。

面试官:恢复时如何保证 tool call/result 配对合法?第二层追问:如果只记录了 tool call 没记录 result 呢?

我:恢复不是把旧 messages 拼回来就完了,很多 provider 要求 tool_call 和 tool_result 成对合法。恢复 conversation view 前要跑 pairing safety:已完成 tool call 必须有对应 result;如果只有 call 没有 result,不能直接塞回 provider。我的处理是把 run 转成 interrupted state,合成受控 error observation,或者交给 host 决策要 retry、rollback 还是问用户。这样模型看到的是合法、可解释的状态,不会因为一半工具轮次把 provider 协议打坏。

理解与记忆 · 背后工程点

背后工程点:恢复不是拼聊天记录,要维护 provider contract。
专业术语:
Tool Pairing:工具配对。
Conversation View:对话视图。
Provider Contract:模型接口契约。
Interrupted State:中断状态。
为什么这样回答:这展示你熟悉 tool-calling 协议坑。
小白解析:订单有下单记录但没有支付结果,系统不能假装订单完成。
关联知识点:Guga M5 acceptance example 明确要求悬空 tool_use 恢复时要净化或标记 interrupted。

面试官:Checkpoint 频率怎么定?第二层追问:每个 token 都写是不是太重?

我:不用每个 token 都同步写,那会把性能拖死;但关键边界必须写。我要持久化 run/turn start、model response、tool intent、permission decision、副作用前后、artifact commit、verification 和 compact boundary。低风险 streaming token 可以批量或异步,因为丢一点展示文本影响有限;但工具副作用前后必须同步,因为这决定能不能恢复、能不能避免重复执行。checkpoint 频率取决于恢复损失和性能成本,不是越密越好。

理解与记忆 · 背后工程点

背后工程点:持久化粒度按风险和恢复损失设计。
专业术语:
Durability Mode:持久化模式。
Boundary Event:边界事件。
Flush:刷盘。
Recovery Loss:恢复损失。
为什么这样回答:能回答性能反驳。
小白解析:写日记不用每秒记录,但签合同、付款、验收这些关键节点必须记录。
关联知识点:LangGraph durable execution 提供 exit/async/sync durability modes;Guga 可按事件风险分层。

面试官:外部 API 写操作怎么保证幂等?第二层追问:对方系统不支持幂等键怎么办?

我:外部 API 写操作要优先用 idempotency key、external request id、transaction 和 read-after-write。但现实是,不是所有系统都支持幂等键。如果不支持,我会提高风险等级:执行前人工审批,记录自然键,比如目标 ticket、收件人、金额或资源 id;执行后立即查询确认;无法确认的操作标记为不可自动重试,需要人工恢复或补偿流程。比如创建 ticket 失败时,不能盲目再创建一次,否则可能出现两个重复 ticket。

理解与记忆 · 背后工程点

背后工程点:幂等不是总能实现,但不可幂等要提高控制等级。
专业术语:
External Request ID:外部请求标识。
Read-after-write:写后读确认。
Natural Key:自然键。
Compensation:补偿。
为什么这样回答:承认限制比假装都有方案更可信。
小白解析:没有小票的现金交易,出了问题就不能让机器自动再付一次。
关联知识点:LangGraph 文档建议副作用用幂等操作;Guga effect ledger 记录是否可回滚。

面试官:恢复后权限还有效吗?第二层追问:昨天用户批准的 shell 今天还能跑吗?

我:默认不能简单沿用昨天的权限。权限决定要带 scope、expiresAt、session id、workspace hash、command/resource pattern、tool version 和 permission mode。昨天用户批准跑一次 shell,不代表今天 workspace 已经变了以后还能继续跑同一个命令。Resume 时如果用户、时间、工具版本、权限模式、workspace hash 或资源范围变化,就要重新确认。长期 allow 必须是明确产品语义,有作用域和过期时间,而不是恢复时自动继承旧批准。

理解与记忆 · 背后工程点

背后工程点:权限也是恢复时要重新校验的事实。
专业术语:
Scope:作用域。
ExpiresAt:过期时间。
Workspace Hash:工作区哈希。
Persistent Allow:持久允许。
为什么这样回答:可靠性不能牺牲安全边界。
小白解析:昨天允许师傅进门修水管,不代表今天他能自己进来拆墙。
关联知识点:Guga 权限由 runtime 执行;learn-agent hosted harness 强调 secret 和 policy 边界。

面试官:工作区变了怎么恢复?第二层追问:用户手动改了文件怎么办?

我:恢复时不能假设 Agent 仍然拥有旧事实。Session 要记录 workspace snapshot、base revision、dirty diff、active files 和最近修改范围。恢复时先扫描当前工作区是否和记录一致;如果用户手动改了 Agent 正在 patch 的文件,不重新读就很容易覆盖用户修改。处理方式可以是 re-read、rebase、merge、fork,或者暂停问用户。coding agent 可靠性很大一部分就在这里:模型记得的代码和磁盘上的代码不是一回事。

理解与记忆 · 背后工程点

背后工程点:恢复要检查外部世界是否还和中断时一致。
专业术语:
Workspace Snapshot:工作区快照。
Dirty Diff:未提交变更。
Rebase:重放修改。
Fork:分叉。
为什么这样回答:这是真实 coding agent 的常见问题。
小白解析:你离开工地一天,回来先看现场有没有别人动过。
关联知识点:Harness 章节已讨论 workspace lock 和 external change;可靠性章节把它纳入 resume gate。

面试官:用户中断和系统崩溃有什么区别?第二层追问:取消会不会留下坏状态?

我:用户中断和系统崩溃不一样。用户中断是有意图的 lifecycle event,可以选择 drain 到当前安全边界;系统崩溃是非预期故障,只能从最后 durable facts 恢复。取消时要 abort provider stream,给工具 abort signal,写 cancelled marker,保存 partial artifact,并记录已经发生的副作用。不能因为用户点取消就删除历史,也不能伪装成 completed 或 failed。比如文件已经写了一半,取消只是停止继续做,不代表副作用自动消失。

理解与记忆 · 背后工程点

背后工程点:取消也是事实,不是撤销历史。
专业术语:
Interrupt:中断。
Drain:排空到安全边界。
AbortSignal:取消信号。
Cancelled Marker:取消标记。
为什么这样回答:区分 lifecycle 对恢复很关键。
小白解析:叫停施工不等于已经拆掉的墙自动恢复。
关联知识点:LangGraph graceful shutdown/drain 在 superstep 边界保存可恢复 checkpoint;Guga event log 记录 cancel 和 interrupted。

面试官:可靠性怎么评测?第二层追问:怎么制造故障?

我:可靠性不是看 happy path,而是故意把系统打断。我要做 fault injection eval,在 model call、tool before/after、artifact write、permission wait、compact、verification、worker shutdown 这些点注入 timeout、crash、duplicate events、corrupted tail、permission delay。指标看 recovery success rate、duplicate side effect count、invalid tool pair count、manual rescue rate、data loss window 和 replay completeness。正常路径全过只能说明天气好时能开,不能证明系统可靠。

理解与记忆 · 背后工程点

背后工程点:可靠性必须通过故障注入验证。
专业术语:
Fault Injection:故障注入。
Recovery Success Rate:恢复成功率。
Duplicate Effect:重复副作用。
Replay Completeness:回放完整度。
为什么这样回答:给出测试方法比只说“支持恢复”扎实。
小白解析:消防演练不是等真着火才知道门能不能打开。
关联知识点:Guga strategy 有长任务可恢复率和 runtime 边界回归率;M5 acceptance examples 覆盖恢复、fork、replay、corruption。

面试官:事件日志如果尾部损坏怎么办?第二层追问:append-only 也可能写一半,你怎么恢复?

我:append-only 不等于永远正确,尾部也可能写一半。每条事件要有 schemaVersion、sequence/revision、idempotency key、payload hash,最好还有 previous hash。读取时如果发现 JSONL 半行、hash 不连续、revision 缺口,我会先找最长合法前缀,把坏尾部隔离成 corruption artifact,并把 session 标为 degraded。接下来需要 host repair 或 human confirmation,不能静默跳过坏事件继续跑。否则所谓事实源自己都不可信,replay 就失去意义。

理解与记忆 · 背后工程点

背后工程点:durable store 也会损坏,恢复必须能诊断和隔离坏尾部。
专业术语:
Corruption Artifact:损坏片段产物。
Hash Chain:哈希链。
Longest Valid Prefix:最长合法前缀。
Degraded Session:降级会话。
为什么这样回答:这能把“事件是事实源”讲得更严谨,事实源本身也需要完整性设计。
小白解析:账本最后一页被水泡坏了,不能假装没事;要先锁起来,确认前面账目还完整。
关联知识点:Guga M5 acceptance examples 明确要求 JSONL 尾部损坏时识别最长合法前缀并暴露 corruption 状态。

面试官:Hosted worker 重启或重复领取同一个 job 怎么办?第二层追问:怎么避免两个 worker 同时操作同一 workspace?

我:Hosted harness 不能假设只有一个进程在跑。Worker 领取 job 时要拿 job lease 和 fencing token,靠 heartbeat 续约;写 event、artifact、workspace 前都检查 token 是否仍有效,并带 expected revision。Workspace 也要有 session-level lock 或 isolated checkout。Lease 过期后新 worker 可以接管,但旧 worker 如果迟到继续写入,会被 fencing token 或 expected revision 拒绝。这样即使重启、网络抖动、重复领取 job,也不会出现两个 worker 同时改同一工作区。

理解与记忆 · 背后工程点

背后工程点:远程执行需要 worker lease 和 fencing,不能假设只有一个进程。
专业术语:
Job Lease:任务租约。
Fencing Token:防旧 worker 写入的令牌。
Expected Revision:期望版本写入。
Workspace Lock:工作区锁。
为什么这样回答:这覆盖 hosted harness 的真实并发问题,比“重启后恢复”更进一步。
小白解析:一个维修单不能两队人同时施工;如果换队,旧队回来也不能继续刷卡进门。
关联知识点:learn-agent hosted harness 把 worker lease、deployment、workspace identity 和 durable step 拆成独立边界。

面试官:模型流式输出到一半断了怎么办?第二层追问:半个 tool call 已经出来了,要执行吗?

我:半个 tool call 不能执行。Streaming delta 先进入 assembler,只有完整、schema 合法、finish reason 合法的 ToolIntent 才能进入 pipeline。中断时记录 model_request_started、partial_delta refs 和 interrupted marker,但 conversation view 不暴露半成品 tool call。恢复时可以重新请求模型、让用户选择 retry,或者把中断作为受控 error observation。不能把半截 JSON 当真实意图,就像电话里只听到“请转账给...”就断线了,不能自己补全收款人去执行。

理解与记忆 · 背后工程点

背后工程点:流式响应要先组装和提交,半成品不能产生副作用。
专业术语:
Delta Assembler:流式片段组装器。
Commit Boundary:提交边界。
Partial Tool Call:半成品工具调用。
Finish Reason:模型结束原因。
为什么这样回答:很多真实 provider 都是 streaming,可靠性不能只考虑完整响应。
小白解析:电话里只听到“请转账给...”就断线了,不能自己补全收款人去转。
关联知识点:Guga provider bridge 和 tool pipeline 分离,provider 只产生完整 tool intent,core 才执行真实动作。

面试官:Artifact 丢了或 hash 对不上怎么办?第二层追问:event 里只有 artifact ref,完整日志没了还能恢复吗?

我:如果 artifact 丢了或 hash 对不上,不能假装完整日志还在。artifact ref 必须带 hash、size、mime、createdAt 和 privacy tag。恢复时先校验 artifact 可读和 hash;如果丢失,session 进入 degraded replay,模型可见 view 只能用 event 里的 bounded preview。关键 artifact 要做复制、retention policy 和完整性扫描。丢失本身要写 incident event,并影响 eval 和恢复结果。否则 event 里写“详见附件”,但附件没了,系统还装作证据完整,这是很危险的。

理解与记忆 · 背后工程点

背后工程点:artifact 是事实证据的一部分,引用要可验证,丢失要显式降级。
专业术语:
Artifact Integrity:产物完整性。
Bounded Preview:有限预览。
Retention Policy:保留策略。
Degraded Replay:降级回放。
为什么这样回答:事件和 artifact 分离后,必须回答 artifact 生命周期和丢失问题。
小白解析:账本里写“详见附件”,如果附件丢了,就只能承认证据不完整,不能编一个附件。
关联知识点:Guga artifact store 把大输出保存到文件系统,event 只留 bounded preview 和可验证 reference。

面试官:Context compaction 过程中崩了怎么办?第二层追问:summary 写一半,会不会污染后续恢复?

我:Summary 没提交前不能成为事实。Compaction 要有事务边界:先写 compaction_started,生成 summary 和 source refs 后写 compaction_candidate,校验目标、约束、source refs、未闭合 tool round 都没丢,才写 compaction_committed。恢复时如果只看到 started 或 candidate,就不能使用这个 summary,要回到压缩前事件路径,或者重新 compaction。summary 是 projection,不是历史本身,所以 compaction 崩了不能覆盖原始事件。

理解与记忆 · 背后工程点

背后工程点:压缩摘要要有提交语义,未提交摘要不能成为事实源。
专业术语:
Compaction Boundary:压缩边界。
Candidate Summary:候选摘要。
Commit:提交。
Projection:投影。
为什么这样回答:Context 压缩是长任务可靠性的高风险点,摘要失败不能损坏历史。
小白解析:会议纪要没审完不能替代录音和原始记录。
关联知识点:Context 章节强调 summary 是续航手段,不是唯一事实源;Guga M5 要记录 compaction boundary 和 projection decision。

面试官:恢复时 secret vault 不可用怎么办?第二层追问:任务要继续,但工具需要密钥,你怎么处理?

我:安全优先,不能为了恢复任务,从旧 trace 或旧 env 里把 secret 捞回来。Resume 时 secret capability 要重新向 vault 获取,runtime 校验用户、租户、工具和用途;获取失败就把相关工具标 unavailable,plan 进入 blocked 或 partial mode。可以继续做不需要 secret 的只读诊断,比如读本地日志、整理现有 artifact;涉及外部 API 的步骤要等待 vault、请求用户重新授权或切换替代路径。event log 只记录访问决策和脱敏状态,不记录 secret 原值。

理解与记忆 · 背后工程点

背后工程点:恢复不能复用泄漏的 secret,密钥能力要重新获取和校验。
专业术语:
Secret Capability:密钥能力。
Vault:密钥库。
Unavailable Tool:不可用工具。
Partial Mode:部分能力模式。
为什么这样回答:可靠性和安全经常冲突,不能为了继续任务把密钥边界打穿。
小白解析:保险柜打不开时可以先整理资料,但不能从旧照片里找密码硬开。
关联知识点:learn-agent hosted harness 强调 secret boundary;Guga 安全口径是 secret 是能力,不是 context。

面试官:任务卡在人工审批上怎么办?第二层追问:用户一天后才批准,原来的上下文还能用吗?

我:任务卡在人工审批上,也要当成 durable lifecycle state。pending approval event 要带 request id、scope、expiresAt、risk summary 和 current plan revision。用户一天后批准,不代表旧动作还能直接执行;批准只是新的恢复输入,不是绕过安全检查。执行前要重新跑 resume gate:检查 workspace、permissions、tool version、external state 和 plan validity。过期审批要重新发起。比如昨天批准改配置,今天生产环境已经变了,就不能按昨天的 proposal 直接执行。

理解与记忆 · 背后工程点

背后工程点:HITL 等待是长任务状态,批准后仍要重新校验环境。
专业术语:
Pending Approval:待审批。
Request ID:审批请求标识。
ExpiresAt:过期时间。
Resume Gate:恢复闸门。
为什么这样回答:人类审批经常跨小时或跨天,旧上下文和旧权限不能自动可信。
小白解析:昨天批准开门,今天开门前也要确认房子还是那间、钥匙还是那把。
关联知识点:Deep Agents/HITL 和 Guga permission runtime 都强调 approval 是运行时事实,必须可记录和恢复。

面试官:事件 schema 升级后,旧 session 怎么恢复?第二层追问:你会迁移历史事件吗?

我:历史事件默认不改写,因为 event log 是审计事实。每个 event 带 schemaVersion,读取和 replay 时用 upcaster 转成 current view;破坏性变更走新 major version 和兼容期。必要时可以生成新的 projection 或 migration artifact,但原始 event log 保持不可变。Conformance tests 要覆盖旧 session fixture,确保升级后旧任务还能 replay。否则系统版本一升级,历史恢复就坏了,可靠性只在当前版本里成立,不算真正可靠。

理解与记忆 · 背后工程点

背后工程点:事件历史是审计事实,schema 演进要 read-time 兼容,不能随意重写。
专业术语:
Schema Version:结构版本。
Upcaster:读时升级器。
Conformance Test:契约测试。
Migration Artifact:迁移产物。
为什么这样回答:可靠性不只是运行中恢复,也包括版本升级后的长期可回放。
小白解析:旧合同不能为了新模板直接改原件,只能做解释表或补充协议。
关联知识点:Guga M5 要求 event schema 演进采用加性兼容和 read/replay-time upcaster,不为适配新 schema 改写历史事件。

面试官:可靠性 MVP 先做什么?第二层追问:哪些高级能力先不做?

我:可靠性 MVP 先保护事实和副作用。我要先做 append-only event store、artifact refs、tool lifecycle markers、resume gate、diagnostic replay、basic fork 和 fault injection tests。先不做跨设备同步、多人协作、复杂 workflow engine、自动补偿市场、全量搜索和 RL 数据飞轮。第一版目标很朴素:单 Agent 长任务能恢复、能解释、不会重复危险副作用。只要这个底座不稳,后面加 memory、多 Agent 或复杂调度,都会把恢复问题放大。

理解与记忆 · 背后工程点

背后工程点:可靠性 MVP 先保护事实和副作用。
专业术语:
Append-only:只追加。
Artifact Ref:产物引用。
Diagnostic Replay:诊断回放。
Fault Test:故障测试。
为什么这样回答:收束到可执行路线图。
小白解析:先把账本、仓库和急停按钮做好,再做调度中心。
关联知识点:Guga M5 明确不做完整 memory/search/RL,只先打 session/event/artifact/replay 底座。

PRINCIPLE我总结的核心范式

可靠性的核心范式是“事实先于恢复,幂等先于重试,回放先于调参”。一个 Agent 可以失败,但不能失忆;可以中断,但不能乱续;可以重试,但不能重复伤害真实世界。