Rivet沙箱代理SDK提供了一种通用的API,用于开发各种代理程序。这使得开发者无需为每种代理程序重新编写集成代码,就能使用Claude Code、Codex、OpenCode和Amp等不同的代理运行时环境。该SDK有效解决了以往代理API之间的不兼容性问题,以及会话处理和数据流格式方面的差异,这些因素一直以来都使得代理程序的集成变得复杂且难以维护。

根据Rivet的联合创始人兼首席技术官Nathan Flurry的说法,构建代理系统的难点主要在于三个核心问题:API的不兼容性、临时状态的管理,以及不同服务提供商之间的部署差异。

开发代理程序确实非常困难。Claude Code使用一种API,而Codex则使用另一种API;OpenCode和Amp的功能实现方式也各不相同。即使你选择了其中某一种代理程序,也会遇到进程崩溃时会话状态丢失、需要为不同的沙箱服务提供商编写不同的集成代码,以及无法将对话记录数据流式传输回应用程序等问题。

每种代理程序都拥有自己独特的事件格式、会话模型和权限系统。例如,Claude Code通过stdout输出JSONL格式的数据,而Codex则使用JSON-RPC协议,因此开发者必须为这两种代理程序分别编写不同的集成代码。此外,由于Daytona、Vercel和E2B等平台都提供了自己定制的API,部署过程也增加了额外的复杂性。

相比之下,Rivet的沙箱代理SDK允许开发者使用统一的API进行开发,只需通过配置更改就能切换不同的代理程序。以下是一个使用该SDK创建代理会话的简单示例:

import { SandboxAgent } from "sandbox-agent";

const client = await SandboxAgent.start();

await client.createSession("my-session", {
  agent: "claude",  // 或 "codex", "opencode", "amp"
  permissionMode: "auto",
});

for await (const event of client.streamEvents("my-session")) {
  console.log(event.type, event.data);
}

该SDK还采用统一的会话格式,所有与代理程序相关的事件——包括会话生命周期、数据流传输、人工干预请求、工具执行结果以及错误信息等——都遵循相同的格式,因此开发者无需为每种代理程序编写自定义的处理逻辑。

在X.com上,Gianfranco P.这样评论道:

这就是编码代理生态系统迫切需要的抽象层。API的不兼容性问题确实严重阻碍了人工智能驱动的开发工具的构建。如果能够通过一次配置更改就能切换不同的代理程序,那么测试哪种模型效果最好就变得非常简单了。

有一位Hacker News的读者询问,是否可以将“Rivet的沙箱代理SDK视为基于HTTP的代理客户端协议”。Flurry澄清说,虽然这种类比在很大程度上是正确的,但“代理客户端协议主要针对编辑器所需的功能提供通用API”,而Rivet的沙箱代理SDK则功能更为全面,其目标是完全实现代理程序的自动化。

Sandbox Agent SDK是一款体积小巧的二进制文件,大小仅为15MB,它是使用Rust语言编写的,且不依赖于任何运行时环境。只要是可以执行Linux二进制文件的系统环境,就可以安装这款SDK,例如Daytona、E2B、Vercel沙盒环境、Docker等等。该项目在GitHub上可供下载

Comments are closed.