编程代理
构建能够处理代码库的代理:读取和编辑文件,在沙箱中运行命令和测试,规划多步骤工作,自主地朝目标迭代,并协调并行审查者——这些功能都原生支持 ADK-Rust,适用于任何模型提供商。
这由几个专注的组件组成,而不是一个单体框架:
| 部件 | 提供内容 | 页面 |
|---|---|---|
adk-devtools | 作用域限定在工作区目录中的内循环工具 — read_file、write_file、edit_file、glob、grep、bash | 开发工具 |
CodingAgent(位于 adk-agent 中,功能 coding) | 一次调用的工具集,将这些工具、规划 write_todos 工具和最小提示词连接到 LlmAgent 上 | 工具集 |
CLI(adk-rust code / goal / ultracode) | 原生命令:一次性任务、自主目标模式和并行超级审查 | CLI |
图工作流(adk-graph) | 分发给并行的专业 agent 并进行综合——“超级”模式 | 工作流 |
| 示例 | 三个可运行的示例 crate | 示例 |
刚接触 ADK-Rust? 请先阅读简介和 快速入门。本节将基于 agents、tools、 sessions,以及(可选的)memory和 graphs展开。
你可以构建的内容
- 一次性编码任务 — “让失败的测试通过”、“添加一个
/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。
下一步
- 开发工具 — 工具集和沙箱化的
Workspace。 - Harness —
CodingAgent、规划循环和权限模式。 - CLI —
code、goal(持久化/可恢复)和ultracode。 - 工作流 — 在
adk-graph上进行并行超强审查。 - 示例 — 三个可运行的示例 crate。
另请参阅docs/design/coding-agent.md中的完整设计原理。