📄 一句话概括
Turn 是用户消息到最终回复的一整轮,Step 是一次模型推进——1 个 Turn 包含 N 个 Step;Agent 与聊天机器人的区别就在这个 N 上。
📝 本节和前面几节的关系
6.1 打开了盒子,这一节先给循环计数——两个单位不分清,后面所有讨论都会乱。
一、两个单位
- Turn:用户消息进来,到最终回复出去——一整轮。
- Step:一次模型推进——调一次模型、拿一次回复。
1 个 Turn = 1 到 N 个 Step;N 由任务决定,不由人定。
聊天机器人的 N 恒等于 1;Agent 的 N 是任务算出来的——这就是【能推进】与【会应答】的区别。
二、算例:一个 Turn 三次推进
发一条【统计工作区里 .py 文件的总行数】——
- Step 1:模型决定先列文件(调工具)。
- Step 2:拿到清单,模型决定逐个读(再调工具)。
- Step 3:汇总行数,输出答案。
1 个 Turn,3 个 Step,2 次工具调用——三次推进里模型各看一次最新局面再决定下一步。
三、N 为什么不该由人定
硬编码【最多调 3 次工具】这类规则,问题在于:
- 任务简单时浪费(该 1 步的走了 3 步)。
- 任务复杂时不够(第 4 步才是关键)。
让模型按局面决定要不要继续——这正是把【决策】留给模型、把【规则】留给管线的分工(4.3 的老原则)。
四、实测的影子
session-turn-outline——按 Turn 组织的大纲视图,说明系统自己就按 Turn 记账。- 3.2 提过的 Trajectory——append-only 流水里,每个 Step 都是一条事件。
session-stats——能统计到每个 Turn 的开销。
五、动手 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 秒实验
- 把一个你做过的任务拆成 Turn 和 Step,数数 N 是多少。
- 解释:为什么【最多调 3 次工具】这种硬规则两头不讨好。
- 在配置树里找 turn-outline,确认系统按 Turn 组织视图。
常见误区
- 错误:Turn 和 Step 是一回事。——纠正:Turn 是整轮、Step 是一次推进;1 个 Turn 通常包含多个 Step。
- 错误:Step 数量应该由配置固定。——纠正:N 由任务决定——硬编码两头不讨好。
- 错误:每多一个 Step 就多一份完整开销,所以 Step 越少越好。——纠正:该多就多——Step 换来的是任务能完成;省的是上下文(PTC 那一章的事)。
自测三问(点开对答案)
1. Turn 与 Step 各是什么? —— Turn=用户消息到最终回复的一整轮;Step=一次模型推进;**1 Turn = 1~N Step**。 2. Agent 与聊天机器人的区别在哪? —— **N 是否大于 1**——Agent 的推进次数由任务决定。 3. 为什么 N 不该硬编码? —— 简单任务浪费、复杂任务不够——**决策留给模型,规则留给管线**。- ☐ 下一节(6.3 Tool Call 要经过统一执行管线)
相关笔记
- Agent Loop 不是黑盒 —— Step 就是【调模型】那站的循环
- PTC:同一批能力,不同的呈现方式 —— PTC 压的就是 Step 数
- 什么是Agent —— 【自主推进】的定义
- 🐳 DeepSeek Harness · 索引