过去的一个多月里,一直在为毕业生进行软件工程与 AI 开发能力培训,直到最近才有空为 AutoDev 完善 A2A 能力的支持。顺带一提,毕业生 对于 AI 的热情远比大部分工作多年的开发者强烈得多,也怪不得有些公司老是要裁员去招新人,以重塑团队结构。
在最近,终于在假期附近可以抽出时间,为 AutoDev 添加上之前心心念念的 A2A 协议支持。
A2A(Google 推出的 Agent-to-Agent 协议)协议的出现,旨在解决 AI 智能体生态系统中的一个根本性难题, 并为构建一个真正互联互通的智能网络提供基础。
其工作方式可以用几行简单的代码来直观展示:
Message message = A2A.toUserMessage("tell me a joke");
jokeClient.sendMessage(message);
通过 A2A 协议,你可以将任务以 message 的形式委托给其它的智能体来完成。这种机制与 基于 LLM 的路由(LLM-based Routing)有一定的相似性。 只是 Routing 更适合在单个智能体系统内进行任务分配,而 A2A 更适合于跨智能体、跨系统的协作。
因此,A2A 会带来更好的架构设计,即解耦系统中的各种直接依赖,让代码更加模块化易于用 AI 生成和重写。
在过去的实现里,AutoDev 已经实现了双向 MCP 的能力,AutoDev 作为一个 MCP 服务端,可以被任何 Agent Tool 调用;同时,AutoDev 作为一个 MCP 客户端,可以调用任何 MCP Tool。
而现在引入了 A2A 则是将其作为现有 Tool 的补充,即在 AutoDev Sketch 可以将任务委托给一个 MCP Tool,也可以由其它的智能体来完成。 A2A 和 MCP(Model Context Protocol)在这里相当于互补而非竞争:
在 AutoDev 中 A2A 的实现逻辑如下:
即也是基于现有的 Tool 抽象来的实现,以将 MCP Tool 和 A2A 统一管理。
在使用时,与 MCP 的配置是类似的,有区别的是配置的方式:
{
"mcpServers": {
"weather": {
"command": "java",
"args": [
"-jar",
"/Volumes/source/ai/autodev-mcp-test/java-mcp/target/mcp-0.0.1-SNAPSHOT.jar"
]
}
},
"a2aServers": {
"remote-example": {
"url": "http://localhost:9999"
}
}
}
即现在需要在 AutoDev 的配置文件中,添加 a2aServers
的配置,即可将对应的 AI Agent 添加到 AutoDev 中。然后,就可以直接在 DevInsCommand 中使用
/a2a:remote-example
```json
{
"agent": "Hello World Agent",
"message": "Please review this code for potential security vulnerabilities"
}
```
相似的,我们也为 A2A 添加了 Debugger 的能力。只需要创建同样的 *.mcp.json
文件,然后点击切换 A2A 就可以进行简单的测试了:
可以查看详细信息,并发送消息进行测试。
虽然 AutoDev 作为开源 AI 编程工具仍以插件形态存在,功能上暂时落后于商业化产品,但这也正赋予了它独特的优势:
换句话说,AutoDev 不只是追赶商业工具,而是在开源环境下探索下一代 AI 编程架构与协作模式的试验田。
围观我的Github Idea墙, 也许,你会遇到心仪的项目