🐳 第七章 从Tool Call到Agent Runtime
📄 一句话概括

两次补丁真跑:实验 A 证明顶层补丁下不去预设内部(两条 not found);实验 B 把 Subagent 的实现从 spawn 换成 fork,实质只改 1 行。

📝 本节和前面几节的关系

7.3 的前三节都是道理,这一节动手。方法还是那套:补丁做加减法、dump 做对比(4.8 留下的方法)。

一、实验设计

这样拿到的不是【应该怎样】,而是它真的怎样。

说明一点:本节两次实验做的是配置层的对照——把两条路的差别在配置里抓出来。 真跑一次任务的对照需要在本地配上 Provider 之后自己动手(怎么配见 2.3)。

二、实验 A:去改预设内部的东西

补丁里写三条:ptc-runtime 停用、tool-presentation 改 mode、delegation 改 isolate。

结论:补丁能看到的只有顶层;预设内部是另一层,够不着。

三、实验 B:换一份实现

把 tool-subagent 的 config 整体写成 provider: fork / toolName: subagent / backgroundMode: continuable。

结论:换实现只动一个字段,接口名(toolName)不动。

四、两次实验放在一起看

一个能改、一个明说不能改——边界是可检验的,不是靠猜的。

五、动手 Demo:动手实验——两次补丁真跑

两次实验的结果摆在一张表里:

rows = [("A", "ptc-runtime 停用", "成功: +1 行 -> 1260"),
        ("A", "tool-presentation 改 mode", "not found: 警告跳过"),
        ("A", "delegation 改 isolate", "not found: 警告跳过"),
        ("B", "tool-subagent 换 provider", "成功: 实质 1 行 / 0 警告")]
for a, b, c in rows:
    print("  %s  %-26s %s" % (a, b, c))

实跑输出:

--------------------------------------------------------------------
动手实验——两次补丁真跑
--------------------------------------------------------------------
  实验 A:从顶层补丁里去改【预设内部】的东西。
  实验 B:把 Subagent 的实现从 spawn 换成 fork,接口名不变。

  实验     补丁内容                      实跑结果
  ------------------------------------------------------------------
  A        ptc-runtime 停用              成功:+1 行,树变 1260 行
  A        tool-presentation 改 mode     找不到:只警告并跳过
  A        delegation 改 isolate         找不到:只警告并跳过
  B        tool-subagent 换 provider     成功:实质改 1 行 / 0 警告
  ------------------------------------------------------------------

  实验 A 的 stderr 原文:
  patch: entry "tool-presentation" not found
  patch: entry "delegation" not found

  结论两条:①顶层补丁下不去预设内部;
  ②换实现只动配置里的一个字段,接口名(toolName)不动。

A 的结论:顶层补丁下不去预设内部——分层不是口号。 B 的结论:换实现只改一个字段,接口名不动。 两次实验都是 0 成本可复现:写个 YAML,dump 一跑,diff 一看。

30 秒实验

  1. 把实验 A 的三条补丁抄一遍,猜哪条会生效,再跑一次验证。
  2. 写一个自己的补丁,把某个顶层能力停用,看 diff 有几行。
  3. 想想为什么 not found 只警告不报错。

常见误区

  1. 错误:补丁写哪儿都能生效。——纠正:补丁的作用面是分层的——顶层补丁改不到预设内部。
  2. 错误:not found 是报错,说明补丁坏了。——纠正:只警告并跳过——这是容错设计,不是失败。
  3. 错误:换实现要改一堆配置。——纠正:实质只改 1 行——接口名与后台模式都不用动。
自测三问(点开对答案) 1. 实验 A 的 diff 是多少? —— 配置树 **1259 → 1260 行**,并打印两条 `not found` 警告。 2. 实验 B 实质改了几行? —— **1 行**(provider 由 spawn 改成 fork),diff 共 4 行含 2 行注释。 3. 两次实验合起来说明什么? —— **改得到的改一行就生效,改不到的明说找不到**——边界可检验。

相关笔记