第五章:任务怎样一步步推进
读取工具已经能返回材料。但读到 A 之后先读 B 还是先写草稿?发现 B 的图片说法与 A 冲突,是重读原文、继续找资料,还是直接说明不能确认?工具本身不会替整个任务回答这些问题。
现在把第三章的模型输入与第四章的实际执行连接起来:每次得到新结果,都重新判断还缺什么,再提出下一步。这就是行动循环。
本章留下的是一份逐轮状态记录。你应能为每个动作说明它准备解决哪个未知,也能解释什么时候应该停止。复杂的并发、中断恢复和重复副作用,放到可靠性阶段再深入。
5.1 一次要求,可以包含很多轮
用户只说了一次“整理消息简报”,并不意味着系统只请求模型一次。模型第一次还没有读到 A,可能先提出读取请求;工具返回后,程序再带着结果请求模型,才能根据正文继续工作。
正常主流程可以拆成五步:准备本轮输入,取得模型响应,执行相应工具,记录并组织结果,再准备后续判断。模型也可以直接形成答复,此时进入收尾路径。
这里的“一轮”是讲解中的一次模型判断与相应动作。它不等于用户消息数,也不一定等于工具调用数:模型可以一次请求多个工具;向模型服务请求响应时,还可能发生程序内部重试。
因此,观察“运行了五轮”之前,先问在数什么。计数口径不同,得出的开销与停止解释也不同。
5.2 谁决定下一步,谁控制实际运行
模型根据本轮输入产生行动提议。输入中的目标、工具说明、材料和未解决问题,会影响这项提议。模型的能力来自训练后的生成与判断表现,不能把它想成内部必然存在一个永远正确的任务规划器。
运行程序承接响应,决定怎样执行、记录和继续。它还需要处理当前可用能力、运行限制和外部中断。模型说“继续”,不应成为越过所有边界的通行证。
这形成两种互补责任:模型参与选择有意义的行动,程序提供可执行的过程和控制边界。把所有步骤固定下来,可能降低适应变化的能力;把所有运行规则都只写在提示词里,又容易让边界依赖模型的一次判断。
Hermes 的循环将提示准备、模型响应、工具处理与收尾组织在一起。我们学习的重点,是这些环节怎样交换状态,而不是把循环理解成“反复问同一个问题”。
5.3 沿着简报走五步
下面是教学示意,不是真实模型日志。它使用同一组固定材料,展示反馈如何改变下一步。
第一步,读取 A。 此时确定一件事:甲工具可以导出纯文本,图片不在支持范围内。还不知道其余材料是否提供不同事件,继续读取有明确用途。
第二步,读取 B。 发现它与 A 描述相同事件,却声称可以迁移图片。下一步不该把两份材料当作两条独立消息;需要先解决重复和冲突。
第三步,回到已有原文核对。 如果 A 的完整文字已经进入上下文,可以直接用它核对;若只保留了不完整摘要,才需要重新取得原文。重新调用工具不是必经仪式,目的是补齐判断所需的材料。
第四步,读取 C。 取得第二件不同事件,但它只支持“标点修正”。没有第三件事,也没有识别准确率提高的依据。
第五步,形成草稿。 交付两条,保留各自条件,说明为什么不足三条。此时继续围绕相同三份材料搜索,未必能增加有意义的信息。
路径会随结果变化。如果 B 原本就明确承认图片不支持,第三步的冲突处理可以缩短;如果 C 无法取得,则需要处理缺口。循环使路线可以调整,不能保证模型一定选择了最有效的路线。
5.4 用三栏记录任务是否前进
在纸上维护“已确认、未解决、下一步”,就能观察一次行动的价值。这是学习工具,不表示 Hermes 内部恰好存在这样一张固定表。
| 时刻 | 已确认 | 未解决 | 有理由的下一步 |
|---|---|---|---|
| 读完 A | 一件事件及图片限制 | B、C 是否增加内容 | 读取剩余材料 |
| 读完 B | 同一事件有冲突转述 | 哪个结论应进入草稿 | 对照原公告与转述 |
| 读完 C | 共两件事件 | 是否必须额外取材 | 回到任务范围判断 |
若任务只允许使用给定材料,最后一行应当说明不足;若用户允许继续取材,可以去找第三件有依据的事件。相同材料状态下,约束不同,合理行动也可能不同。
判断下一步可以问两个问题:它解决哪个未知?成功与失败后,做法会怎样变化?如果无论返回什么都重复同一请求,反馈就没有真正参与控制。
5.5 计划如何与反馈配合
模型可以先提出计划:“读完材料、去重核实、形成草稿”。这有助于表达目标和依赖,但计划仍是对未来的安排,需要被实际结果修正。
看到三份材料时先假设能写三条,读完后却只有两件事,就应更新计划。把“原计划写三条”当作必须兑现的事实,会让后续行动偏向凑数。
规划也未必需要一个独立模块。有些任务在模型输出和工具使用中逐步展开,有些系统用显式待办或流程状态帮助协调。理解设计时应看:计划保存在什么地方,谁更新它,后续输入是否读到了更新,以及完成条件是否与实际材料一致。
对于依赖清楚的小任务,简短计划可能足够;跨很多步骤或分支时,显式记录可以减少遗忘,也会增加维护和同步成本。计划写得更长,并不天然带来更好的控制。
5.6 失败反馈应该改变什么
第四章观察过两种真实模块错误:未知名称和编号缺失。它们都失败,但需要的调整不同。前者要核对当前工具定义,后者要补全输入;原样重复通常没有改变失败条件。
若读取只是暂时超时,有边界的重试可能合理;如果得到的是权限拒绝,则需要确认已有授权或使用允许的替代路径。程序内部恢复和模型选择另一次行动也要分开观察。
反馈还可能是成功内容中的矛盾。A、B 都能读到,仍然需要核实冲突。不能因为工具没有报错,就认为信息已经足够可靠。
后续可靠性章节会处理更复杂的失败。本章先建立一项习惯:保留失败原因与当前状态,让下一轮知道哪里没有完成。
5.7 什么时候可以结束
结束需要结合三件事:任务目标是否满足,继续行动是否有条件,以及运行是否已经触及边界。
本例只使用固定材料,已经能交付两条有依据的草稿并说明不足,属于符合范围的收尾。若还未取得 C,就只能交付阶段性结果;若用户取消,也应结束推进,不能将其解释成研究已经完成。
预算限制则帮助防止无限运行。它控制可继续投入的次数或时间,并不自动评价答案质量。预算耗尽后的进展总结,可以说明做到了哪里,仍不能把缺口改写成成功。
有效收尾至少包含结果、条件和剩余项。这样用户才能判断是否接受当前交付,或决定要不要扩大取材范围。
本章要点
- 一次用户要求可以经过多轮判断;轮次、请求尝试与工具调用分别计数。
- 模型提出行动,程序承接执行、记录和控制边界。
- 计划要随反馈更新;下一步应对应具体未知和不同结果下的分支。
- 失败原因与材料冲突都可以成为反馈,成功返回内容不代表已经完成核实。
- 完成目标、触及边界和外部取消是不同的结束理由。
理解题
1. A 的完整文字已经在本轮输入里,是否必须重新读取,才能核对 B?
不必。核对需要合适材料,并不要求机械重复调用。若原文完整、来源清楚且仍适用,可以直接比较;若只有模糊摘要或版本不明,才需要补取材料。
2. 原计划要整理三条,实际只有两件事,什么时候应该继续找第三件?
看任务是否允许继续取材、是否仍有值得检查的来源以及预算条件。只允许固定材料时应说明不足;允许扩展时可继续寻找有依据的新事件。计划中的数量不能成为编造事实的理由。
3. 一次重试失败了,是否说明它必然不合理?
不能仅由结果倒推。应看当时是否可能暂时故障、是否有边界、是否改变条件或获得了有关路径的反馈,以及动作是否可安全重复。合理尝试可以失败,偶然成功也不能证明无限重试值得做。
下一章:上下文怎样组织、压缩与复用。