返回博客
发布v0.2.0稳定版图代理实时浏览器评估工作室

ADK-Rust v0.2.0:首个稳定版本

宣布 ADK-Rust v0.2.0——首个稳定版本,包含图代理、实时语音、浏览器自动化、评估框架和 ADK Studio 可视化构建器。

15 分钟 阅读

ADK-Rust v0.2.0:首个稳定版本

我们很高兴地宣布 ADK-Rust v0.2.0——Rust 框架的首个稳定版本,用于构建生产就绪的 AI 代理。此版本标志着一个重要的里程碑,带来了显著的新功能、改进的稳定性以及对未来语义版本控制的承诺。

v0.2.0 中的新功能

🔀 图代理(LangGraph 风格的工作流)

新的 adk-graph crate 为 Rust 带来了 LangGraph 风格的工作流编排:

use adk_graph::{prelude::*, node::AgentNode};

let graph = GraphAgent::builder("support_router")
    .channels(&["input", "category", "response"])
    .node(classifier_node)
    .node(billing_node)
    .node(technical_node)
    .edge(START, "classifier")
    .conditional_edges("classifier", Router::by_field("category", vec![
        ("billing", "billing_agent"),
        ("technical", "technical_agent"),
    ]))
    .edge("billing_agent", END)
    .edge("technical_agent", END)
    .build()?;

主要功能:

  • 状态管理:具有自动合并功能的类型化状态通道
  • 条件路由:根据状态字段或自定义逻辑进行路由
  • 检查点:SQLite 和内存后端,用于容错
  • 人机协作:中断工作流以进行人工审批
  • 循环图:支持具有迭代限制的 ReAct 模式

🎙️ 实时语音代理

通过双向音频流构建支持语音的 AI 助手:

use adk_realtime::{RealtimeAgent, openai::OpenAIRealtimeModel};

let agent = RealtimeAgent::builder("voice_assistant")
    .model(Arc::new(OpenAIRealtimeModel::new(&api_key, "gpt-4o-realtime-preview")))
    .instruction("You are a helpful voice assistant.")
    .voice("alloy")
    .server_vad()  // Voice Activity Detection
    .build()?;

支持的提供商:

  • OpenAI 实时 API (gpt-4o-realtime-preview, gpt-realtime)
  • Google Gemini 实时 API (gemini-2.0-flash-live-preview)

功能:

  • 双向音频流(PCM16, G711)
  • 服务器端语音活动检测
  • 语音对话期间的工具调用
  • 多代理移交

🌐 浏览器自动化

adk-browser crate 提供了 46 种用于 Web 自动化的 WebDriver 工具:

use adk_browser::{BrowserSession, BrowserToolset, BrowserConfig};

let session = Arc::new(BrowserSession::new(
    BrowserConfig::new().webdriver_url("http://localhost:4444")
));
let tools = BrowserToolset::new(session).all_tools();

let agent = LlmAgentBuilder::new("web_agent")
    .model(model)
    .instruction("Browse the web and extract information.")
    .tools(tools)
    .build()?;

工具类别:

  • 导航:browser_navigatebrowser_backbrowser_forward
  • 提取:browser_extract_textbrowser_extract_linksbrowser_extract_html
  • 交互:browser_clickbrowser_typebrowser_select
  • 表单:browser_fill_formbrowser_submit
  • 截图:browser_screenshotbrowser_screenshot_element
  • JavaScript:browser_evaluatebrowser_evaluate_async

📊 代理评估框架

使用 adk-eval crate 测试和验证代理行为:

use adk_eval::{Evaluator, EvaluationConfig, EvaluationCriteria};

let config = EvaluationConfig::with_criteria(
    EvaluationCriteria::exact_tools()
        .with_response_similarity(0.8)
);

let evaluator = Evaluator::new(config);
let report = evaluator
    .evaluate_file(agent, "tests/my_agent.test.json")
    .await?;

assert!(report.all_passed());

评估能力:

  • 轨迹验证(工具调用序列)
  • 响应相似度(Jaccard、Levenshtein、ROUGE)
  • LLM 判定的语义匹配
  • 基于评分标准的自定义评分
  • 安全性和幻觉检测

