编程代理

构建能够处理代码库的代理:读取和编辑文件,在沙箱中运行命令和测试,规划多步骤工作,自主地朝目标迭代,并协调并行审查者——这些功能都原生支持 ADK-Rust,适用于任何模型提供商。

这由几个专注的组件组成,而不是一个单体框架:

部件提供内容页面
adk-devtools作用域限定在工作区目录中的内循环工具 — read_filewrite_fileedit_fileglobgrepbash开发工具
CodingAgent(位于 adk-agent 中,功能 coding一次调用的工具集,将这些工具、规划 write_todos 工具和最小提示词连接到 LlmAgent工具集
CLIadk-rust code / goal / ultracode原生命令:一次性任务、自主目标模式和并行超级审查CLI
图工作流adk-graph分发给并行的专业 agent 并进行综合——“超级”模式工作流
示例三个可运行的示例 crate示例

刚接触 ADK-Rust? 请先阅读简介快速入门。本节将基于 agents、tools、 sessions,以及(可选的)memorygraphs展开。

你可以构建的内容

  • 一次性编码任务 — “让失败的测试通过”、“添加一个 /health 路由”。agent 会进行探索、编辑、运行测试并报告结果。
  • 自主目标模式 — 提供一个目标和可验证的成功条件(必须以 0 退出的 命令);agent 会循环执行规划 → 执行 → 验证,持续自我修正,直到通过或预算耗尽。持久化且可恢复。(Codex/Hermes /goal 风格。)
  • 超强审查工作流 — 先实现,然后将任务分发给并行的正确性/边界情况/风格审查者,综合它们的结论并进行修订,直到审查者批准。(Claude Code ultracode/ultrareview 风格。)

安装

# The harness (pulls in the dev tools) + a model provider
adk-agent = { version = "2.1.0", features = ["coding"] }
adk-devtools = "2.1.0"
adk-model = { version = "2.1.0", features = ["gemini"] }
adk-runner = "2.1.0"
adk-session = "2.1.0"

开发工具采用沙箱优先设计,且没有繁重的依赖,因此占用空间较小;只有并行工作流需要 adk-graph

60 秒快速入门

use adk_agent::coding::CodingAgent;
use adk_devtools::Workspace;
use adk_runner::Runner;
use adk_session::{CreateRequest, InMemorySessionService, SessionService};
use adk_core::{Content, SessionId, UserId};
use std::sync::Arc;

# async fn run(model: std::sync::Arc<dyn adk_core::Llm>) -> anyhow::Result<()> {
// One call builds a coding agent over a confined workspace.
let coding = CodingAgent::builder()
    .model(model)
    .workspace(Workspace::new("./my-repo"))
    .build()?;

let sessions: Arc<dyn SessionService> = Arc::new(InMemorySessionService::new());
sessions.create(CreateRequest {
    app_name: "demo".into(), user_id: "u".into(),
    session_id: Some("s".into()), state: Default::default(),
}).await?;

let runner = Runner::builder()
    .app_name("demo")
    .agent(coding.agent())          // -> Arc<dyn Agent>
    .session_service(sessions)
    .build()?;

let mut events = runner
    .run(UserId::new("u")?, SessionId::new("s")?,
         Content::new("user").with_text("Add a function add(a,b) to add.py and run it."))
    .await?;
// stream `events`: FunctionCall / FunctionResponse / Text …
# Ok(()) }

更喜欢终端?adk-rust code "make the failing test pass" 可以执行相同操作 — 请参阅CLI

下一步

  1. 开发工具 — 工具集和沙箱化的 Workspace
  2. HarnessCodingAgent、规划循环和权限模式。
  3. CLIcodegoal(持久化/可恢复)和 ultracode
  4. 工作流 — 在 adk-graph 上进行并行超强审查。
  5. 示例 — 三个可运行的示例 crate。

另请参阅docs/design/coding-agent.md中的完整设计原理。

编程代理 - ADK-Rust 文档 | ADK-Rust