编码支架 (CodingAgent)
CodingAgent 是一个轻量支架——通过 adk-agent 中的 coding
功能提供——它将 dev tools、规划 write_todos 工具,
以及一个最小化的编码系统提示词,连接到一个普通的 LlmAgent 上。它是配置
优于 LlmAgent,不是一种新的 agent 类型,因此它保持默认的 adk-agent 构建
精简(该功能会引入 adk-devtools)。
构建一个
use adk_agent::coding::CodingAgent;
use adk_devtools::Workspace;
let coding = CodingAgent::builder()
.model(model) // any adk-model provider (required)
.workspace(Workspace::new("./my-repo")) // sandboxed (required)
.instruction("Follow the project's existing style; prefer small diffs.") // optional, appended
.build()?;
let agent = coding.agent(); // Arc<dyn Agent> — hand to a Runner
构建器选项:
| 方法 | 效果 |
|---|---|
.model(Arc<dyn Llm>) | 模型(必需)。 |
.workspace(Workspace) | 工具被限制在其中的工作区(必需)。 |
.name("…") | 代理名称(默认 "coding-agent")。 |
.instruction("…") | 附加到基础编码提示的额外指导。 |
.tool(Arc<dyn Tool>) | 注册一个额外工具(MCP、函数工具等)。 |
.without_todos() | 禁用 write_todos 规划工具。 |
有哪些组件接入
-
开发工具集 — read/write/edit/glob/grep/bash,作用域限定在工作区内。
-
write_todos— 模型用来记录和更新简短任务列表的计划工具。从 harness 里读回它:for todo in coding.todos() { println!("[{}] {}", todo.status, todo.content); // pending | in_progress | completed } -
最小化提示词 — 少于 1k token 的基础指令(“先探索再修改”“先读再编辑”“通过运行测试验证”“跟踪计划”),刻意保持很小,这样能力就来自工具和技能,而不是一个庞大的提示词。
循环
你像任何 agent 一样运行一个 CodingAgent——通过一个 Runner。在一次 turn 内,底层的 LlmAgent 已经在执行 计划 → 行动 → 观察 循环:它调用工具,查看结果,然后持续进行,直到完成。一个典型的 turn:
write_todos(...) # plan
glob / grep / read_file # explore
edit_file / write_file # change
bash("…test…") # verify
write_todos(... completed) # update plan
→ final summary
对于 多轮 工作,在多次调用中复用同一个 Runner + session,agent 就会基于自己之前的工作继续推进(它会重新读取并编辑自己写过的文件)。参见 coding_agent 示例(multiturn 模式)。
记忆与技能
因为底层是一个 LlmAgent,所以 ADK 中的其他内容都可以组合:
- 在
Runner上附加一个MemoryService(例如双时间知识图谱),用于跨 session 的项目记忆。 - 通过
adk-skill添加 lazy skills,在不膨胀提示词的情况下扩展能力。 - hooks/guardrails(
adk-plugin、adk-guardrail)以确定性方式控制工具调用。
运行它
harness 会生成一个 Arc<dyn Agent>;用 adk-runner 来驱动它(见 快速开始),或者使用 CLI,它把这些都封装起来。
下一步:The CLI →