Skip to main content
Engine 提供两套互补机制来控制运行的生命周期:
  • 评估器(critic):在归约(reduce,将观测结果和决策归约回状态的钩子)之后验证每一步,可以允许继续、强制停止,或要求重试本步。
  • 停止条件:在评估器通过后进行统一停止判断,根据状态与运行时指标决定是否结束循环。

评估器

评估器会接收当前状态、本步决策(decision,智能体每步的结构化决策)和动作(action,标准化工具调用)结果,然后返回一个结构化裁定字典。

评估器契约

支持的评估器动作

"stop""retry" 外,其他值都会被视作 "continue"

如何给运行添加评估器

可以直接在 agent.run() 时传入:
也可以在直接构造 Engine 时传入:

自定义评估器示例

评估器输出会被记录进追踪记录(trace)的 step.critic_outputs,并可在 qita 中查看。

停止条件

停止条件会在每步的评估器阶段之后执行。每个条件都会接收当前状态、步数与运行时信息。

StopCriteria 契约

内置条件

QitOS 在 qitos.engine.stop_criteria 中提供四个常用实现: FinalResultCriteria(默认) state.final_result 被设置为非空字符串时停止。它是默认唯一启用的条件。
MaxStepsCriteria 当步数达到 max_steps 时停止。一般由 RuntimeBudget 自动注入,不需要手动创建。
MaxRuntimeCriteria 当墙钟时间超过阈值时停止。
StagnationCriteria 当状态连续若干步没有有效变化时停止。它使用一个签名函数来判断是否有变化。
MaxTokensCriteria 当累计 token 用量超过预算时停止。Engine 在每个步骤中通过 runtime_info 传递 total_tokens,因此该准则追踪整个运行的实际 token 消耗。
当你需要独立于步数或时间的硬性 token 预算时使用它。可以搭配黄金预设的推荐值:

给运行传入停止条件

一旦你手动传入 stop_criteria,就会替换默认的 FinalResultCriteria。如果仍希望在 final_result 被设置时自动停止,请把 FinalResultCriteria() 也放进去。

自定义条件示例


用 TaskBudget 表达预算(budget)停止

对于结构化任务,通常用 TaskBudget 同时表达三种预算:
当传入 Task 时,Engine 会在运行开始前把 TaskBudget 应用到内部 RuntimeBudget 上。

StopReason 值

StopReasonqitos.core.errors 中的字符串枚举。每次运行结束后都会写入 state.stop_reason