第 2 题 ★★★ 累计缓存读取量为什么是 O(n²)
结论:ReAct 每轮都把「系统提示 + 全部历史 + 新观察」重新送进模型,第 i 轮读 i 份,累计是 1+2+…+n = n(n+1)/2,所以是二次方。降它的本质是让每轮只读「新增」而不是「全量」。
机理:三笔账叠在一起
| 成本项 | 随轮数增长 | 原因 |
| 输入 token(未命中缓存) | O(n²) | 历史被重复计费 |
| 缓存读取 | O(n²) | 前缀越长,每轮读的越多 |
| 首 token 延迟 | O(n) | prefill 长度线性增长 |
累计读取 = k · n(n+1)/2 (k = 每轮新增 token,n = 轮数)
图:20 轮、每轮新增 2,000 token
全量重放(现状)420k
窗口 5 轮+摘要 210k
前缀复用+历史外部化 40k
四种降法,按性价比排序
| 手段 | 做法 | 20 轮后 | 代价 |
| 前缀复用 | 系统提示/工具定义固定不动,命中 KV Cache | 40k | 几乎零 |
| 历史外部化 | 老历史存向量库,上下文只留「句柄 + 摘要」 | 40k | 需要检索 |
| 滑动窗口 | 只留最近 k 轮 + 滚动摘要 | 210k | 丢细节 |
| 全量重放 | 不优化(现状) | 420k | 成本二次增长 |
工程要点:让上下文前段稳定、后段追加。任何把变量插到前段的操作(如把时间戳写进系统提示)都会让缓存全失效——这是最常见的隐性成本炸弹。
第 3 题 ★★ 模型越自主,为什么 Harness 反而更重要
结论:模型提升的是单步正确率 p;任务成功是 pn。模型越强 → 敢接的步数 n 越大 → 复合错误被放大。单步 90%→99%,30 步任务成功率从 4.2% 涨到 74%(17 倍),但仍有 26% 会失败——这 26% 只能靠 Harness 兜。
图:单步正确率 × 任务步数 = 任务成功率
单步 99% → 30 步 74%
单步 95% → 21%
单步 90% → 4.2%
Harness 的 5 件事,模型变强后是「更必要」还是「可省」
| Harness 职责 | 模型变强后 | 理由 |
| 失败恢复 / 重试语义 | 更必要 | 步数变多,失败点也变多 |
| 终止与预算 | 更必要 | 越自主越容易「一直做」 |
| 审计与可回滚 | 更必要 | 影响面更大,出事要能追溯 |
| 权限与护栏 | 更必要 | 动作空间随能力扩张 |
| 提示词脚手架(CoT 模板) | 可弱化 | 模型自带规划能力 |
两个趋势如何共存:模型负责「单步想得对」,Harness 负责「多步不出轨」。能力越强,允许的自主边界越大,护栏就必须越精确——不是把护栏加厚,而是从「一刀切禁止」升级为「按风险分档放行」。
框架未来的核心价值(4 条)
- 编排:把长任务拆成可验收的里程碑,任意一步可停可回
- 观测:轨迹、成本、失败原因可复现(这是模型厂商不提供的)
- 治理:权限、审计、合规,企业的刚性需求
- 评估:把「感觉不错」变成可比较的数字,做选型与回归
第 7 题 ★★★ 工具风险按「调用签名」动态评级
结论:不要给工具打一个静态等级,要给每一次调用打分。同一个 delete_file,删临时文件是低风险,删系统文件是灾难——差别只在参数。
风险分 R = 4·动作类型 + 4·目标敏感度 + 3·影响范围 + 3·(1−可逆性) + 3·(1−授权匹配)
每项 0–5 分,权重见左。R 上限 85,按三档处置。
图:决策流程
三个真实例子(同一工具,风险分 18 → 68)
| 调用 | 敏感度 | 范围 | 可逆 | R | 处置 |
delete_file("/tmp/a.txt") | 1 | 1 | 可恢复 | 18 | 预演+自动执行 |
delete_file("/data/orders/*") | 4 | 5 | 不可逆 | 62 | 拒绝,走审批 |
delete_file("/etc/passwd") | 5 | 1 | 不可逆 | 68 | 硬拒绝 + 告警 |
三项必须做对的细节
① 判「目标」不判「工具名」:用真实路径、真实记录 ID 做判定,不做字符串匹配(防 ../ 绕过)。
② 授权匹配单独计权:同一动作,管理员是本职,普通用户是越权,分数要能拉开。
③ 高风险默认「预演」:先输出「将要做什么 + 影响清单」,确认后才真执行——预演本身没有副作用。
为什么不能静态评级:静态评级会把 delete_file 整体标成高风险,导致所有正常删除都要人工确认,最终用户会关掉护栏(护栏失效的真正原因往往不是不够严,而是太吵)。动态评分的目的是让该严的严、该放的放。