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

回放=同样的输入重放;复现=得到同样的输出——采样有随机、服务端有重试、模型在更新,重放十次可能有十种输出。

📝 本节和前面几节的关系

6.8.1 拼回了当时的世界,这一节给一个冷静的提醒:世界拼回去了,答案也未必一样。

一、两个词分开

两者不等,是三个事实决定的:

二、算一笔账:重放十次

同一个请求重放 10 次:

分叉不是 bug,是采样的本性——指望逐字复现,等于指望掷十次硬币同面。

三、那回放还有什么用

回放用于【理解当时】,不是【保证重来】——调试时比的是证据链,不是逐字对答案。

四、工程上的正确姿势

五、动手 Demo:能回放,不等于结果一定能复现

两个词、三个原因、一笔重放的账:

words = [("回放", "同样的输入重放 - 能做到"),
         ("复现", "得到同样的输出 - 不承诺")]
for a, b in words:
    print("  %-4s : %s" % (a, b))
print()
print("  原因: 采样随机 / 服务端重试(llm-retry) / 模型在更新")
print("  重放 10 次 => 10 种合理但不相同的输出")

实跑输出:

--------------------------------------------------------------------
能回放,不等于结果一定能复现
--------------------------------------------------------------------
  两个词先分开:

  词       意思
  --------------------------------
  回放     把同样的输入重放给模型
  复现     得到同样的输出
  --------------------------------

  回放做不到复现,因为:

    采样有随机性          同一输入,输出可能有多种
    服务端有重试          llm-retry 包实测存在
    模型本身在更新        上周的模型和这周的未必相同

  算一笔账:重放 10 次同一个请求——
  输出可能有 10 种,**每一种都【合理】但不相同**。

  结论:**回放用于【理解当时】,不是【保证重来】**——
  调试时比的是证据链,不是逐字对答案。

分叉不是 bug——采样本性,别跟它较劲。 验收要写【结构一致】不是【输出一致】。 补一条:把模型版本记进流水——至少知道当时用的是谁。

30 秒实验

  1. 向外行解释【回放能做、复现不承诺】。
  2. 把 6.8.1 的材料清单补上【模型版本】,说说它该记在哪。
  3. 写一条【结构一致】的验收标准,替代【输出一致】。

常见误区

  1. 错误:材料齐了就能复现输出。——纠正:采样随机、重试、模型更新——三个变量都不在你手里。
  2. 错误:输出对不上,说明回放做错了。——纠正:先查结构(材料与装配),输出本就允许不同。
  3. 错误:那就把温度调到零,回放就必须复现。——纠正:那是确定性服务的另一档选择,不是回放的义务;且模型更新依然会影响。
自测三问(点开对答案) 1. 回放与复现的区别是什么? —— 回放=**重放同样的输入**(能做到);复现=**得到同样的输出**(不承诺)。 2. 为什么复现不承诺? —— **采样随机、服务端重试(llm-retry)、模型在更新**。 3. 验收标准该写什么? —— **结构一致**(材料、装配、管线一致),不写【输出一致】。

相关笔记