Skip to content

Agent 运行时构建器

AgentRuntimeBuilder 提供流式 API 用于构建 AgentRuntime

构建器选项

rust
let mut runtime = AgentRuntime::builder()
    .llm(llm_provider)           // 必填:Arc<dyn LlmProvider>
    .tools(tool_registry)        // 可选:ToolRegistry
    .max_steps(20)               // 可选:步骤预算(默认 32)
    .system_prompt("...")        // 可选:自定义系统提示字符串
    .event_sink(my_sink)         // 可选:Arc<dyn EventSink> 观察者
    .build()?;

运行 Agent

rust
// 运行至完成
let outcome = runtime.run("你的目标").await?;

// 访问结果
match outcome.finish_reason {
    FinishReason::NoMoreToolCalls => {
        println!("{}", outcome.final_text.unwrap_or_default());
    }
    FinishReason::BudgetExceeded => {
        eprintln!("Agent 达到步骤预算");
    }
    FinishReason::Stuck { repeated_call, repeats } => {
        eprintln!("Agent 卡住了:{repeated_call} 重复了 {repeats} 次");
    }
    FinishReason::ProviderStop(reason) => {
        println!("Provider 停止:{reason}");
        println!("{}", outcome.final_text.unwrap_or_default());
    }
    _ => {}
}

RuntimeOutcome

rust
pub struct RuntimeOutcome {
    pub finish_reason: FinishReason,
    pub final_text: Option<String>,
    pub steps: usize,
}

FinishReason

rust
pub enum FinishReason {
    NoMoreToolCalls,                              // 模型停止调用工具
    BudgetExceeded,                               // 达到 max_steps
    ProviderStop(String),                         // LLM 返回停止信号
    Stuck { repeated_call: String, repeats: usize }, // 同一工具调用循环
    TranscriptLimit { chars: usize, limit: usize },  // 对话记录过大
    PlanPending,                                  // Agent 等待计划审批
    Cancelled,                                    // 运行被外部取消
    PermissionDenialLimit,                        // 权限拒绝次数过多
}

注意: 运行时的错误通过 runtime.run()Err(...) 返回,而不是作为 FinishReason 的变体。使用 ?match 处理 Result

Released under the MIT License.