a↗Agent 工程实战中文课程 / v1.0.0⌕ 搜索课程/
本页目录

M10 成本、性能与跨层优化

本章产出:端到端成本分解、固定预算的对照实验、缓存隔离设计,以及一份不会混淆微基准与系统收益的优化报告。

1. 从“工具快了十倍”到“用户快了多少”

一次任务的示例耗时为:排队3000ms、准备环境1000ms、模型调用合计5000ms、工具执行合计2000ms,串行总计11000ms。如果把准备环境从1000ms降到200ms,总耗时变成10200ms,降幅约7.27%,不是80%。

这是课程合成数字,不是实际服务测量。它展示的是分母问题:局部百分比不能直接成为端到端百分比。若准备和模型请求可以重叠,还应使用关键路径分析,不能简单把所有Span加起来。

2. 用依赖图而不是一条平均值看任务

Agent轨迹可建模为动态DAG:模型节点产生工具节点,工具结果可能触发下一轮模型。每个节点有资源需求、成本、依赖与失败风险。调度器必须在依赖满足、预算允许、权限满足时才能执行。

端到端时间包括等待,不只包括计算。系统吞吐受瓶颈资源和到达模式影响。优化模型token可能减少推理时间,也可能改变决策质量;并行工具可能降低关键路径,也可能增加无用工作和限流。

Harvard课程按观察、构建、优化再深入Serving的顺序组织实验,是值得借鉴的方法;本课程只要求API层和执行层,GPU Serving作为延伸。S15

3. 成本应按成功任务核算

总成本包含模型输入/输出、检索或工具收费、sandbox运行、存储、重试和必要人工核对。课程用“模拟成本单位”演示,真实实验需要用实际计费规则与usage对账。

策略A执行100次任务,成功80次,总成本40单位,每个成功任务0.5;策略B成功90次,总成本54单位,每个成功任务0.6。B完成率更高但更贵,不能只凭一个指标判断优劣。先确定任务质量下限、时延约束和预算,再讨论选择。

如果失败具有不可接受的安全后果,不能用足够多成功任务把它平均掉。安全约束单独验收。

I20 · 互动推演独立打开 ↗

局部快两倍,整体快多少?

用关键路径与失败成本衡量端到端优化。

合成教学数据 · 未运行真实模型
静态推演与完整规格

I20 局部快两倍,整体快多少?

关联章节:M10 · 交互类型:performance-model · 状态:提供纯逻辑参考函数,UI待实现

教学目标

用关键路径与失败成本衡量端到端优化。

初始状态

{
  "before": {
    "model": 800,
    "tools": 700,
    "queue": 300,
    "storage": 200
  },
  "after": {
    "model": 400,
    "tools": 700,
    "queue": 300,
    "storage": 200
  }
}
操作控件
  • 编辑各段耗时

  • 切换串行/给定关键路径视图

  • 计算总时长与speedup

  • 加入额外重试成本

  • 查看假设

状态变化规则
  • 默认串行模型只求和;并行时必须输入真实依赖,不自动把所有段max。

  • 分别显示组件加速与整体加速。

黄金案例与反馈
base

输入:


{
  "before": [
    800,
    700,
    300,
    200
  ],
  "after": [
    400,
    700,
    300,
    200
  ]
}

期望:


{
  "before_total": 2000,
  "after_total": 1600,
  "speedup": 1.25
}

模型2倍不等于任务2倍。

extra-retry

输入:


{
  "before": [
    2000
  ],
  "after": [
    1600,
    600
  ]
}

期望:


{
  "speedup": 0.9090909090909091
}

额外重试使优化倒退。

完成条件
  • 解释1.25来源

  • 构造组件更快但整体更慢的反例

反馈层次
  • 提交预测后显示结果;允许跳过预测但记录跳过,不阻止阅读

  • 结果同时显示状态变化、原因与被拒绝动作;不是只给红绿灯

  • 第一次错误给边界提示,第二次提供最小反例;参考推导始终可主动打开

  • 重置恢复固定初始状态并保留历史尝试供用户手动清除

