ZeroClaw - Rust 性能怪兽
约 1254 字大约 4 分钟
2026-03-07
基于 Tokio 异步运行时的无锁 Actor 模型,编译后单文件二进制,零外部依赖。
✨ 核心特点
🚀 极致性能
- 基于 Tokio 异步运行时
- 无锁 Actor 模型设计
- 零 GC(垃圾回收),消除 Stop-the-world 卡顿
- 内存占用 < 50MB
📦 零依赖部署
- 编译后单文件二进制
- 静态链接,无需外部依赖
- 跨平台支持(Linux/Mac/Windows)
- 容器镜像 < 10MB
💾 嵌入式数据库
- 使用 Sled 嵌入式 KV 数据库
- 无需外部数据库服务
- ACID 事务支持
- 自动持久化
🚀 快速开始
安装
# 从 GitHub Releases 下载预编译二进制
curl -L https://github.com/zeroclaw-labs/zeroclaw/releases/latest/download/zeroclaw-linux-amd64 -o zeroclaw
chmod +x zeroclaw
# 或使用 Cargo 安装
cargo install zeroclaw
# 或从源码编译
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
cargo build --release配置
创建配置文件 zeroclaw.toml:
[server]
host = "0.0.0.0"
port = 8080
workers = 4 # 工作线程数
[llm]
provider = "openai"
model = "gpt-4"
api_key = "your-api-key"
timeout = 30
max_retries = 3
[database]
path = "./data"
cache_size = 100 # MB
sync_interval = 5 # 秒
[actor]
mailbox_size = 1000
max_concurrent_tasks = 100运行
# 启动服务
./zeroclaw start
# 指定配置文件
./zeroclaw start --config zeroclaw.toml
# 后台运行
./zeroclaw start --daemon
# 查看状态
./zeroclaw status💻 技术架构
Actor 模型
// 无锁 Actor 实现
pub struct Agent {
id: AgentId,
mailbox: mpsc::Receiver<Message>,
state: AgentState,
tools: Vec<Box<dyn Tool>>,
}
impl Agent {
pub async fn run(mut self) {
while let Some(msg) = self.mailbox.recv().await {
match msg {
Message::Task(task) => {
self.handle_task(task).await;
}
Message::Stop => break,
}
}
}
async fn handle_task(&mut self, task: Task) {
// ReAct 循环
loop {
let thought = self.think(&task).await;
let action = self.decide_action(thought).await;
if action.is_final() {
break;
}
let result = self.execute_action(action).await;
task.update_context(result);
}
}
}嵌入式数据库
use sled::Db;
pub struct Memory {
db: Db,
}
impl Memory {
pub fn new(path: &str) -> Result<Self> {
let db = sled::open(path)?;
Ok(Self { db })
}
pub async fn save(&self, key: &str, value: &[u8]) -> Result<()> {
self.db.insert(key, value)?;
Ok(())
}
pub async fn load(&self, key: &str) -> Result<Option<Vec<u8>>> {
Ok(self.db.get(key)?.map(|v| v.to_vec()))
}
}并发处理
// 使用 Tokio 处理并发任务
pub async fn handle_multiple_agents(tasks: Vec<Task>) {
let handles: Vec<_> = tasks
.into_iter()
.map(|task| {
tokio::spawn(async move {
let agent = Agent::new();
agent.process(task).await
})
})
.collect();
// 等待所有任务完成
let results = futures::future::join_all(handles).await;
}🎯 适用场景
✅ 推荐使用
- 高并发生产环境: 支持数千并发连接
- 低延迟要求: 无 GC 停顿,响应稳定
- 多 Agent 托管: 单机可运行数百个 Agent
- 企业自动化流水线: 稳定可靠的后台服务
❌ 不推荐使用
- 快速原型开发(编译时间较长)
- 需要频繁修改代码的场景
- 团队不熟悉 Rust 语言
📊 性能指标
| 指标 | 数值 |
|---|---|
| 内存占用 | < 50MB |
| 启动时间 | < 100ms |
| 响应延迟 | P99 < 10ms(不含 LLM) |
| 并发支持 | 10000+ 连接 |
| 吞吐量 | 50000+ req/s |
| 二进制大小 | ~15MB |
🛠️ 高级功能
自定义工具
use zeroclaw::Tool;
#[async_trait]
impl Tool for CustomTool {
fn name(&self) -> &str {
"custom_tool"
}
fn description(&self) -> &str {
"自定义工具描述"
}
async fn execute(&self, params: Value) -> Result<Value> {
// 你的逻辑
Ok(json!({"result": "success"}))
}
}
// 注册工具
let mut agent = Agent::new();
agent.register_tool(Box::new(CustomTool::new()));分布式部署
// 主节点配置
[cluster]
mode = "master"
bind = "0.0.0.0:9000"
nodes = ["worker1:9000", "worker2:9000"]
// 工作节点配置
[cluster]
mode = "worker"
master = "master:9000"监控指标
// Prometheus 指标导出
use prometheus::{Counter, Histogram};
lazy_static! {
static ref TASK_COUNTER: Counter =
Counter::new("zeroclaw_tasks_total", "Total tasks").unwrap();
static ref TASK_DURATION: Histogram =
Histogram::new("zeroclaw_task_duration_seconds", "Task duration").unwrap();
}
// 在代码中记录指标
TASK_COUNTER.inc();
let timer = TASK_DURATION.start_timer();
// ... 执行任务
timer.observe_duration();📸 使用示例
HTTP API
# 创建 Agent
curl -X POST http://localhost:8080/agents \
-H "Content-Type: application/json" \
-d '{
"name": "my-agent",
"model": "gpt-4",
"tools": ["web_search", "code_execution"]
}'
# 发送任务
curl -X POST http://localhost:8080/agents/my-agent/tasks \
-H "Content-Type: application/json" \
-d '{
"prompt": "帮我搜索 Rust 最佳实践"
}'
# 查询状态
curl http://localhost:8080/agents/my-agent/statusRust SDK
use zeroclaw::Client;
#[tokio::main]
async fn main() -> Result<()> {
// 创建客户端
let client = Client::new("http://localhost:8080")?;
// 创建 Agent
let agent = client.create_agent("my-agent").await?;
// 发送任务
let response = agent.chat("帮我分析这段代码").await?;
println!("Response: {}", response);
Ok(())
}Docker 部署
# 拉取镜像
docker pull zeroclaw/zeroclaw:latest
# 运行容器
docker run -d \
--name zeroclaw \
-p 8080:8080 \
-v $(pwd)/data:/data \
-e ZEROCLAW_API_KEY=your-key \
zeroclaw/zeroclaw:latest
# 查看日志
docker logs -f zeroclaw🔗 相关链接
- GitHub: zeroclaw-labs/zeroclaw
- 文档: 使用文档
- Crates.io: zeroclaw
- 问题反馈: Issues
- Discord: 社区讨论
🤝 贡献
欢迎贡献代码、报告问题或提出建议!
# 克隆仓库
git clone https://github.com/zeroclaw-labs/zeroclaw.git
# 安装开发依赖
cd zeroclaw
cargo build
# 运行测试
cargo test
# 代码格式化
cargo fmt
# 代码检查
cargo clippy📄 许可证
Apache License 2.0 - 详见 LICENSE
🌟 为什么选择 ZeroClaw?
适合你,如果你...
- ✅ 需要高性能生产环境
- ✅ 对响应延迟有严格要求
- ✅ 需要托管多个 Agent
- ✅ 喜欢 Rust 的安全性和性能
- ✅ 需要零依赖部署
不适合你,如果你...
- ❌ 需要快速原型开发
- ❌ 团队不熟悉 Rust
- ❌ 需要频繁修改代码