一、代码审查为什么需要多Agent?
单Agent做代码审查,容易陷入“自己写自己审”的盲区,遗漏关键问题。而 多Agent 协作正好弥补这一缺陷,通过不同视角互为补充:
- Planner(规划者):分析需求,拆解任务 → 规划视角
- Executor(执行者):执行编码或计算 → 执行视角
- Reviewer(审查者):审查结果,提出改进 → 审计视角
三个视角互补,代码质量可以大幅提升。本文将以 Rust 语言为例,展示如何构建这样一条多Agent协作的代码审查流水线。
二、架构
| 规划者(分析需求,拆解任务) |
→ |
执行者(执行编码/计算) |
→ |
审查者(审查结果,反馈修正) |
流水线方向:Planner → Executor → Reviewer,任务依次传递,审查结果可反馈回 Executor 进行修正。
三、Coordinator:协作核心
Coordinator 是整条流水线的中枢,负责管理 Agent 注册、通信、死锁监控以及 Token 消耗追踪。其配置结构如下:
// 协调器配置 - 控制多Agent协作行为
#[derive(Debug, Clone)]
pub struct CoordinatorConfig {
pub deadlock_detection: bool, // 是否启用死锁检测
pub deadlock_check_interval_ms: u64, // 死锁检测间隔
pub default_timeout_ms: u64, // 默认超时
pub max_concurrent_tasks: usize, // 最大并发任务数
pub token_tracking: bool, // 是否追踪Token
}
impl Default for CoordinatorConfig {
fn default() -> Self {
Self {
deadlock_detection: true,
deadlock_check_interval_ms: 1000,
default_timeout_ms: 30000,
max_concurrent_tasks: 10,
token_tracking: true,
}
}
}
四、Coordinator 实现
核心的 Coordinator 结构体包含了消息总线、Token 追踪器和死锁监控器,并提供 register_agent、send_to_agent、record_token_usage 等关键方法:
// Coordinator - 管理一组Agent的核心组件
pub struct Coordinator {
pub id: String,
agents: HashMap<AgentId, Box<dyn Agent>>,
message_bus: Arc<MessageBus>, // 消息总线
token_tracker: TokenTracker, // Token追踪
deadlock_monitor: Arc<DeadlockMonitor>, // 死锁监控
config: CoordinatorConfig,
}
impl Coordinator {
pub fn new(id: &str) -> Self { /* ... */ }
// 注册Agent
pub fn register_agent<A: Agent + 'static>(&mut self, agent: A) -> AgentId {
let id = agent.id().clone();
self.agents.insert(id.clone(), Box::new(agent));
self.message_bus.subscribe(id.clone(), format!("agent:{}", id.0));
id
}
// Agent间通信
pub async fn send_to_agent(&self, from: &AgentId, to: &AgentId, msg: Message) -> Result<()> {
if self.config.deadlock_detection {
self.deadlock_monitor.record_wait(from.clone(), to.clone(), msg.id.clone());
}
self.message_bus.send(to, msg);
Ok(())
}
// 记录Token消耗
pub fn record_token_usage(&self, agent_id: &AgentId, input: u64, output: u64) {
if self.config.token_tracking {
self.token_tracker.record(agent_id, input, output);
}
}
}
五、完整工作流代码
下面是组装三个 Agent 并建立 Planner → Executor → Reviewer 流水线的完整示例:
// 完整的代码审查工作流
use agentflow::{Graph, Message, LLMFactory, Coordinator};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// 创建工作流
let mut graph = Graph::new("code-review-demo");
let llm = LLMFactory::local_ollama("llama2");
// 3个Agent各有专长
let planner = graph.add_llm_agent(
"planner", llm.clone(), "分析任务需求,规划执行步骤");
let executor = graph.add_llm_agent(
"executor", llm.clone(), "根据规划执行具体任务");
let reviewer = graph.add_llm_agent(
"reviewer", llm.clone(), "审查执行结果,提出改进建议");
// 连线:规划→执行→审查
graph.connect(planner, executor.clone());
graph.connect(executor, reviewer);
println!("Workflow: Planner -> Executor -> Reviewer");
// 执行
let result = graph.run(
Message::user("实现一个简单的计算器程序")
).await?;
println!("Success: {}", result.success);
println!("Iterations: {}", result.iterations);
Ok(())
}
六、CLI 入口
程序提供了 demo、run、status 三种运行模式,方便演示和调试:
// CLI入口 - 支持三种命令
async fn main() -> anyhow::Result<()> {
let args: Vec<String> = env::args().collect();
match args[1].as_str() {
"run" => run_workflow(&args[2..]).await?,
"demo" => run_demo().await?,
"status" => print_status().await?,
_ => print_usage(),
}
Ok(())
}
fn print_usage() {
println!("Usage:");
println!(" agentflow demo - 运行演示工作流");
println!(" agentflow run <file> - 运行指定工作流文件");
println!(" agentflow status - 显示运行时状态");
}
七、cargo run 输出
执行 cargo run demo 后,控制台会输出各 Agent 的注册、连接信息以及最终执行结果:
$ cargo run demo
[INFO] Running demo workflow...
Workflow: Planner -> Executor -> Reviewer
[INFO] Starting graph 'code-review-demo' with 3 agents
[INFO] Agent 'planner' added
[INFO] Agent 'executor' added
[INFO] Agent 'reviewer' added
[INFO] Connected planner -> executor
[INFO] Connected executor -> reviewer
═══════════════════════════════════════════════════════════
Result:
Success: true
Iterations: 3
八、审查流水线对比
| 模式 |
优点 |
缺点 |
| 单Agent |
简单快速 |
盲点、质量不稳定 |
| 流水线(本文) |
多视角互补、质量高 |
Token消耗约3倍 |
| 反馈循环 |
自动迭代直到满意 |
可能死循环,需死锁检测 |
九、总结
- Coordinator:实现 Agent 注册、通信、死锁检测和 Token 追踪,是流水线的控制中枢。
- 流水线模式:Planner → Executor → Reviewer,多视角互补,显著提升审查质量。
- CLI 入口:提供
demo / run / status 三种命令,便于使用和调试。
- 内置死锁检测与 Token 监控,确保流水线安全可控。
- 后续可扩展:添加
connect_loop 实现反馈循环,引入动态路由支持条件分支。
🚀 更多 Agent 开发实战经验,欢迎来云栈社区一起探讨。