Documentation Index
Fetch the complete documentation index at: https://qitor.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Engine 是 QitOS 所有智能体工作流共享的执行内核(kernel)。它运行步骤循环,协调 AgentModule 的钩子,分发工具调用,执行评估器,检查停止条件,并写出追踪记录产物。只有当你需要比 agent.run() 更细粒度的控制时,才会直接和它交互。
QitOS 强制遵守单内核规则:一次运行只有一个
Engine。解析器、评估器、记忆适配器、工具集等扩展都挂接在这条主流水线上,而不是再引入第二个执行循环。循环是如何工作的
每一步都遵循固定顺序:- prepare:
agent.prepare(state)把状态格式化成模型可直接消费的提示词文本。 - decide:先调用
agent.decide(state, observation);若返回None,再走 Engine 的默认模型调用路径。 - act:把
Decision.actions中的工具调用交给ToolRegistry执行。 - reduce:
agent.reduce(state, observation, decision)用新的观测结果更新状态。 - 评估器:所有已注册的
Critic在此步后评估当前结果,必要时可停止或重试。 - check_stop:检查预算、
FinalResultCriteria、agent.should_stop()以及自定义StopCriteria。 - 追踪记录:把本步的步骤记录与运行时事件写入
TraceWriter。
构造函数
| 参数 | 类型 | 说明 |
|---|---|---|
agent | AgentModule | 必需。要执行的策略模块。 |
budget | RuntimeBudget | None | 步数、时间与令牌限制。默认 RuntimeBudget(max_steps=10)。 |
parser | Parser | None | 把原始模型输出解析成 Decision 的解析器,必须与提示词格式匹配。 |
critics | list[Critic] | None | 每步后执行的评估器,可停止或重试。 |
stop_criteria | list[StopCriteria] | None | 停止条件列表。默认 [FinalResultCriteria()]。 |
env | Env | None | 提供 reset/observe/step/is_terminal/close 生命周期的环境。 |
trace_writer | TraceWriter | None | 为本次运行写出追踪记录产物:manifest.json、events.jsonl、steps.jsonl。 |
hooks | list[EngineHook] | None | 生命周期钩子。 |
render_hooks | list | None | 渲染钩子,会在内部合并进 hooks。 |
history_policy | HistoryPolicy | None | 控制运行内对话历史如何被组装。 |
recovery_policy | RecoveryPolicy | None | 控制步骤失败时如何恢复。 |
Engine.run(task)
Task 对象,返回一个 EngineResult。
当传入 Task 时,Engine 会读取 task.budget 并覆盖自身默认预算,同时自动管理资源预检、环境重置/观测/关闭等生命周期。
EngineResult
| 字段 | 说明 |
|---|---|
state | 运行结束后的最终强类型状态。重点查看 state.final_result 与 state.stop_reason。 |
records | 每步一个 StepRecord,包含决策、观测结果与状态差异。 |
events | 本次运行发出的全部 RuntimeEvent。 |
step_count | 实际执行的步数,即 len(records)。 |
task_result | 结构化任务结果,包含成功标志与条件结果。 |
钩子
钩子用于在不修改 Engine 内部逻辑的前提下观察或响应生命周期事件。它们通常实现EngineHook,在 on_before_step 与 on_after_step 等边界被调用。
hooks 传入,或在 agent.run(hooks=[...]) 中动态附加。
预算耗尽
当步数、墙钟时间或令牌预算耗尽时,Engine 会把state.stop_reason 设置为对应值,并写出 END 事件。运行会优雅结束,仍然返回 EngineResult,你可以通过检查 state.stop_reason 判断是否发生了预算耗尽。
从 AgentModule 构建 Engine
AgentModule.build_engine() 是一个便捷工厂,会创建一个和当前智能体绑定好的 Engine:
Engine(agent=agent, ...) 等价,也是 agent.run() 在内部采用的路径。
AsyncEngine
AsyncEngine 提供非阻塞的智能体执行能力。它封装了同样的 Engine 循环,但把阻塞调用放到线程池中执行,因此在 asyncio 事件循环中使用是安全的。
AsyncEngine.arun(task)
异步运行智能体循环,返回与 Engine.run() 相同的 EngineResult。
AsyncEngine.arun_stream(task)
异步运行智能体循环,并在事件发生时产出结构化的 EngineEvent 对象——非常适合实时 UI 更新或将进度流式推送给客户端。
step_start、step_end)、阶段切换(decide、act、reduce、critic、check_stop)和多智能体事件(handoff、delegate、fanout)时产出。流总是以 run_start 开始、以 run_end 结束。
EngineEvent
EventStream
EventStream 是支撑 arun_stream() 的异步队列。你也可以独立使用它,将事件扇出到多个消费者:
异步模型
当配置的模型实现了acall()(来自 AsyncModel)时,AsyncEngine 可以在不阻塞事件循环的情况下调用它。内置的异步模型适配器:
