本阶段课程 · Agent 的组成与运行
Agent Loop:行动、反馈与停止
沿请求与工具结果阅读执行日志,理解条件改变后路线为何变化。
循环怎样把一次回答变成持续执行
Agent的一轮通常包含模型选择、工具执行与反馈更新等阶段。工具结果回到下一次模型输入后,系统就能根据新信息调整行动。人们常用“思考、行动、观察”描述这一过程;从使用者能够核对的角度,更重要的是请求、执行结果和状态变化。
这不是让模型在一个回答里写出一大段自述。模型可以生成看似合理的“我已经查询”,但只有真实工具记录才能证明查询发生。本站实验展示的是可观察事件,不是模型内部的隐含推理记录。
沿默认场景逐项看日志
目标仍然是12人、周日14—16点、预算600元。实验中的场地数据是教学预设,用来观察控制关系,不代表真实营业与价格。
| 事件 | 本次新增了什么 | 接下来为什么这样做 |
|---|---|---|
| 模型请求查询A | 一个待执行的查询 | 尚无事实,应用先执行 |
| 工具返回A关闭 | A不满足时间条件 | 需要寻找其他候选 |
| 模型请求查询B | 下一项查询请求 | 原预算与人数仍需保留 |
| 工具返回B可用、520元 | B的容量、时段与总价 | 可以逐项比较约束 |
| 模型交付推荐B | 有依据的候选结果 | 推荐任务完成,预约另需确认 |
注意每一步多知道了什么。查询之前不能知道结果;取得结果后,也需要与目标比较。把这些状态区分开,才能检查模型是否跳过了关键验证。
改一个条件,为什么路线会变化
预算改为400元,B的520元不再符合条件。系统可以继续查C;如果C为680元,也不符合预算,就应报告没有匹配候选。不能因为“已经查了很久”,就悄悄把预算提高到700元。
如果B临时满员,而预算700元,C又满足人数和时间,就可能推荐C。同一条模型指令,在不同反馈与约束下出现不同路径,正是动态决策的用途。
固定工作流也可以提前写好这些分支。本实验使用预设分支保证教学结果可重复;真实Agent会由模型参与选择下一步,应用仍负责实际执行与限制。
为什么必须有轮数与失败上限
每次模型调用都会占用时间与用量。工具连续失败时,无限制循环只会重复消耗资源。应用应设置最多轮数、最长时间或特定错误的重试上限,并在达到限制后停止。
本实验把最终交付也算一轮模型调用。因此,两次查询完成后,即使已经得到B的数据,最多两轮的设置仍可能阻止最终比较与交付。轮数的定义需要明确,不能简单等同于页面按钮点击次数。
工具失败以后,状态应怎样变化
超时意味着本次没有获得可确认结果,不意味着场地关闭。应用可以对只读查询进行有限重试,连续失败后保留未知。若是预约等写入动作,还需确认上一请求有没有已经执行,避免重复操作。
一个可用的Agent应能解释“查到了什么、没查到什么、为什么停在这里”。这比一条笼统的“任务失败”,或没有依据的“全部完成”,更能帮助用户继续处理任务。
检查一下理解
本节参考与继续阅读
下列章节用于核对概念与机制。本站以中文重新组织讲解,例子和练习为独立编写。
- Hugging Face · Agent 的动作与反馈循环
参考分步事件追踪;本站只展示可观察的动作与反馈,不把示例当作模型内部思考记录。
- Hugging Face · 从API与工具构建最小Agent
对应从一次调用到工具执行、结果回传与继续生成的教学顺序;本站用白话伪代码和自写场地示例讲解。
可选练习根据执行记录解释Agent为什么继续、改方向或停止。
A:周日不营业。 B:正常场景有空位,容量16人,总价520元;另一场景中满员。 C:有空位,容量20人,总价680元。 任务:12人、周日14—16点;默认预算600元。
跟着做一遍
下面的结果是本站编写的对照示例。实际工具的措辞可能不同,按每步的关键条件检查即可。
跑一次默认路线
设置600元、A休息B有空位、最多4轮。逐步点击到交付,先记录事件顺序。
做完后,展开结果对照
请求A→A关闭→请求B→B可用520元→推荐B,等待确认。并未查询C,因为已有满足目标的候选。
为什么这样做Agent不一定要穷尽所有选项;停止条件应与任务要求一致。本任务是找到一个符合条件的场地,不是证明全城最便宜。
把预算降到400元
预算滑到400,其他保持默认,再逐步运行。预测它拿到B报价后会怎么做。
做完后,展开结果对照
B的520元超预算,于是查询C;C的680元也超预算,最后报告没有符合条件的场地,不擅自提高预算。
为什么这样做同样的工具结果,在不同约束下会导致不同下一步。任务记录必须保留预算,不能查着查着忘了它。
让它有事实,却没有足够轮数交付
恢复600元,把最多模型调用轮数设为2,再运行。
做完后,展开结果对照
可以完成查A、查B两次模型请求并看到工具结果,但到最终比较交付时达到上限,停止且不出现预约确认。
为什么这样做本实验把交付也算一轮模型调用。上限按模型调用计,不等于点击次数;工具反馈显示本身不再算一轮。
查不到时,观察未知有没有被改写
把轮数恢复4,选择查询工具连续超时,再运行。
做完后,展开结果对照
只读查询最多重试一次;连续超时后停止,营业与空位仍是未知,不说“A关闭”。
为什么这样做失败信息也是反馈,但超时只能证明这次没拿到结果,不能证明外部世界是什么状态。
执行循环
把当前任务交给模型、执行允许的动作、接收结果、更新记录,然后继续或停止的重复过程。
没做出来?从这里排查
预算变化后还在看旧日志
本实验修改参数会重置;真实应用也应明确是否重开任务,避免串用旧状态。
看到B的资料就觉得任务已完成
看是否已经按全部约束比较并交付;查询结果与最终判断是不同事件。
换一个例子验证
为三个条件组合先写预测,再运行。
- 600元且B正常:预计推荐B。
- 400元:预计无匹配。
- B满员且预算700元:预计继续查C并推荐C。
完成状态仅保存在当前浏览器,可再次点击取消。