深入理解 AI Agent · 第一章 · 三题详解

缓存二次增长 / Harness 为何更重要 / 动态风险评级

每题:结论 → 机理 → 图 → 可落地的数字

第 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

0140280420 ReAct 轮数 n 累计 token(千) 15101520 420k 210k 40k
全量重放(现状)420k  窗口 5 轮+摘要 210k  前缀复用+历史外部化 40k

四种降法,按性价比排序

手段做法20 轮后代价
前缀复用系统提示/工具定义固定不动,命中 KV Cache40k几乎零
历史外部化老历史存向量库,上下文只留「句柄 + 摘要」40k需要检索
滑动窗口只留最近 k 轮 + 滚动摘要210k丢细节
全量重放不优化(现状)420k成本二次增长
工程要点:让上下文前段稳定、后段追加。任何把变量插到前段的操作(如把时间戳写进系统提示)都会让缓存全失效——这是最常见的隐性成本炸弹。

第 3 题 ★★ 模型越自主,为什么 Harness 反而更重要

结论:模型提升的是单步正确率 p;任务成功是 pn。模型越强 → 敢接的步数 n 越大 → 复合错误被放大。单步 90%→99%,30 步任务成功率从 4.2% 涨到 74%(17 倍),但仍有 26% 会失败——这 26% 只能靠 Harness 兜。

图:单步正确率 × 任务步数 = 任务成功率

0%25%50%75%100% 任务步数 n 任务成功率 15102030 74%21%4%
单步 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,按三档处置。

图:决策流程

模型发起调用 (工具+参数) 静态判定 路径白名单·参数域 运行时判定 敏感目录·批量·可逆 算风险分 R 含授权匹配 R < 15 直接执行 15–30 预演+确认 R > 30 拒绝/需审批

三个真实例子(同一工具,风险分 18 → 68)

调用敏感度范围可逆R处置
delete_file("/tmp/a.txt")11可恢复18预演+自动执行
delete_file("/data/orders/*")45不可逆62拒绝,走审批
delete_file("/etc/passwd")51不可逆68硬拒绝 + 告警

三项必须做对的细节

① 判「目标」不判「工具名」:用真实路径、真实记录 ID 做判定,不做字符串匹配(防 ../ 绕过)。
② 授权匹配单独计权:同一动作,管理员是本职,普通用户是越权,分数要能拉开。
③ 高风险默认「预演」:先输出「将要做什么 + 影响清单」,确认后才真执行——预演本身没有副作用。
为什么不能静态评级:静态评级会把 delete_file 整体标成高风险,导致所有正常删除都要人工确认,最终用户会关掉护栏(护栏失效的真正原因往往不是不够严,而是太吵)。动态评分的目的是让该严的严、该放的放。