发现 AI 代理的未来arrow_forward

ra2a

calendar_today收录于 2026年2月25日
category智能体与应用工具
code开源
工作流自动化Rust多智能体系统AI代理智能体框架SDK智能体与应用工具开发者工具/代码协议/API/集成

Rust 语言的 Agent2Agent (A2A) 协议 SDK,完整实现 v0.3.0 规范的 Client/Server、gRPC 传输与可插拔任务存储

ra2a 是 Rust 语言实现的 Agent2Agent (A2A) 协议 SDK,由社区开发者 qntx 维护。A2A 是 Linux 基金会托管的开放标准,用于 AI Agent 之间的互操作通信,与 MCP(agent-to-tool)互补。

项目性质#

非官方 A2A 协议 SDK(社区实现);官方 A2A SDK 为 Python/JavaScript/Java/C#/.NET/Golang。

核心能力#

  • 完整实现 A2A v0.3.0 协议规范的 11 个 JSON-RPC 方法
  • 事件驱动服务端:AgentExecutor → EventQueue → RequestHandler 管道
  • 可组合 Axum handlers(a2a_router),用户控制路由、监听器、TLS 和中间件
  • Transport-agnostic 客户端,带 CallInterceptor 中间件和自动流式回退
  • gRPC 传输支持(通过 tonic/prost)
  • Push Notification 配置与 HMAC-SHA256 验证
  • 可插拔 SQL 任务存储(PostgreSQL/MySQL/SQLite)

组件结构#

Crate说明
ra2a主 SDK — Client、Server、Types、gRPC、任务存储
ra2a-ext扩展包 — ExtensionActivator、MetadataPropagator 拦截器(WIP)

JSON-RPC 方法支持#

方法说明
message/send发送消息,接收 Task 或 Message
message/stream发送消息,接收 SSE 事件流
tasks/get按 ID 获取任务(可选历史)
tasks/list分页/过滤列出任务
tasks/cancel请求取消任务
tasks/resubscribe重新连接到进行中任务的事件流
tasks/pushNotificationConfig/*Push Notification Webhook CRUD
agent/getAuthenticatedExtendedCard获取认证扩展 Agent Card

Feature Flags#

Feature默认说明
clientyesHTTP/JSON-RPC 客户端、SSE 流式、card resolver、拦截器
serveryes可组合 Axum handlers、事件队列、任务生命周期、SSE 流式
grpcgRPC 传输(需 protobuf 编译器)
telemetryOpenTelemetry tracing spans 和 metrics
postgresql / mysql / sqliteSQL 任务存储(通过 sqlx)
full全部功能

安全模型#

支持 5 种与 OpenAPI 3.0 对齐的安全方案:

方案说明
API KeyHeader/Query/Cookie 中的静态密钥
HTTP AuthBearer token 或 Basic 认证
OAuth 2.0Authorization code、Client credentials、Device code、Implicit flows
OpenID ConnectOIDC 发现式认证
Mutual TLS客户端证书认证

分层架构#

LayerKey typesRole
ServerAgentExecutor, EventQueue, DefaultRequestHandler事件驱动 Agent 执行;可组合 Axum handlers
ClientClient, Transport, CallInterceptorTransport-agnostic 客户端,带中间件
TypesAgentCard, Task, Message, EventA2A v0.3.0 类型定义
StorageTaskStore, PushConfigStore可插拔持久化
gRPCGrpcTransport, GrpcServiceImpl替代传输(tonic/prost)

任务生命周期#

9 个状态,终端状态为 Completed / Failed / Canceled / Rejected:

Submitted → Working → Completed
                   → Failed
                   → Canceled
                   → Rejected
           Input Required ←→ Working
           Auth Required  ←→ Working
Unknown (初始/查询状态)

Agent Discovery#

Agent 在 /.well-known/agent-card.json 发布 AgentCard,描述身份、能力、技能、传输和安全要求。

安装配置#

# 基础安装(client + server 默认启用)
ra2a = "0.8"

# 仅客户端
ra2a = { version = "0.8", default-features = false, features = ["client"] }

# 带 PostgreSQL 和遥测
ra2a = { version = "0.8", features = ["server", "postgresql", "telemetry"] }

# 全功能
ra2a = { version = "0.8", features = ["full"] }

服务端示例#

use ra2a::{
    server::{AgentExecutor, Event, EventQueue, RequestContext, ServerState, a2a_router},
    types::{AgentCard, Message, Part, Task, TaskState, TaskStatus},
};

struct EchoAgent;

impl AgentExecutor for EchoAgent {
    fn execute<'a>(
        &'a self, ctx: &'a RequestContext, queue: &'a EventQueue,
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'a>> {
        Box::pin(async move {
            let input = ctx.message.as_ref()
                .and_then(ra2a::Message::text_content)
                .unwrap_or_default();
            let mut task = Task::new(&ctx.task_id, &ctx.context_id);
            task.status = TaskStatus::with_message(
                TaskState::Completed,
                Message::agent(vec![Part::text(format!("Echo: {input}"))]),
            );
            queue.send(Event::Task(task))?;
            Ok(())
        })
    }
}

#[tokio::main]
async fn main() -> std::io::Result<()> {
    let card = AgentCard::new("Echo Agent", "http://localhost:8080");
    let state = ServerState::from_executor(EchoAgent, card);
    let app = axum::Router::new().merge(a2a_router(state));
    let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await?;
    axum::serve(listener, app).await
}

客户端示例#

use ra2a::{
    client::Client,
    types::{Message, MessageSendParams, Part, SendMessageResult},
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::from_url("http://localhost:8080")?;
    let msg = Message::user(vec![Part::text("Hello!")]);
    let result = client.send_message(&MessageSendParams::new(msg)).await?;
    Ok(())
}

适用场景#

  • 构建 A2A 协议兼容的 Rust Agent 服务端
  • 实现 A2A 协议客户端连接远程 Agent
  • 需要高性能、内存安全的 Agent 间通信基础设施
  • 多 Agent 协作系统中的任务编排与状态管理

待确认信息#

项目状态说明
v1.0 协议支持待确认README 说明 v1.0 尚未正式发布,将在发布后跟进
独立安全审计未进行README 明确声明未经独立审计
ra2a-ext 完整度WIPREADME 标注 ra2a-ext 为 Work In Progress
docs.rs 最新版构建失败docs.rs 显示 0.8.0 构建失败,最近成功构建为 0.4.0

保持更新

获取最新的 AI 工具和趋势,直接发送到您的收件箱。没有垃圾邮件,只有智能。

rocket_launch