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

PTC 把确定性控制流(顺序、循环、条件、数据传递)从上下文里拿走;而依赖语义理解的决策一步也省不掉。

📝 本节和前面几节的关系

上一节说能力与实现分离,这一节回到 PTC 本身:它到底压缩了什么、压缩不了什么。

一、先把活儿分成两类

两类的区别只有一条:判据能不能提前写成规则。

二、算一笔账

5 段任务里,3 段确定性、2 段要判断。

省下的是 3 段,不是 5 段——这句就是本节的全部。

三、为什么不能全拿走

全拿走就要把判断也写成规则——规则写不全,任务就做偏。

而且判据一变,写死的规则就失效:判断的活本来就该由会判断的一方做。

四、一句口诀

PTC 能替模型跑程序,不能替模型做判断。

反过来读也成立:如果整件事都是判断,PTC 帮不上忙——这就是 7.3.5 要划的边界。

五、动手 Demo:PTC 压缩的是确定性控制流

把任务逐段问一句:这一步需要【理解】吗?

segs = [("读 5 个文件", False), ("挑含 ERROR 的行", False),
        ("按文件分组汇表", False), ("哪些文件算日志", True),
        ("汇成什么表", True)]
for name, need in segs:
    who = "模型" if need else "程序"
    print("  %-16s 需要判断=%-5s -> %s" % (name, need, who))
print()
print("  5 段里 3 段进程序, 2 段留在上下文")

实跑输出:

--------------------------------------------------------------------
PTC 压缩的是确定性控制流
--------------------------------------------------------------------
  把任务拆开,逐段问一句:这一步需要【理解】吗?

  任务段                 需要语义判断吗             该谁做
  ---------------------------------------------------------
  读 5 个文件            不需要(清单已知)         程序
  挑含 ERROR 的行        不需要(判据是字符串)     程序
  按文件分组汇表         不需要(纯数据变换)       程序
  决定哪些文件算日志     需要                       模型
  决定汇成什么表         需要                       模型
  ---------------------------------------------------------

  5 段里 3 段是确定性控制流,2 段要模型判断——
  **PTC 把前 3 段从上下文里拿走,后 2 段一步都省不掉**。

压缩的是控制流,不是判断——这张表就是本节论证的全部。 判据能提前写成规则的,才归程序;不能的,留着让模型判断。 分不清这两样,就会误以为 PTC 能省掉一切——那是 7.3.5 的误区。

30 秒实验

  1. 把自己的一个任务按上面那张表拆一遍,数出 3 段与 2 段。
  2. 给每一段写一句判据,能写成规则的算程序,不能的算模型。
  3. 想想为什么判据一变,写死的规则就失效。

常见误区

  1. 错误:PTC 能压缩一切。——纠正:只压缩确定性控制流——依赖语义理解的决策一步也省不掉。
  2. 错误:把判断也写成规则更省事。——纠正:规则写不全,任务就做偏——该判断的一方还是模型。
  3. 错误:控制流和判断是一回事。——纠正:判据能不能提前写成规则,就是两类的分界线。
自测三问(点开对答案) 1. PTC 压缩的是什么? —— **确定性控制流**——顺序、循环、条件、数据传递。 2. 哪一类省不掉? —— **依赖语义理解的决策**——哪些算日志、汇成什么表这类。 3. 两类怎么分? —— 看**判据能不能提前写成规则**——能就归程序,不能就留给模型。

相关笔记