Skip to main content
Engine 每一步的执行都流经一条管线:decide、act、reduce,然后是 critic。Critic 位于 reducecheck_stop 之间,为你提供了一个结构化的钩子,可以审查智能体的最新决策及其结果、分配质量评分,并在必要时强制重试或终止执行。 本教程涵盖完整的 Critic API:CriticResult 契约、内置 Critic、@critic 装饰器、指令补丁与状态补丁,以及组合多个 Critic 的方式。

Step 1: CriticResult 契约

每个 Critic 都返回一个 CriticResult——一个告知 Engine 下一步操作的数据类。
各字段说明: 三种 action 控制循环行为:
  • "continue"——正常进入下一步。
  • "stop"——立即终止 Engine。状态的停止原因会被设为 StopReason.CRITIC_STOP
  • "retry"——丢弃当前步骤并重新运行 decide。任何 instruction_patchstate_patch 会在重试前应用。
最简的 continue 结果:
带指令补丁的重试:
强制停止:

Step 2: 使用内置 Critic

QitOS 在 qitos.kit.critic 中提供了开箱即用的 Critic。

PassThroughCritic

最简单的 Critic——始终以满分继续。
创建 Engine 时若不指定 critics,这就是默认行为。它可用作空操作占位符,或作为组合链中由后续 Critic 执行真正工作的基础。

SelfReflectionCritic

检查工具结果中是否包含错误,并在可配置的重试上限内自动重试。
行为逻辑:
  • 如果任何工具结果包含 {"error": ...} 键且重试次数未耗尽,返回 action="retry"score=0.2
  • 如果错误持续超过 max_retries,返回 action="stop"score=0.0
  • 如果没有发现错误,返回 action="continue"score=1.0
将其传入 Engine:

ReActSelfReflectionCritic

专为 ReAct 智能体设计的增强版本。遇到错误时,它会构建一条结构化的反思笔记,描述失败的动作与观察到的错误,并将其追加到状态的 metadata 中,以便 LLM 在下次重试时能够从失败中学习。

函数式等价物

每个内置 Critic 都同时提供了装饰器函数版本:

Step 3: 使用 @critic 装饰器编写自定义 Critic

@critic 装饰器可将任意普通函数转换为 Critic 实例。该函数接收 (state, decision, results) 参数,可返回简写形式或完整的 CriticResult
快速返回简写: 无参数装饰器:
带关键字参数——设置自定义名称和默认评分:
当函数未显式设置评分时,装饰器的 score 参数将用作默认值。在上面的示例中,"continue" 返回会获得 score=0.8,而非通常的 1.0 将 Critic 接入 Engine:

Step 4: 带指令补丁和状态补丁的 Critic

当 Critic 返回 action="retry" 时,可以通过两种方式指导下一次迭代:
  • instruction_patch——追加到智能体系统提示词末尾的字符串,为 LLM 提供额外指导。
  • state_patch——一个字典,其键值通过 setattr 合并到智能体的状态对象中。
这些补丁在 Engine 再次调用 decide 之前就已应用,因此当重试开始时,LLM 和状态都已经更新完毕。
使用 state_patch 注入追踪数据:
也可以使用元组简写配合指令补丁:

Step 5: 组合多个 Critic

Engine 接受一个 Critic 列表。它们按顺序求值,第一个非 continue 的结果生效。这让你可以从最严格到最宽松地堆叠 Critic。
将它们接入 Engine——安全优先,然后是格式,最后是内置的自省 Critic 作为兜底:
按照这个顺序:
  1. 如果 safety_gate 返回 "stop",Engine 立即终止。后续 Critic 不会被调用。
  2. 如果 safety_gate 返回 "continue"format_check 返回 "retry",Engine 带着指令补丁重试。
  3. 如果两者都返回 "continue"SelfReflectionCritic 有机会捕获工具错误。
这种分层方式让每个 Critic 保持小巧专注,而顺序则赋予你对优先级的完全控制。

Hooks 生命周期

了解 Critic 参与的完整 Engine 事件生命周期。

Agent Module

深入了解 Critic 审查的 AgentModule 接口。

Critic 与停止条件

了解 Critic 如何与停止条件和重试预算交互。