🐳 第六章 Agent一轮工作的全过程
📄 一句话概括

模型推理有前缀缓存:请求开头完全一样就命中——不变的放前面,易变的放后面;这是性能账,也是结构账。

📝 本节和前面几节的关系

一轮工作可能推进 N 次(6.2),每次请求都要带上前面的一切——这一节讲怎么让重复的部分不重复花钱。

一、KV Cache 是什么

模型推理时,请求开头完全相同的部分,计算结果可以被缓存复用——命中缓存的 token 又快又便宜。

反过来:开头差一个字,缓存全失,从头重算。

所以请求的排列顺序直接决定成本——这不是玄学,是结构。

二、算一笔账

系统提示 4000 token + 历史 8000 token:

一轮 N 个 Step、一天几百轮——乘起来是数量级的差距。

三、实测:稳定段都在最前面

配置里的【稳定段】插件:

它们拼在请求最前面,轮与轮之间保持不变——这就是【稳定前缀】的工程实现。

四、原则与它的另一面

原则一句话:不变的放前面,易变的放后面。

另一面是:易变的东西别塞进前缀—— 比如把时间戳、随机 ID 写进系统提示,每轮都不一样,缓存形同虚设。

这也是【上下文装配】那一站(6.1)的职责:拼请求时要懂缓存——装配顺序是性能参数。

五、动手 Demo:稳定的请求前缀与 KV Cache

缓存命中的算术,加稳定段清单:

prefix = 4000 + 8000
print("  系统提示 4000 + 历史 8000 = %d token" % prefix)
print("  第 2 轮前缀不变 -> 前 %d token 走缓存" % prefix)
print("  系统提示挪到中间 -> 缓存全失, 从头重算")
print()
print("  稳定段: system-prompt / agent-instructions / 工具表")
print("  原则: 不变的放前面, 易变的放后面")

实跑输出:

--------------------------------------------------------------------
稳定的请求前缀与 KV Cache
--------------------------------------------------------------------
  模型推理有前缀缓存:**请求开头完全一样**,缓存就命中——便宜且快。

  算一笔账:系统提示 4000 token + 历史 8000 token——

    第 2 轮:前缀不变        前 12000 token 走缓存
    若把系统提示挪到中间    缓存全失,从头重算

  所以配置里的【稳定段】都在最前面:

  稳定段         实测对应
  ----------------------------------------------------
  系统提示       system-prompt
  人格与指令     agent-instructions(maxBytes 65536)
  工具表         工具插件的注册信息
  ----------------------------------------------------

  原则一句话:**不变的放前面,易变的放后面。**
  这既是性能账,也是【模型看见的世界要稳定】的结构账。

开头差一个字,缓存全失——顺序就是钱。 稳定段实测:system-prompt、agent-instructions(maxBytes 65536)。 反面教材:别把时间戳塞进系统提示——缓存形同虚设。

30 秒实验

  1. 算一笔账:N 个 Step 的会话,前缀稳定比不稳定省多少次计算?
  2. 找出三个【不该进前缀】的易变内容。
  3. 在配置树里确认 agent-instructions 的 maxBytes 参数。

常见误区

  1. 错误:请求内容一样就行,顺序无所谓。——纠正:缓存按前缀命中——开头差一个字就全失。
  2. 错误:把当前日期写进系统提示更贴心。——纠正:每轮都变,缓存全毁——易变信息放后面。
  3. 错误:KV Cache 是模型服务商的事,与我无关。——纠正:前缀怎么拼是我们的事——装配顺序是性能参数。
自测三问(点开对答案) 1. KV Cache 命中的条件是什么? —— **请求开头完全相同**——差一个字就全失。 2. 稳定前缀原则是什么? —— **不变的放前面,易变的放后面**。 3. 实测里哪些是稳定段? —— system-prompt、agent-instructions(maxBytes 65536)、工具表。

相关笔记