无障碍与静态替代
  • 全部操作有原生button/input/select替代,不依赖拖拽

  • 图与动画提供同步文字状态表;支持prefers-reduced-motion

  • 状态改变用aria-live=polite摘要,不逐字朗读长日志

  • 焦点不跳走;错误提示关联输入;颜色不是唯一编码

无JavaScript时直接展示初始输入、规则和黄金案例表,读者仍能完成纸面推演。状态动画仅作解释,不能成为获取答案的唯一途径。

持久化与重置

使用版本化键agent-course:1:I20,仅保存本地学习状态。支持单卡重置和全站清除;存储失败时以内存模式继续,不阻断阅读。

必须避免的误导

计算为成本模型,不是压测结果;禁止自动写“性能提升25%”混淆时长下降20%与吞吐比。

执行边界

纯本地教学状态机;不执行任意代码,不连接真实资金/模型/宿主Shell。

逻辑参考

web/reference/engines.mjs中的e2e;对应测试在web/reference/engines.test.mjs。UI可复用或等价移植,但不得改变黄金结果。

4. 上下文优化有两种完全不同的目标

减少上下文可以降低费用和部分延迟,也可能减少信息干扰;保留稳定前缀可能帮助供应商缓存。两者有时一致,有时冲突。频繁改动开头的时间戳或动态工具列表可能破坏缓存,而为缓存保留大量无用文本又可能增加实际成本。

具体缓存规则和计费依赖供应商、模型和版本,不能凭通用术语推断。课程只要求记录命中/未命中的实际usage并进行对照,不给出固定行业价格或承诺命中率。S03

压缩策略还影响可恢复性。原始事件保存在持久日志,模型上下文是从中派生的投影;这样压缩失败时可以重新构造,而不是永久丢失事实。Anthropic对会话与上下文分离的工程叙述支持这种架构方向,但具体实现仍由你的实验验证。S11

5. 缓存可复用,权限不可复用

订单查询缓存键不能只有order_id。至少考虑租户、授权主体或权限版本、资源版本、查询参数、工具schema和数据时效。不同主体看到的字段可能不同,即使底层订单相同。

可以共享公开政策或只读依赖的准备工作,但不能把一个用户的原始模型上下文、凭证或可写工作区直接给另一个用户。去掉租户字段后命中率升高,不是性能优化,而是隔离错误。

当源数据变化,缓存要失效或按版本读取。TTL只是过期上界,不能保证写后立刻一致。退款前重新读取权威余额,不能从缓存结果直接扣款。

I21 · 互动推演独立打开 ↗

哪些缓存能命中,哪些必须失效?

缓存身份、权限域和事实版本不可忽略。

合成教学数据 · 未运行真实模型
静态推演与完整规格

I21 哪些缓存能命中,哪些必须失效?

关联章节:M10 · 交互类型:cache-key-audit · 状态:提供纯逻辑参考函数,UI待实现

教学目标

缓存身份、权限域和事实版本不可忽略。

初始状态

{
  "stored": {
    "tenant": "shop-a",
    "user": "u-alice",
    "order": "A100",
    "order_version": 1,
    "policy_version": "v2",
    "scope": "refund-proposal"
  },
  "request": {
    "tenant": "shop-a",
    "user": "u-alice",
    "order": "A100",
    "order_version": 1,
    "policy_version": "v2",
    "scope": "refund-proposal"
  }
}
操作控件
  • 逐项修改租户/用户/订单版本/政策版本/范围

  • 切换缺失键字段的错误实现

  • 比较命中结果

  • 查看缓存分类

状态变化规则
  • 正确演示按全部所需字段比较;只读公共工件可另设明确共享域。

  • 一项版本变化使旧业务派生结果失效;不能将模型前缀缓存与业务授权缓存等同。

