编码支架 (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-pluginadk-guardrail)以确定性方式控制工具调用。

运行它

harness 会生成一个 Arc<dyn Agent>;用 adk-runner 来驱动它(见 快速开始),或者使用 CLI,它把这些都封装起来。

下一步:The CLI →