🎨 ADK Studio:可视化代理构建器

用于构建 AI 代理的拖放界面:

cargo install adk-studio
adk-studio

功能:

  • 用于可视化工作流设计的 ReactFlow 画布
  • 完整代理调色板:LLM、顺序、并行、循环、路由器
  • 工具集成:函数、MCP、浏览器、Google 搜索
  • 使用 SSE 流进行实时聊天测试
  • 一键生成代码到生产 Rust

🛡️ 护栏

使用 adk-guardrail crate 进行输入/输出验证:

use adk_guardrail::{Guardrails, PiiRedactor, ContentFilter};

let guardrails = Guardrails::new()
    .add(PiiRedactor::default())
    .add(ContentFilter::block_harmful());

let safe_input = guardrails.process_input(user_message)?;
let safe_output = guardrails.process_output(agent_response)?;

内置护栏:

  • PII 匿名化(电子邮件、电话、SSN、信用卡)
  • 内容过滤(有害、不当)
  • JSON 模式验证
  • 自定义验证规则

🖼️ 动态 UI 生成

adk-ui crate 使代理能够渲染丰富的界面:

use adk_ui::{UiToolset, UI_AGENT_PROMPT};

let agent = LlmAgentBuilder::new("ui_assistant")
    .instruction(UI_AGENT_PROMPT)
    .tools(UiToolset::all_tools())
    .build()?;

组件: 28 个 UI 组件,包括卡片、表格、图表、表单 模板: 10 个用于常见模式的预构建模板 React 客户端: npm install @zavora-ai/adk-ui-react

破坏性变更

RunnerConfig 变更

RunnerConfig 结构体现在包含一个 run_config 字段:

// Before (v0.1.x)
let runner = Runner::new(RunnerConfig {
    app_name: "my_app".to_string(),
    agent: agent.clone(),
    session_service: session_service.clone(),
    artifact_service: None,
    memory_service: None,
})?;

// After (v0.2.0)
let runner = Runner::new(RunnerConfig {
    app_name: "my_app".to_string(),
    agent: agent.clone(),
    session_service: session_service.clone(),
    artifact_service: None,
    memory_service: None,
    run_config: None,  // NEW: Optional RunConfig for execution settings
})?;

依赖更新

  • sqlx 从 0.7 升级到 0.8(SQLite 兼容性所需)
  • Rust 2024 版(需要 Rust 1.85+)

迁移指南

  1. 更新 Cargo.toml:

    adk-rust = "0.2.0"
  2. run_config: None 添加到 RunnerConfig:

    RunnerConfig {
        // ... existing fields ...
        run_config: None,
    }
  3. 如果使用 SQLite 会话,请更新 sqlx:

    sqlx = { version = "0.8", features = ["sqlite", "runtime-tokio"] }

性能改进

  • 流优化:减少事件流中的内存分配
  • 会话缓存:提高会话查找性能
  • 工具执行:尽可能并行执行工具

文档

所有文档均已更新至 v0.2.0:

文档现已提供 9 种语言版本:英语、西班牙语、中文、日语、葡萄牙语、德语、法语、阿拉伯语、印地语和韩语。

后续计划

我们正在开发 v0.3.0,计划中的功能包括:

  • 云集成(AWS Bedrock、Azure OpenAI、GCP Vertex AI)
  • 增强的内存系统,支持更多向量数据库后端
  • 工作流模板和预构建代理模式
  • 性能分析和优化工具

开始使用

# Create a new project
cargo new my_agent
cd my_agent

# Add ADK-Rust
echo 'adk-rust = "0.2.0"' >> Cargo.toml
echo 'tokio = { version = "1.40", features = ["full"] }' >> Cargo.toml

# Set your API key
export GOOGLE_API_KEY="your-api-key"

# Run an example
cargo run --example quickstart

感谢

衷心感谢所有通过代码、文档、错误报告和反馈为本次发布做出贡献的人。ADK-Rust 由社区构建,为社区服务。

链接:

祝您构建愉快!🦀🤖

准备好尝试 ADK-Rust v0.5.0 了吗?

开始使用最强大的 Rust 框架来构建 AI 代理。