黄金案例与反馈
same

输入:


{
  "changed_field": null
}

期望:


{
  "safe_hit": true
}

仅表示键匹配,仍需有效期与权限未撤回。

tenant

输入:


{
  "changed_field": "tenant"
}

期望:


{
  "safe_hit": false
}

同订单号可能属于不同租户。

version

输入:


{
  "changed_field": "order_version"
}

期望:


{
  "safe_hit": false
}

旧金额或资格不能继续复用。

完成条件
  • 演示跨租户键碰撞

  • 解释共享只读底座不等于共享可变业务缓存

反馈层次
  • 提交预测后显示结果;允许跳过预测但记录跳过,不阻止阅读

  • 结果同时显示状态变化、原因与被拒绝动作;不是只给红绿灯

  • 第一次错误给边界提示,第二次提供最小反例;参考推导始终可主动打开

  • 重置恢复固定初始状态并保留历史尝试供用户手动清除

无障碍与静态替代
  • 全部操作有原生button/input/select替代,不依赖拖拽

  • 图与动画提供同步文字状态表;支持prefers-reduced-motion

  • 状态改变用aria-live=polite摘要,不逐字朗读长日志

  • 焦点不跳走;错误提示关联输入;颜色不是唯一编码

无JavaScript时直接展示初始输入、规则和黄金案例表,读者仍能完成纸面推演。状态动画仅作解释,不能成为获取答案的唯一途径。

持久化与重置

使用版本化键agent-course:1:I21,仅保存本地学习状态。支持单卡重置和全站清除;存储失败时以内存模式继续,不阻断阅读。

必须避免的误导

哈希键不提供权限本身;真实实现还需授权与失效。

执行边界

纯本地教学状态机;不执行任意代码,不连接真实资金/模型/宿主Shell。

逻辑参考

web/reference/engines.mjs中的sameCacheScope;对应测试在web/reference/engines.test.mjs。UI可复用或等价移植,但不得改变黄金结果。

6. 预取、并行和模型路由的实验边界

预取适合已授权、低成本、只读且有较高使用概率的操作。提前发起退款、发邮件或昂贵外部查询不是无害优化。即使读操作也可能泄露访问意图或产生计费,需要纳入预算。

模型路由可以先用较低成本模型,遇到明确困难再升级。但升级阈值必须通过开发集确定,且把前一次失败成本计入总成本。不能只报告最终强模型那次成功的费用。

多Agent需要证明独立分工带来的收益超过通信、重复检索和合并成本。对于一笔退款,一个协调器通常更容易验证;对于互相独立的资料研究,分工可能有价值。课程扩展只做受控对照,不把“Agent数量”当能力指标。

7. 准备工作的边际收益

假设一次共享准备成本P,每任务额外开销e,复用N次后的平均准备成本为P/N+e。但若缓存失效率高、不同租户无法共享或工作区清理昂贵,真实收益会小很多。

为不同策略记录冷启动与热启动,不能只展示预热后最快一次。预热池也占用空闲资源;端到端优化需要把保有成本与峰值需求纳入,而不只看单次响应。

在轻运行时研究中,代码单元、只读数据和编译产物可能共享,任务权限、可写内存、取消和输出缓冲必须分离。这是一个有价值的系统研究方向,但不是本课程基础实现的前置条件。

8. 一份可复现的优化协议

先固定基线、任务集、模型配置、预算与环境版本。提出一个能被证伪的假设,例如“旧工具输出遮蔽主要解释延迟,可用引用替代而不影响退款证据”。实施一个主要改动,运行相同任务和重复次数,再按任务配对比较。

报告均值、分位数、成功率、成本、失败类别与置信局限。若样本太小,不要画出过度精确的小数。记录优化额外增加的代码、配置和运维复杂度。维护成本也属于工程决策。

9. L08验收

至少完成两个对照:上下文策略与一个系统机制,例如缓存、准备复用或调度。必须包含一个“看似优化但破坏正确性”的反例。课程互动用合成数据说明公式;最终求职项目使用你自己实际测得的数据。

K07 · 多Agent的收益要扣掉协调成本

K07 多Agent的收益要扣掉协调成本

类型:并行与组织 · 关联章节:M10 · 阅读方式:先做下面的推演,再看参考讨论。

原文在说什么

原文介绍Anthropic研究系统中的多Agent组织方式与实践经验,体现任务拆分、并行信息获取和协调的重要性。

对本课程的具体启发(课程推论)

课程不把多Agent作为默认升级。只有子任务相对独立、合并标准明确,且并行收益大于额外调用和合并成本时,才值得试验。

两分钟推演

将“对比三个独立商品的公开规格”与“对同一订单作一次不可重复退款”分别拆解,说明哪里适合并行。

参考讨论

独立检索可以并行;共享资金副作用必须经过统一授权/幂等边界,不让三个Agent竞相提交。比较预算时计入所有子Agent。

不能从这里推出什么

某一研究产品的收益不能外推所有任务;多Agent也会放大错误、成本和敏感信息传播范围。

原始来源

本卡是原创中文概括与教学延伸,不是全文翻译,也不表示原作者认可本课程。不要把原文中的结果替换成本项目实测结果。

独立阅读 →
K11 · Brain、Hands与会话记录可以解耦

K11 Brain、Hands与会话记录可以解耦

类型:跨层系统 · 关联章节:M10 · 阅读方式:先做下面的推演,再看参考讨论。

原文在说什么

原文介绍Managed Agents将协调、执行环境和持久会话等职责解耦的设计,说明Harness与工具环境不必是一一绑定的同一进程。

对本课程的具体启发(课程推论)

本课程把模型上下文、持久任务状态与sandbox工作区区分开。可以复用只读准备工作,但每次任务仍需独立权限、可变状态、取消与计费边界。

两分钟推演

设计两任务共享代码依赖缓存但不共享用户文件的方案。画出可共享与不可共享的对象。

参考讨论

共享只读镜像/内容寻址依赖;每任务私有workspace、凭据、运行状态、输出与资源预算。缓存键和失效策略仍需明确。

不能从这里推出什么

产品架构文章不能证明你实现的隔离或性能。课程不移植其公布的性能数字。

原始来源

本卡是原创中文概括与教学延伸,不是全文翻译,也不表示原作者认可本课程。不要把原文中的结果替换成本项目实测结果。

独立阅读 →
K20 · 共享准备工作,不共享任务责任

K20 共享准备工作,不共享任务责任

类型:系统设计推演 · 关联章节:M10 · 阅读方式:先做下面的推演,再看参考讨论。

原文在说什么

上下文管理与职责解耦文章提供思考输入工作集、持久会话和执行环境关系的参照;下面的具体成本模型是课程原创。

对本课程的具体启发(课程推论)

设准备成本P、每任务私有成本E、隔离/复用成本I,n任务独立成本n(P+E),安全复用候选成本P+n(E+I)。只有(n−1)P>nI且质量/隔离不变,才有潜在收益。

两分钟推演

P=40ms,E=20ms,I=5ms,n=10。计算理论串行总成本并指出实际并发系统还缺哪些测量。

参考讨论

独立600ms;候选290ms。不是直接宣称墙钟快2.07倍:还要测并行度、排队、缓存命中、内存、锁、失效与取消开销。

不能从这里推出什么

公式是假设模型,不是生产性能。共享只能在可证明等价的只读准备层进行,不能共享审批、凭据或可变workspace。

原始来源

本卡是原创中文概括与教学延伸,不是全文翻译,也不表示原作者认可本课程。不要把原文中的结果替换成本项目实测结果。

独立阅读 →
做当章练习 →