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

Turn 是用户消息到最终回复的一整轮,Step 是一次模型推进——1 个 Turn 包含 N 个 Step;Agent 与聊天机器人的区别就在这个 N 上。

📝 本节和前面几节的关系

6.1 打开了盒子,这一节先给循环计数——两个单位不分清,后面所有讨论都会乱。

一、两个单位

1 个 Turn = 1 到 N 个 Step;N 由任务决定,不由人定。

聊天机器人的 N 恒等于 1;Agent 的 N 是任务算出来的——这就是【能推进】与【会应答】的区别。

二、算例:一个 Turn 三次推进

发一条【统计工作区里 .py 文件的总行数】——

1 个 Turn,3 个 Step,2 次工具调用——三次推进里模型各看一次最新局面再决定下一步。

三、N 为什么不该由人定

硬编码【最多调 3 次工具】这类规则,问题在于:

让模型按局面决定要不要继续——这正是把【决策】留给模型、把【规则】留给管线的分工(4.3 的老原则)。

四、实测的影子

五、动手 Demo:Turn 与 Step

两个单位,加一个三次推进的算例:

units = [("Turn", "用户消息到最终回复的一整轮", "1"),
         ("Step", "一次模型推进", "1 ~ N")]
for a, b, c in units:
    print("  %-6s %-24s 数量级: %s" % (a, b, c))
print()
steps = ["Step 1: 决定先列文件", "Step 2: 决定逐个读", "Step 3: 汇总输出"]
for s in steps:
    print("  %s" % s)
print("  => 1 个 Turn, 3 个 Step")

实跑输出:

--------------------------------------------------------------------
Turn 与 Step
--------------------------------------------------------------------
  两个计数单位,先分清:

  概念     是什么                         数量级
  -----------------------------------------------
  Turn     用户消息到最终回复的一整轮     1
  Step     一次模型推进(调一次模型)     1 ~ N
  -----------------------------------------------

  算例:发一条【统计工作区里 .py 文件的总行数】——

    Step 1    模型决定先列文件(调工具)
    Step 2    拿到清单,模型决定逐个读(再调工具)
    Step 3    汇总行数,输出答案

    => 1 个 Turn,包含 3 个 Step

  【一轮工作可以包含多次模型推进】说的就是这件事——
  Agent 和聊天机器人的区别,就在这个 N 上。

N 是任务算出来的——聊天机器人 N=1,Agent 的 N 才有意思。 实测 session-turn-outline 按 Turn 记账——系统自己的单位和这里一致。 别用硬编码限制 N——决策给模型,规则给管线。

30 秒实验

  1. 把一个你做过的任务拆成 Turn 和 Step,数数 N 是多少。
  2. 解释:为什么【最多调 3 次工具】这种硬规则两头不讨好。
  3. 在配置树里找 turn-outline,确认系统按 Turn 组织视图。

常见误区

  1. 错误:Turn 和 Step 是一回事。——纠正:Turn 是整轮、Step 是一次推进;1 个 Turn 通常包含多个 Step。
  2. 错误:Step 数量应该由配置固定。——纠正:N 由任务决定——硬编码两头不讨好。
  3. 错误:每多一个 Step 就多一份完整开销,所以 Step 越少越好。——纠正:该多就多——Step 换来的是任务能完成;省的是上下文(PTC 那一章的事)。
自测三问(点开对答案) 1. Turn 与 Step 各是什么? —— Turn=用户消息到最终回复的一整轮;Step=一次模型推进;**1 Turn = 1~N Step**。 2. Agent 与聊天机器人的区别在哪? —— **N 是否大于 1**——Agent 的推进次数由任务决定。 3. 为什么 N 不该硬编码? —— 简单任务浪费、复杂任务不够——**决策留给模型,规则留给管线**。

相关笔记