规划模式

规划模式决定会话在每次 send 或 stream 回合之前做什么。开启规划后,模型会先为 请求写出一份结构化计划,会话再把它作为事件发布出来。它适合多步骤工作(重构、发布 评审、审计),让宿主 UI 在智能体开始修改之前就能展示任务清单。

通过会话的规划选项设置:Rust 和 Go 使用 PlanningMode,Node.js 使用 planningMode,Python 使用 planning_mode。可接受的值为:

值每个回合之前的行为
"auto"默认值。执行一次预分析模型调用;不发布计划。
"enabled"执行预分析,再请模型生成计划并发布。
"disabled"不做预分析,也不做规划。
Rust
Node.js
Python
Go
Rust
use a3s_code_core::{Agent, PlanningMode, SessionOptions};
#[tokio::main]
async fn main() -> a3s_code_core::Result<()> {
let agent = Agent::new("agent.acl").await?;
let session = agent
.session_builder("/repo")
.options(SessionOptions::new().with_planning_mode(PlanningMode::Enabled))
.build()
.await?;
let result = session.send("规划并完成发布就绪审查。", None).await?;
println!("{}", result.text);
println!("执行了 {} 次工具调用", result.tool_calls_count);
session.close().await;
agent.close().await;
Ok(())
}

使用 "enabled" 时,会话依次发出 planning_start、携带计划的 planning_end、 包含计划步骤的 task_updated,以及每个步骤一条状态为 pending 的 step_end。开启 目标跟踪时(Rust 中为 with_goal_tracking,Node.js 中为 goalTracking,Python 中为 goal_tracking,Go 中为 GoalTracking),planning_end 之前还会有一条携带目标的 goal_extracted 事件。这些事件也会记录到 run 上,因此宿主 UI 可以从 stream 事件或 run 的事件历史中渲染任务清单。如果规划调用遇到暂时性的模型错误,会话会改为发布一份 后备计划;取消、不可重试的 provider 错误或预算耗尽会让该回合失败。

计划是给宿主的指引,而不是另一个执行循环:回合仍然自行决定模型调用和工具调用。完成 证据仍然来自验证命令。