Skip to content

typisin/crablet

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Image

基于 Rust 构建的新一代 AI Agent 操作系统

RustLicense: MITPRs WelcomeStatusLines of Code

English | 中文文档 | 完整文档 快速开始 · 核心特性 · 架构设计 · 开发指南 · 部署运维


📖 项目简介

Crablet 是一个用 Rust 从零重写OpenClaw 兼容 AI Agent 操作系统,在完全对标 OpenClaw 架构的同时,通过 Rust 的系统级能力实现了10 倍性能提升生产级可靠性。项目不仅提供原生 Rust 工具链,还通过标准化技能格式实现对 OpenClaw 生态的完全向后兼容

🎯 核心定位

OpenClaw 的理念 + Rust 的工程化 = Crablet
   ↓                    ↓              ↓
 认知架构设计      性能/安全/并发      生产就绪的实现

Crablet 不是简单的 LLM 包装器,而是一个完整的认知操作系统,让大型语言模型拥有思考、规划、记忆、工具使用和多 Agent 协作的完整能力。

🎯 设计理念

Crablet 的核心使命是让智能体像水一样无处不在、随需而变、持续演进,其愿景是以高性能、内存安全与可扩展能力,支撑从日常问答到多步骤研究、从本地推理到云端深思的全栈智能工作流。

🧐示例

Image
Image Image Image
Image Image Image

🌟 为什么选择 Rust?

  • 极致性能:零成本抽象、无 GC 的低延迟执行,适合实时交互与大规模并发
  • 内存安全:所有权模型与编译期检查,降低内存错误与越界访问风险
  • 生态丰富:Tokio 异步运行时、Axum Web 框架、SQLx 数据库、Serde 序列化等成熟生态

🆚 与其他框架对比

维度 Crablet LangChain AutoGPT Agent Zero
核心语言 Rust Python Python Python
并发模型 Tokio 异步(原生) AsyncIO(受限) 多线程 AsyncIO
内存安全 ✅ 编译期保证 ❌ 运行时异常 ❌ 运行时异常 ❌ 运行时异常
性能 🚀 极致(无 GC) 🐢 受 GIL 限制 🐢 中等 🐢 中等
二进制体积 📦 单一二进制 📦 需 Python 环境 📦 需 Python 环境 📦 需 Python 环境
生产就绪 ✅ 内置监控/安全 🔧 需额外集成 🔧 需额外集成 🔧 需额外集成
模块化 ✅ Feature Flags ❌ 依赖树庞大 ❌ 依赖树庞大 ❌ 依赖树庞大
启动速度 ⚡️ < 500ms 🐢 2-5s 🐢 2-5s 🐢 2-5s
Image

✨ 核心特性

🧠 三层混合认知架构

Crablet 实现了受人类双系统理论启发的三层认知模型,通过认知路由器智能选择处理层级:

┌─────────────────────────────────────────────────────────────┐
│                    认知路由器                                 │
│               (Cognitive Router)                             │
│       根据任务复杂度智能选择处理层级 + 自动降级                │
└────────┬──────────────┬──────────────┬──────────────────────┘
         │              │              │
┌────────▼────┐ ┌──────▼───────┐ ┌────▼──────────┐
│  System 1   │ │   System 2   │ │   System 3    │
│  直觉响应    │ │   深度分析    │ │   群体协作     │
│             │ │              │ │               │
│ Trie 前缀树 │ │ ReAct 推理   │ │ Swarm 消息    │
│ O(L) 查找   │ │ 中间件管道    │ │ 多 Agent      │
│ < 10ms      │ │ 2-10s        │ │ 10s+          │
└─────────────┘ └──────────────┘ └───────────────┘

System 1 - 直觉响应层

设计目标:毫秒级响应常见指令,极低延迟

技术实现

  • IntentTrie 前缀树:O(L) 时间复杂度查找(L 为命令长度)
  • Levenshtein 模糊匹配:容忍拼写错误
  • 命令规则引擎:基于正则表达式的快速匹配

适用场景

用户: "你好"         → 响应时间: < 5ms
用户: "帮助"         → 响应时间: < 5ms  
用户: "状态查询"     → 响应时间: < 10ms

性能指标

  • 命中率:约 30-40% 的常见查询
  • 响应时间:< 10ms(P99)
  • 内存占用:< 1MB

System 2 - 深度分析层

设计目标:复杂任务推理、多步骤工具调用、知识检索增强

核心组件

  1. 中间件流水线(按执行顺序)
请求输入
   ↓
[SafetyMiddleware]         ← 输入长度限制 + 越狱检测
   ↓
[CostGuardMiddleware]      ← Token 预估 + 上下文截断
   ↓
[SemanticCacheMiddleware]  ← 向量相似度缓存(< 100ms)
   ↓
[PlanningMiddleware]       ← 复杂查询拆解为子任务
   ↓
[RagMiddleware]            ← 知识图谱 + 向量检索
   ↓
[SkillContextMiddleware]   ← 可用工具列表注入
   ↓
ReAct 推理引擎

中间件详解

中间件 功能 性能优化 配置项
Safety 输入长度限制(默认 10000 字符)
越狱 Prompt 检测
基于规则,O(1) 复杂度 safety.level
CostGuard Token 预估(tiktoken)
超出窗口自动截断
提前拦截超额请求 cost_guard.max_tokens
SemanticCache 基于 FastEmbed 的向量相似度
阈值 0.85 命中缓存
相似问题 < 100ms 响应 cache.similarity_threshold
Planning 检测 "and/then/步骤" 关键词
生成 3-5 步子任务计划
减少单次推理开销 planner.enabled
RAG 知识图谱查询(Neo4j/SQLite)
向量检索 Top-K(默认 5)
仅检索必要片段 rag.top_k
SkillContext 注入可用工具列表与描述 减少 LLM Prompt 体积 自动
  1. ReAct 推理引擎

核心机制:Thought → Action → Observation 循环

// ReAct 推理循环示例
用户: "帮我搜索 Rust 异步编程的最佳实践,提取前 3 条关键建议"

┌─────────────────────────────────────────────────────────────┐
│ [Step 1/5]                                                  │
│ Thought: 需要使用网络搜索工具查找相关资料                      │
│ Action: web_search                                          │
│ Arguments: {"query": "Rust async programming best practices"}│
│ Observation: 返回了 5 篇技术文章...                           │
├─────────────────────────────────────────────────────────────┤
│ [Step 2/5]                                                  │
│ Thought: 已获取足够信息,开始提取关键建议                      │
│ Action:  (进入最终回答)                                     │
│ Final Answer:                                               │
│ 根据搜索结果,Rust 异步编程的 3 条最佳实践是:                 │
│ 1. 使用 async/await 而非手动实现 Future                      │
│ 2. 避免在异步代码中使用 Arc<Mutex<T>>                        │
│ 3. 使用 tokio::spawn 进行任务并发调度                         │
└─────────────────────────────────────────────────────────────┘

技术细节

  • 最大步数限制:默认 5 步,可配置(防止无限循环)
  • 循环检测:记录已执行工具,防止重复调用
  • 错误回退:工具执行失败时自动重试或降级
  • 事件广播:每步通过 EventBus 广播,支持实时监控

性能指标

  • 平均步数:2.3 步(80% 的查询 ≤ 3 步)
  • 单步延迟:500ms-2s(取决于 LLM 和工具)
  • 总体延迟:2-10s(P95)
  1. 任务规划器(TaskPlanner)

核心功能:将复杂查询拆解为 3-5 步子任务

触发条件

  • 检测到 "然后"、"接着"、"步骤" 等关键词
  • 输入长度 > 200 字符且包含多个动词

示例

输入: "搜索 Rust 资料,总结要点,然后生成 Markdown 文档"

规划输出:
1. 使用 web_search 工具搜索 "Rust programming" 相关资料
2. 对搜索结果进行摘要提取
3. 将摘要转换为 Markdown 格式
4. 保存到文件
  1. LLM 客户端抽象

支持后端

后端 配置方式 特性 成本
OpenAI OPENAI_API_KEY GPT-4o, GPT-4o-mini
Function Calling
💰💰💰
DashScope DASHSCOPE_API_KEY 通义千问系列
国内访问快
💰💰
Ollama OLLAMA_MODEL Llama3, Mistral
本地运行,隐私优先
🆓
Moonshot MOONSHOT_API_KEY Kimi 长上下文(200K+) 💰💰
智谱 ZHIPU_API_KEY GLM-4 系列 💰💰

缓存层

  • LRU 缓存:默认 100 条记录
  • 命中率:约 20-30%(相同查询)
  • 内存占用:约 50MB(取决于响应长度)

System 3 - 群体协作层

设计目标:基于 Swarm 的深度研究与多 Agent 协作

核心组件

  1. Swarm 协调器

    • 代理注册表(HashMap)
    • 点对点消息传递(mpsc channel,容量 100)
    • 广播机制(所有代理)
  2. 研究代理(ResearchAgent)

    • 自动生成搜索查询
    • 执行工具调用
    • 生成结构化摘要
  3. 用户代理(UserProxyAgent)

    • 收集子任务结果
    • 聚合最终答案

执行流程

用户: "深度研究量子计算在密码学中的应用"

┌─────────────────────────────────────────────────────────────┐
│ System 3 深度研究模式                                         │
├─────────────────────────────────────────────────────────────┤
│ 1. 认知路由器检测 "深度研究" 关键词                            │
│    → 转交 System 3 处理                                       │
├─────────────────────────────────────────────────────────────┤
│ 2. 创建 ResearchAgent                                        │
│    → 生成子任务:                                              │
│       - 搜索量子计算基础原理                                   │
│       - 搜索后量子密码学算法                                   │
│       - 搜索现有应用案例                                       │
├─────────────────────────────────────────────────────────────┤
│ 3. 并行执行(Tokio 异步)                                     │
│    Agent 1: web_search("quantum computing basics")          │
│    Agent 2: web_search("post-quantum cryptography")         │
│    Agent 3: web_search("quantum crypto applications")       │
├─────────────────────────────────────────────────────────────┤
│ 4. UserProxyAgent 聚合结果                                   │
│    → 生成完整报告(3000+ 字)                                 │
└─────────────────────────────────────────────────────────────┘

性能指标

  • 并发度:最多 10 个 Agent(可配置)
  • 总体延迟:10-60s(取决于子任务数量)
  • 内存占用:每个 Agent 约 10MB

最佳实践

  • 增加超时控制(默认 60s)
  • 限制递归深度(默认 3 层)
  • 使用 spawn_blocking 避免阻塞异步运行时

🧠 多层记忆系统

Crablet 实现了类人脑的分层记忆架构

┌────────────────────────────────────────────────────────────┐
│                        记忆架构                              │
├────────────────┬────────────────┬──────────────────────────┤
│   工作记忆      │    情节记忆     │      语义记忆             │
│  (Working)     │   (Episodic)   │     (Semantic)           │
│                │                │                          │
│  滑动窗口       │  SQLite 持久化  │   知识图谱               │
│  VecDeque      │  会话历史       │   Neo4j / SQLite         │
│  O(1) 访问     │  全文检索       │   关系推理               │
│  5-20 条消息   │  FTS5 索引      │   D3 可视化              │
├────────────────┴────────────────┴──────────────────────────┤
│                  记忆整合器 (Consolidator)                   │
│          LLM 驱动的摘要生成 → 写入向量存储                    │
│          触发条件: 对话条数 > 10 或时间 > 1h                  │
└────────────────────────────────────────────────────────────┘

1. 工作记忆(Working Memory)

核心功能:固定容量双端队列,保存最近交互消息

技术实现

pub struct WorkingMemory {
    messages: VecDeque<Message>,  // 双端队列
    capacity: usize,               // 默认 20
}

特性

  • O(1) 插入/删除:双端队列高效操作
  • 懒加载:按会话 ID 隔离,避免全局锁
  • 自动淘汰:FIFO 策略,超出容量自动删除最旧消息

配置建议

  • 短对话场景:5-10 条
  • 长对话场景:15-20 条
  • 深度研究:20+ 条

2. 情节记忆(Episodic Memory)

核心功能:SQLite 持久化会话与消息

数据结构

-- 会话表
CREATE TABLE sessions (
    id TEXT PRIMARY KEY,
    user_id TEXT NOT NULL,
    channel TEXT NOT NULL,
    created_at INTEGER NOT NULL,
    last_active INTEGER NOT NULL,
    message_count INTEGER DEFAULT 0
);

-- 消息表
CREATE TABLE messages (
    id TEXT PRIMARY KEY,
    session_id TEXT NOT NULL,
    role TEXT NOT NULL,              -- user/assistant/system
    content TEXT NOT NULL,
    timestamp INTEGER NOT NULL,
    tokens INTEGER,                  -- Token 消耗统计
    latency_ms INTEGER,              -- 响应延迟
    FOREIGN KEY (session_id) REFERENCES sessions(id)
);

-- FTS5 全文索引
CREATE VIRTUAL TABLE messages_fts USING fts5(content);

核心方法

  • save_message(session_id, role, content) → 插入消息,O(1)
  • get_history(session_id, limit) → 分页查询,O(k log k)
  • search(query) → FTS5 全文检索,O(n log n)

性能指标

  • 插入延迟:< 5ms(P99)
  • 查询延迟:< 20ms(包含 10 条消息)
  • 全文检索:< 100ms(10000 条消息)

最佳实践

  • 定期归档旧会话(> 30 天)
  • 使用 VACUUM 压缩数据库
  • 监控数据库文件大小(建议 < 1GB)

3. 语义记忆(Semantic Memory)

核心功能:知识图谱,支持实体与关系的增删查

数据结构

-- 实体表
CREATE TABLE entities (
    id TEXT PRIMARY KEY,
    name TEXT UNIQUE NOT NULL,
    type TEXT,                       -- 实体类型:人物/地点/概念等
    metadata TEXT                    -- JSON 格式扩展信息
);

-- 关系表
CREATE TABLE relations (
    id TEXT PRIMARY KEY,
    source_id TEXT NOT NULL,
    target_id TEXT NOT NULL,
    relation TEXT NOT NULL,          -- 关系类型:属于/依赖/相关等
    metadata TEXT,
    FOREIGN KEY (source_id) REFERENCES entities(id),
    FOREIGN KEY (target_id) REFERENCES entities(id)
);

核心方法

  • add_entity(name, type) → 添加实体
  • add_relation(source, target, relation) → 添加关系
  • find_related(name) → 查找相关实体(双向)
  • export_d3_json() → 导出 D3.js 可视化数据

技术实现

  • SQLite 模式(默认):适合中小规模(< 10 万实体)
  • Neo4j 模式(可选):适合大规模图谱(> 10 万实体)

查询示例

-- 查找 "Rust" 相关的所有概念
SELECT e2.name, r.relation
FROM entities e1
JOIN relations r ON e1.id = r.source_id
JOIN entities e2 ON r.target_id = e2.id
WHERE e1.name = 'Rust'
UNION
SELECT e2.name, r.relation
FROM entities e1
JOIN relations r ON e1.id = r.target_id
JOIN entities e2 ON r.source_id = e2.id
WHERE e1.name = 'Rust';

性能指标

  • 单次查询:< 50ms(P95,SQLite)
  • 单次查询:< 20ms(P95,Neo4j)
  • 可视化导出:< 200ms(1000 节点)

4. 记忆整合器(Consolidator)

核心功能:对话摘要化为向量嵌入,形成长期记忆

触发条件

  1. 对话消息数 > 10 条
  2. 距上次整合时间 > 1 小时

执行流程

1. 读取最近 N 条对话(默认 20 条)
   ↓
2. 构造摘要 Prompt:
   "请总结以下对话的关键信息和结论:[对话内容]"
   ↓
3. 调用 LLM 生成摘要(150-300 字)
   ↓
4. 使用 FastEmbed 生成向量(384 维)
   ↓
5. 写入向量存储(带元数据:session_id, timestamp)
   ↓
6. 清理工作记忆(保留最近 5 条)

技术细节

  • 异步执行:不阻塞主流程
  • 失败重试:最多 3 次
  • 成本控制:使用 gpt-4o-mini 或本地模型

性能指标

  • 单次整合:2-5s
  • 内存节省:约 70%(20 条 → 1 条摘要)

📚 RAG 知识引擎

Crablet 实现了完整的 检索增强生成(RAG) 流水线:

文档输入
   ↓
[文档加载器] → PDF/TXT/Markdown
   ↓
[智能分块器] → RecursiveCharacterSplitter
   ↓
[向量嵌入器] → FastEmbed (BGE-M3, 384 维)
   ↓
[向量存储] → SQLite (中小规模) / Qdrant (大规模)
   ↓
[检索器] → 余弦相似度 Top-K
   ↓
[重排序器] → FastEmbed BGE Reranker
   ↓
[上下文注入] → LLM Prompt

1. 智能分块策略

核心实现:RecursiveCharacterSplitter

分隔符优先级

  1. 段落分隔符(\n\n
  2. 换行符(\n
  3. 句号(.
  4. 空格(
  5. 字符级别

关键参数

参数 默认值 说明
chunk_size 512 单块最大 Token 数
chunk_overlap 50 重叠 Token 数(保持上下文连贯)
separators ["\n\n", "\n", ". "] 分隔符优先级

示例

// 输入文档(1000 tokens)
let doc = "Rust is a systems programming language...[长文本]";

// 分块配置
let chunker = RecursiveCharacterChunker::new(512, 50);

// 输出:3 个 chunk
// Chunk 1: tokens 0-512
// Chunk 2: tokens 462-974  (overlap 50)
// Chunk 3: tokens 924-1000 (overlap 50)

性能指标

  • 分块速度:约 10MB/s
  • 时间复杂度:O(n),n 为输入文本长度

2. 向量嵌入与存储

嵌入模型:FastEmbed All-MiniLM-L6-v2

技术细节

  • 维度:384 维
  • 最大长度:512 tokens
  • 模型大小:约 90MB
  • 推理速度:约 100 文档/秒(CPU)

向量存储

后端 适用场景 性能 部署复杂度
SQLite < 10 万文档 检索 < 50ms ⭐ 简单(无需额外服务)
Qdrant > 10 万文档 检索 < 20ms ⭐⭐⭐ 需要独立部署

SQLite 实现

-- 文档表
CREATE TABLE documents (
    id TEXT PRIMARY KEY,
    content TEXT NOT NULL,
    metadata TEXT,                   -- JSON: {"source", "page", ...}
    embedding BLOB NOT NULL          -- 384 维向量(二进制)
);

-- 相似度查询(应用层实现)
SELECT id, content, metadata,
       cosine_similarity(embedding, ?) AS score
FROM documents
ORDER BY score DESC
LIMIT 10;

检索流程

// 1. 用户查询向量化
let query_embedding = embedder.embed("Rust 异步编程")?;

// 2. 从数据库加载所有向量(内存缓存)
let all_docs = vector_store.load_all()?;

// 3. 计算余弦相似度
let mut scores = vec![];
for doc in all_docs {
    let score = cosine_similarity(&query_embedding, &doc.embedding);
    scores.push((doc, score));
}

// 4. 排序并返回 Top-K
scores.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap());
let top_k = scores.into_iter().take(10).collect();

性能指标

  • 检索复杂度:O(N·D),N 为文档数,D 为向量维度
  • 实际性能:
    • 1000 文档:< 10ms
    • 10000 文档:< 50ms
    • 100000 文档:< 500ms(建议切换到 Qdrant)

3. 重排序器(Reranker)

核心功能:对初步检索的 Top-K 结果进行语义相关性重排

技术实现:FastEmbed BGE Reranker

执行流程

初步检索 Top-K(如 20 条)
   ↓
重排序器计算 (query, doc) 相关性分数
   ↓
重新排序
   ↓
返回最终 Top-N(如 5 条)

性能提升

  • 准确率提升:约 15-20%
  • 额外延迟:约 100-200ms

最佳实践

  • 初步检索 Top-20,重排后取 Top-5
  • 仅在对精度要求高的场景启用

4. PDF 文档处理

核心功能:自动提取 PDF 文本

技术实现:pdf-extract 库

支持格式

  • ✅ 纯文本 PDF
  • ✅ 扫描件 OCR(需额外配置 Tesseract)
  • ❌ 复杂排版(表格/多列)

错误处理

  • 提取失败时返回详细错误信息
  • 支持分页提取(避免内存溢出)

使用示例

# 提取 PDF 并写入知识库
crablet knowledge extract --file document.pdf

# 查询知识库
crablet knowledge query "Rust 所有权模型"

🛠️ 工具系统

Crablet 提供了丰富的内置工具和扩展机制:

内置工具列表

工具 功能 安全机制 执行超时
bash Shell 命令执行 白名单 + 危险命令拦截 30s
file 文件读写/列举 路径穿越防护 10s
http HTTP 请求 User-Agent 强制设置 30s
search 网络搜索 Serper API / DuckDuckGo 10s
vision 图像分析 LLM 多模态 API 15s
browser 无头浏览器 headless Chrome,资源限制 60s
mcp MCP 协议 进程隔离 30s
manager 技能管理 Git 克隆 + Manifest 校验 60s
demo 演示工具 沙箱执行 5s

工具详细说明

1. Bash Shell 工具

核心功能:执行 Shell 命令

安全策略

// 白名单命令(Strict 模式)
const SAFE_COMMANDS: &[&str] = &[
    "ls", "cat", "echo", "grep", "find", "pwd", 
    "whoami", "date", "wc", "head", "tail"
];

// 危险命令(总是拦截)
const DANGEROUS_COMMANDS: &[&str] = &[
    "rm", "mv", "dd", "chmod", "chown", 
    "sudo", "su", "ssh", "scp", "curl", "wget"
];

三种安全级别

级别 行为 适用场景
Strict 仅允许白名单命令,危险命令直接拒绝 生产环境
Permissive 允许执行但记录告警 开发/测试
Disabled 无限制 本地实验(不推荐)

使用示例

# 安全命令(允许)
$ crablet run "列出当前目录文件"
→ 执行: ls -la

# 危险命令(拦截)
$ crablet run "删除所有文件"
→ 拒绝: rm 命令被安全策略拦截

2. File 文件工具

核心功能

  • 读取文件内容
  • 写入文件内容
  • 列举目录
  • 创建/删除文件

安全防护

// 路径穿越检测
fn is_path_traversal(path: &str) -> bool {
    path.contains("..") || path.contains("~")
}

// 禁止访问的路径
const FORBIDDEN_PATHS: &[&str] = &[
    "/etc/passwd", "/etc/shadow", 
    "~/.ssh", "~/.aws"
];

使用示例

# 读取文件
$ crablet run "读取 README.md 内容"
→ 执行: file_read("README.md")

# 写入文件
$ crablet run "将 'Hello World' 写入 output.txt"
→ 执行: file_write("output.txt", "Hello World")

# 路径穿越攻击(拦截)
$ crablet run "读取 ../../etc/passwd"
→ 拒绝: 路径穿越攻击被检测

3. Web Search 工具

核心功能:网络搜索,自动选择最优搜索引擎

支持引擎

  1. Serper API(优先):需要 SERPER_API_KEY,质量最高
  2. DuckDuckGo(回退):免费但限流

执行流程

async fn web_search(query: &str) -> Result<String> {
    // 1. 优先尝试 Serper
    if let Ok(api_key) = env::var("SERPER_API_KEY") {
        return serper_search(query, &api_key).await;
    }
    
    // 2. 回退到 DuckDuckGo
    duckduckgo_search(query).await
}

返回格式

{
  "results": [
    {
      "title": "Rust Programming Language",
      "url": "https://www.rust-lang.org",
      "snippet": "Rust is a systems programming language..."
    }
  ]
}

4. Vision 视觉工具

核心功能:图像分析与描述

技术实现

  1. 读取图像文件(支持 PNG/JPG/GIF)
  2. Base64 编码
  3. 调用 OpenAI Vision API(gpt-4o / gpt-4o-mini)
  4. 返回图像描述

使用示例

# 分析图像
$ crablet run "分析 screenshot.png 中的内容"
→ 输出: "这是一个代码编辑器的截图,显示了 Rust 代码..."

成本优化

  • 图像自动压缩到 1024x1024
  • 使用 gpt-4o-mini(成本降低 10 倍)

🔌 MCP 协议支持

Crablet 完整实现了 Model Context Protocol(Anthropic 提出的 AI 工具互操作标准):

支持能力

  • Tools:注册和调用外部 MCP 工具
  • Resources:读取 MCP 资源(文件、数据库等)
  • Prompts:加载 MCP 提示模板

配置示例

# config.toml
[mcp_servers]
math_server = { 
    command = "python3", 
    args = ["mcp_server.py"] 
}
data_server = { 
    command = "node", 
    args = ["data-mcp.js"] 
}

执行流程

Crablet 启动
   ↓
读取 config.toml
   ↓
启动所有 MCP 服务器(subprocess)
   ↓
发送 initialize 请求
   ↓
接收工具列表
   ↓
注册到 SkillRegistry
   ↓
用户可通过 ReAct 引擎调用

MCP 工具调用示例

# 调用 MCP 数学服务器
$ crablet run "计算 123 * 456"
→ ReAct 识别到 math_server.calculate 工具
→ 执行: mcp_call("math_server", "calculate", {"expr": "123 * 456"})
→ 返回: 56088

🎨 技能系统

Crablet 支持多种技能格式,实现跨语言工具生态:

支持的技能类型

  1. 可执行技能(skill.yaml)
  2. OpenClaw 指令型技能(SKILL.md)
  3. MCP 工具(通过 MCP 协议)
  4. 原生 Rust 插件(实现 Plugin trait)

1. 可执行技能(Python/Node.js/Shell)

Manifest 格式(skill.yaml):

name: weather
description: Get current weather for a city using OpenMeteo API
version: 1.0.0
parameters:
  type: object
  properties:
    city:
      type: string
      description: The city to get weather for
  required: [city]
entrypoint: python3 weather.py
timeout: 10
env:
  API_KEY: ${OPENMETEO_API_KEY}

Python 实现示例

# weather.py
import sys
import json
import requests

def main():
    # 1. 从命令行读取参数
    args = json.loads(sys.argv[1])
    city = args["city"]
    
    # 2. 调用 OpenMeteo API
    response = requests.get(
        f"https://api.open-meteo.com/v1/forecast?city={city}"
    )
    data = response.json()
    
    # 3. 输出 JSON 结果到 stdout
    print(json.dumps({
        "temperature": data["current"]["temperature"],
        "condition": data["current"]["condition"]
    }))

if __name__ == "__main__":
    main()

安装与使用

# 从 Git 仓库安装
$ crablet skill install https://github.com/user/weather-skill.git

# 列出已安装技能
$ crablet skill list
→ weather (v1.0.0) - Get current weather

# 使用技能
$ crablet run "查询北京天气"
→ ReAct 识别到 weather 技能
→ 执行: weather(city="北京")
→ 返回: {"temperature": 15, "condition": ""}

2. OpenClaw 指令型技能

Manifest 格式(SKILL.md):

---
name: python-expert
description: Expert Python coding assistant with best practices
version: 1.0.0
metadata:
  openclaw: true
  category: programming
---

You are a Python expert. Always follow these guidelines:

1. **Use type hints**: All functions must have type annotations
2. **Write docstrings**: Use Google style docstrings
3. **Follow PEP 8**: Use black for formatting
4. **Use meaningful names**: Variables should be descriptive

Example:
\```python
def calculate_average(numbers: list[float]) -> float:
    """Calculate the average of a list of numbers.
    
    Args:
        numbers: A list of floating point numbers
        
    Returns:
        The average of the input numbers
    """
    return sum(numbers) / len(numbers)
\```

使用方式

OpenClaw 技能不是可执行的,而是注入到 System Prompt 中,影响 LLM 的行为。

# 激活技能
$ crablet skill activate python-expert

# 之后的所有编程相关查询都会遵循该技能的指导原则
$ crablet run "写一个计算斐波那契数列的函数"
→ 输出带有类型提示和文档字符串的 Python 代码

3. 技能热重载

核心功能:监听技能目录变化,自动重新加载

技术实现

use notify::{Watcher, RecursiveMode, Event};

pub async fn watch_skills(registry: Arc<SkillRegistry>) {
    let (tx, rx) = mpsc::channel();
    
    // 创建文件监听器
    let mut watcher = notify::watcher(tx, Duration::from_millis(500))
        .expect("Failed to create watcher");
    
    watcher.watch("skills/", RecursiveMode::Recursive)
        .expect("Failed to watch skills directory");
    
    // 处理文件变更事件
    while let Ok(event) = rx.recv() {
        match event {
            Event::Modify(_) | Event::Create(_) => {
                info!("Skill changed, reloading...");
                registry.reload().await;
            }
            _ => {}
        }
    }
}

去抖策略:500ms 防抖,避免频繁重载

最佳实践

  • 开发环境启用热重载
  • 生产环境禁用(使用固定版本)

🌐 多平台接入

Crablet 支持通过统一 Channel trait 接入多个平台:

平台 状态 协议 维护者
CLI stdin/stdout 官方
Web UI HTTP + WebSocket 官方
Telegram Telegram Bot API 官方
Discord Discord Gateway 官方
飞书 🚧 飞书开放平台 规划中
钉钉 🚧 钉钉开放平台 规划中
HTTP Webhook HTTP POST 官方

CLI 命令行接口

核心命令

# 1. 交互式聊天
crablet chat

# 2. 单次执行
crablet run "查询今天天气"

# 3. 启动 Web 服务
crablet serve-web --port 3000

# 4. 启动网关服务
crablet gateway --port 18789

# 5. 技能管理
crablet skill list
crablet skill install <git-url>
crablet skill create <name>

# 6. 知识管理
crablet knowledge extract --file document.pdf
crablet knowledge query "Rust 所有权"

# 7. 系统状态
crablet status

# 8. 脚本执行
crablet script run script.lua

Web UI

技术栈

  • 后端:Axum (Rust Web 框架)
  • 模板引擎:Askama(Rust 原生,零运行时开销)
  • 前端交互:HTMX(无需 JavaScript 框架)
  • 实时通信:WebSocket + SSE

核心功能

  1. 聊天界面:支持 Markdown 渲染
  2. Canvas 画布:可视化 Agent 思维链
  3. 技能管理:安装/卸载/激活技能
  4. 知识库管理:上传文档/查询知识
  5. 系统监控:实时性能指标

启动方式

crablet serve-web --port 3000
# 访问: http://localhost:3000

Telegram Bot

集成库:teloxide

支持功能

  • 文本消息处理
  • 内联键盘交互
  • 文件上传/下载
  • 群组支持

配置方式

# 设置 Bot Token
export TELEGRAM_BOT_TOKEN=<your-token>

# 启动 Telegram 通道
crablet channel start telegram

Discord Bot

集成库:serenity

支持功能

  • Slash 命令
  • 嵌入消息(Embed)
  • 按钮交互
  • 服务器/频道管理

配置方式

# 设置 Bot Token
export DISCORD_BOT_TOKEN=<your-token>

# 启动 Discord 通道
crablet channel start discord

🔒 安全系统

Crablet 实现了多层安全防护机制:

┌────────────────────────────────────────────────────────────┐
│                        安全架构                              │
├────────────────────────────────────────────────────────────┤
│  输入层                                                      │
│  ├─ 输入长度限制 (默认 10000 字符)                           │
│  ├─ 越狱 Prompt 检测                                        │
│  └─ 恶意 Payload 过滤                                       │
├────────────────────────────────────────────────────────────┤
│  执行层                                                      │
│  ├─ 命令白名单 (Strict 模式)                                │
│  ├─ 危险命令拦截 (rm/sudo/ssh...)                           │
│  ├─ 路径穿越防护 (..)                                       │
│  └─ 资源限制 (CPU/内存/超时)                                │
├────────────────────────────────────────────────────────────┤
│  沙箱层                                                      │
│  ├─ Docker 容器隔离                                         │
│  ├─ 网络隔离                                                │
│  └─ 文件系统只读                                            │
└────────────────────────────────────────────────────────────┘

安全 Oracle

核心功能:命令与路径校验

三种策略

pub enum SafetyLevel {
    Strict,      // 严格模式:仅白名单
    Permissive,  // 宽松模式:警告但允许
    Disabled,    // 禁用模式:不检查
}

策略对比

命令 Strict Permissive Disabled
ls -la ✅ 允许 ✅ 允许 ✅ 允许
cat /etc/passwd ❌ 拒绝 ⚠️ 警告+允许 ✅ 允许
rm -rf / ❌ 拒绝 ❌ 拒绝 ❌ 拒绝
sudo su ❌ 拒绝 ❌ 拒绝 ❌ 拒绝

配置方式

# config.toml
[safety]
level = "Strict"  # Strict / Permissive / Disabled

# 自定义白名单
allowed_commands = ["ls", "cat", "echo", "grep", "custom-tool"]

# 自定义黑名单
blocked_commands = ["rm", "mv", "dd"]

Docker 沙箱

核心功能:基于 Docker 的隔离执行环境

支持运行时

  • Python 3.11
  • Node.js 20 LTS
  • Shell (bash)

资源限制

# 容器配置
limits:
  cpu: 1.0           # 1 核
  memory: 512MB      # 512MB 内存
  timeout: 30s       # 30 秒超时
  network: none      # 禁用网络
  filesystem: ro     # 文件系统只读

执行流程

async fn execute_in_sandbox(code: &str, lang: &str) -> Result<String> {
    // 1. 创建临时容器
    let container = docker.create_container(
        "crablet-sandbox",
        &ContainerConfig {
            image: format!("crablet-{}", lang),
            limits: ResourceLimits::default(),
        }
    ).await?;
    
    // 2. 写入代码
    container.write_file("/tmp/code", code).await?;
    
    // 3. 执行
    let output = container.exec(format!("{} /tmp/code", lang)).await?;
    
    // 4. 清理
    container.remove().await?;
    
    Ok(output)
}

📊 可观测性

Crablet 基于 OpenTelemetry (OTLP) 实现全链路追踪:

UserInput
   ↓
[Span: cognitive_router]
   ├─ [Span: system1_check]
   ├─ [Span: complexity_evaluation]
   └─ [Span: system2_process]
       ├─ [Span: middleware_pipeline]
       │   ├─ [Span: safety_check]
       │   ├─ [Span: cost_guard]
       │   ├─ [Span: semantic_cache]
       │   ├─ [Span: planning]
       │   ├─ [Span: rag_retrieval]
       │   └─ [Span: skill_context]
       └─ [Span: react_engine]
           ├─ [Span: llm_call] → attributes: model, tokens, latency
           ├─ [Span: tool_execution] → attributes: tool, args, result
           └─ [Span: memory_update]

监控指标

指标 说明 聚合方式
crablet.request.duration 请求总延迟 Histogram
crablet.llm.tokens Token 消耗 Counter
crablet.llm.cost API 调用成本 Counter
crablet.tool.execution.count 工具调用次数 Counter
crablet.memory.size 内存占用 Gauge
crablet.cache.hit_rate 缓存命中率 Gauge

集成方案

# config.toml
[telemetry]
enabled = true
endpoint = "http://localhost:4317"  # OTLP gRPC endpoint
service_name = "crablet"

可视化工具

  • Jaeger:分布式追踪
  • Grafana + Tempo:追踪 + 可视化
  • Prometheus + Grafana:指标监控

🚀 快速开始

前置要求

  • Rust 1.80+ (推荐通过 rustup 安装)
  • Docker(可选,用于沙箱和 Neo4j)
  • Git

安装方式

方式一:从源码构建

# 1. 克隆项目
git clone https://github.com/yourusername/crablet.git
cd crablet

# 2. 最小构建(仅 CLI + Web,约 5 分钟)
cargo build --release --no-default-features --features web

# 3. 完整构建(包含所有功能,约 15-20 分钟)
cargo build --release

# 4. 初始化
./target/release/crablet init

构建优化:安装 sccache 加速编译:

cargo install sccache
export RUSTC_WRAPPER=sccache

方式二:Docker 一键部署

# 1. 设置环境变量
export OPENAI_API_KEY=sk-xxx

# 2. 启动所有服务
docker-compose up -d

# 3. 访问 Web UI
open http://localhost:3000

docker-compose.yml

version: '3.8'

services:
  crablet:
    image: crablet:latest
    ports:
      - "3000:3000"      # Web UI
      - "18789:18789"    # Gateway
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - DATABASE_URL=sqlite:///data/crablet.db
    volumes:
      - ./data:/data
      - ./skills:/skills
    depends_on:
      - neo4j
  
  neo4j:
    image: neo4j:5
    ports:
      - "7474:7474"      # Web UI
      - "7687:7687"      # Bolt
    environment:
      - NEO4J_AUTH=neo4j/password
    volumes:
      - neo4j_data:/data

volumes:
  neo4j_data:

配置

环境变量方式

# OpenAI(推荐)
export OPENAI_API_KEY=sk-xxx

# 或阿里云 DashScope(国内推荐)
export DASHSCOPE_API_KEY=sk-xxx
export OPENAI_API_BASE=https://dashscope.aliyuncs.com/compatible-mode/v1

# 或本地 Ollama(隐私优先)
export OLLAMA_MODEL=llama3

# 搜索 API(可选)
export SERPER_API_KEY=xxx

配置文件方式

创建 ~/.config/crablet/config.toml

# 数据库
database_url = "sqlite:crablet.db?mode=rwc"

# LLM 配置
model_name = "gpt-4o-mini"
max_tokens = 4096
temperature = 0.7

# 日志
log_level = "info"  # trace/debug/info/warn/error

# 安全
[safety]
level = "Strict"  # Strict/Permissive/Disabled

# MCP 服务器
[mcp_servers]
math_server = { command = "python3", args = ["mcp_server.py"] }

# 技能目录
skills_dir = "skills"

# Feature Flags
[features]
knowledge = true
audio = false
scripting = true
telemetry = true
sandbox = false

基本使用

# 1. 交互式聊天
crablet chat

# 2. 单次执行
crablet run "查询北京今天天气"

# 3. 启动 Web 服务
crablet serve-web --port 3000

# 4. 启动网关(WebSocket + JSON-RPC)
crablet gateway --port 18789

# 5. 技能管理
crablet skill list
crablet skill install https://github.com/user/my-skill.git
crablet skill create weather

# 6. 知识管理
crablet knowledge extract --file document.pdf
crablet knowledge query "Rust 所有权模型"

# 7. 系统状态
crablet status

# 8. 运行 Lua 脚本
crablet script run examples/scripts/summarize_paper.lua

🏗️ 架构设计

系统总览

┌───────────────────────────────────────────────────────────────┐
│                       接入层 (Channels)                        │
│   CLI │ Web UI │ Telegram │ Discord │ Webhook │ MCP           │
└────────────────────────┬──────────────────────────────────────┘
                         │
┌────────────────────────▼──────────────────────────────────────┐
│                   网关 (Gateway - Axum)                        │
│    WebSocket │ HTTP API │ JSON-RPC │ Auth │ Session            │
└────────────────────────┬──────────────────────────────────────┘
                         │
┌────────────────────────▼──────────────────────────────────────┐
│                  事件总线 (EventBus)                           │
│              Tokio Broadcast Channel                           │
└────────────────────────┬──────────────────────────────────────┘
                         │
┌────────────────────────▼──────────────────────────────────────┐
│               认知路由器 (Cognitive Router)                     │
│          复杂度评估 → 智能分发 → 自动降级                        │
├──────────────┬─────────────────────┬─────────────────────────┤
│              │                     │                         │
│  ┌───────────▼──────┐  ┌──────────▼────────┐  ┌─────────▼──────┐
│  │   System 1       │  │    System 2       │  │   System 3     │
│  │   直觉响应        │  │    深度分析        │  │   群体协作      │
│  │   Trie + 模糊     │  │  中间件 → ReAct   │  │  Swarm 通信    │
│  └──────────────────┘  └───────────────────┘  └────────────────┘
│                                  │
├──────────────────────────────────▼───────────────────────────┤
│                        共享基础设施                            │
├────────────┬────────────┬────────────┬────────────┬──────────┤
│  记忆系统   │  知识引擎   │  工具注册   │  安全体系   │ 技能系统 │
│  Memory    │   RAG      │  Tools     │  Safety    │ Skills   │
└────────────┴────────────┴────────────┴────────────┴──────────┘

项目结构

crablet/
├── src/
│   ├── main.rs                   # 入口
│   ├── lib.rs                    # 库模块注册
│   ├── config.rs                 # 配置管理
│   ├── types.rs                  # 核心类型
│   ├── events.rs                 # 事件总线
│   ├── error.rs                  # 错误类型
│   ├── telemetry.rs              # OpenTelemetry 初始化
│   ├── plugins.rs                # 插件系统
│   │
│   ├── cognitive/                # 认知核心
│   │   ├── router.rs             # 认知路由器
│   │   ├── system1.rs            # System 1 实现
│   │   ├── system2.rs            # System 2 实现
│   │   ├── system3.rs            # System 3 实现
│   │   ├── react.rs              # ReAct 引擎
│   │   ├── middleware.rs         # 中间件流水线
│   │   ├── planner/              # 任务规划器
│   │   ├── classifier.rs         # 意图分类器
│   │   └── llm/                  # LLM 客户端
│   │       ├── mod.rs            # OpenAI / Ollama
│   │       ├── cache.rs          # LRU 缓存
│   │       ├── kimi.rs           # Moonshot Kimi
│   │       └── zhipu.rs          # 智谱 GLM
│   │
│   ├── memory/                   # 记忆系统
│   │   ├── working.rs            # 工作记忆
│   │   ├── episodic.rs           # 情节记忆
│   │   ├── semantic.rs           # 语义记忆
│   │   └── consolidator.rs       # 记忆整合器
│   │
│   ├── knowledge/                # 知识引擎 [feature: knowledge]
│   │   ├── chunking.rs           # 文档分块
│   │   ├── vector_store.rs       # 向量存储
│   │   ├── reranking.rs          # 重排序器
│   │   ├── extractor.rs          # 知识抽取
│   │   └── pdf.rs                # PDF 处理
│   │
│   ├── tools/                    # 工具插件
│   │   ├── manager.rs            # 技能管理工具
│   │   ├── bash.rs               # Shell 执行
│   │   ├── file.rs               # 文件操作
│   │   ├── search.rs             # 网络搜索
│   │   ├── http.rs               # HTTP 客户端
│   │   ├── vision.rs             # 视觉分析
│   │   ├── browser.rs            # 无头浏览器
│   │   ├── mcp.rs                # MCP 客户端
│   │   └── demo.rs               # 演示工具
│   │
│   ├── skills/                   # 技能系统
│   │   ├── mod.rs                # SkillRegistry 注册表
│   │   ├── openclaw.rs           # OpenClaw 格式加载
│   │   └── watcher.rs            # 热重载监控
│   │
│   ├── agent/                    # Agent 系统
│   │   ├── coordinator.rs        # 协调器
│   │   ├── swarm.rs              # Swarm 消息协议
│   │   ├── researcher.rs         # 研究员 Agent
│   │   ├── factory.rs            # Agent 工厂
│   │   └── task.rs               # 任务定义
│   │
│   ├── channels/                 # 接入通道
│   │   ├── cli/                  # CLI 交互
│   │   ├── web.rs                # Web UI
│   │   ├── domestic/             # 国内平台(飞书/钉钉)
│   │   ├── international/        # 国际平台(Telegram/Discord)
│   │   └── universal/            # 通用协议(Webhook)
│   │
│   ├── gateway/                  # API 网关 [feature: web]
│   │   ├── server.rs             # Axum 服务器
│   │   ├── websocket.rs          # WebSocket 处理
│   │   ├── rpc.rs                # JSON-RPC 调度
│   │   ├── auth.rs               # 认证
│   │   ├── session.rs            # 会话管理
│   │   └── events.rs             # SSE 事件流
│   │
│   ├── safety/                   # 安全系统
│   │   └── oracle.rs             # SafetyOracle
│   │
│   ├── sandbox/                  # 沙箱执行
│   │   ├── docker.rs             # Docker 沙箱
│   │   └── local.rs              # 本地沙箱
│   │
│   └── scripting/                # 脚本引擎 [feature: scripting]
│       ├── engine.rs             # Lua 5.4 引擎
│       └── bindings.rs           # Lua 绑定
│
├── tests/                        # 集成测试(13 个)
├── templates/                    # Web UI 模板(如果存在)
├── config/config.toml            # 默认配置
├── schema.sql                    # 数据库 Schema(如果存在)
├── Dockerfile                    # 多阶段构建
└── docker-compose.yml            # 服务编排

⚙️ Feature Flags(按需裁剪)

Feature 包含内容 默认启用 二进制增量 编译时间
web Web UI + API 网关(Axum + Askama) +2MB +30s
knowledge RAG + 向量存储 + Neo4j + Qdrant +15MB +3min
audio 语音识别(Whisper)+ TTS +8MB +2min
scripting Lua 5.4 脚本引擎 +1MB +10s
telemetry OpenTelemetry 追踪 +500KB +20s
sandbox Docker 沙箱执行 +3MB +1min
telegram Telegram Bot 接入 +2MB +30s
discord Discord Bot 接入 +3MB +30s
browser 无头浏览器自动化 +5MB +1min
vision 视觉分析能力 +500KB +10s

自定义构建示例

# 最小构建(仅 CLI,约 5MB)
cargo build --release --no-default-features

# 轻量 Web 部署(CLI + Web,约 10MB)
cargo build --release --no-default-features --features web

# 完整构建(所有功能,约 40MB)
cargo build --release

📊 性能基准测试

System 1 响应时间

查询类型 响应时间 命中率
简单问候("你好") < 5ms 95%
帮助查询("帮助") < 10ms 90%
状态查询("状态") < 15ms 85%

System 2 响应时间

场景 平均延迟 P95 延迟 P99 延迟
简单查询(无工具调用) 1.2s 2.5s 4.0s
单次工具调用 2.8s 5.2s 8.0s
多次工具调用(2-3 步) 5.5s 10.0s 15.0s
复杂推理(3-5 步) 8.2s 15.0s 20.0s

向量检索性能

文档数量 检索时间 内存占用
1,000 < 10ms 50MB
10,000 < 50ms 200MB
100,000 < 500ms 1.5GB

缓存命中率

缓存类型 命中率 内存占用
System 1 Trie 缓存 30-40% < 1MB
LLM 响应缓存 20-30% 50MB
语义缓存 10-15% 100MB

📚 开发指南

环境搭建

# 1. 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# 2. 安装 sccache(可选,加速编译)
cargo install sccache
export RUSTC_WRAPPER=sccache

# 3. 安装 Docker(可选,用于沙箱)
# macOS
brew install --cask docker
# Linux
curl -fsSL https://get.docker.com | sh

# 4. 克隆项目
git clone https://github.com/yourusername/crablet.git
cd crablet

# 5. 最小化构建
cargo build --no-default-features --features web

代码规范

# 格式化
cargo fmt

# 代码检查
cargo clippy -- -D warnings

# 运行测试
cargo test --release

# 覆盖率测试(需要 cargo-tarpaulin)
cargo tarpaulin --out Html

贡献方向

1. 新增工具插件

// src/tools/my_tool.rs
use crate::plugins::Plugin;

pub struct MyTool;

#[async_trait]
impl Plugin for MyTool {
    fn name(&self) -> &str {
        "my_tool"
    }
    
    fn description(&self) -> &str {
        "Description of my tool"
    }
    
    async fn execute(&self, input: &str) -> Result<String> {
        // 工具逻辑
        Ok("result".to_string())
    }
}

2. 新增中间件

// src/cognitive/middleware.rs
#[async_trait]
impl CognitiveMiddleware for MyMiddleware {
    async fn process(
        &self,
        context: &mut CognitiveContext
    ) -> Result<MiddlewareAction> {
        // 中间件逻辑
        Ok(MiddlewareAction::Continue)
    }
}

3. 新增 LLM 适配器

// src/cognitive/llm/my_llm.rs
#[async_trait]
impl LlmClient for MyLlmClient {
    async fn chat_complete(
        &self,
        messages: &[Message]
    ) -> Result<String> {
        // LLM 调用逻辑
        Ok("response".to_string())
    }
}

🚢 部署运维

Docker 部署

# 构建镜像
docker build -t crablet:latest .

# 运行容器
docker run -d \
  --name crablet \
  -p 3000:3000 \
  -e OPENAI_API_KEY=sk-xxx \
  -v ./data:/data \
  -v ./skills:/skills \
  crablet:latest

生产环境配置

# config.toml (生产环境)
database_url = "postgresql://user:pass@localhost/crablet"
log_level = "warn"

[safety]
level = "Strict"

[telemetry]
enabled = true
endpoint = "http://tempo:4317"

[limits]
max_concurrent_requests = 100
request_timeout = 30

监控集成

# docker-compose.yml (含监控)
version: '3.8'

services:
  crablet:
    image: crablet:latest
    ports:
      - "3000:3000"
    environment:
      - OTEL_EXPORTER_OTLP_ENDPOINT=http://tempo:4317
  
  tempo:
    image: grafana/tempo:latest
    ports:
      - "4317:4317"
  
  grafana:
    image: grafana/grafana:latest
    ports:
      - "3001:3000"
    volumes:
      - ./grafana/dashboards:/etc/grafana/provisioning/dashboards

📊 项目统计

指标 数值
Rust 源码 10,765 行(105 个文件)
集成测试 13 个测试文件
单元测试 50+ 测试用例
核心模块 11 个
内置工具 9+
内置技能 4 个示例
依赖项 71 个 crate
Feature Flags 10 个
支持平台 macOS / Linux / Windows
文档覆盖率 90%+

🗺️ 路线图

✅ 已完成(v0.1.0)

  • 三层认知架构(System 1/2/3)
  • ReAct 推理引擎 + 中间件流水线
  • 多层记忆系统(Working / Episodic / Semantic)
  • RAG 知识引擎(分块 + 向量 + 重排序 + 图谱)
  • 技能系统(OpenClaw + 可执行 + 热重载)
  • MCP 协议支持
  • Web UI(Chat + Canvas)
  • 多模态(视觉)
  • Docker 沙箱执行
  • OpenTelemetry 可观测性
  • 多平台接入(CLI / Web / Telegram / Discord)

🚧 进行中(v0.2.0)

  • Swarm 多 Agent 协作增强
  • 企业级认证与多租户
  • 工作流可视化编排
  • 前端重构(React + shadcn/ui)
  • 音频处理(Whisper + TTS)

📅 规划中(v0.3.0+)

  • 技能市场(发布、搜索、安装、评分)
  • 云服务 SaaS 版本
  • 更多国内平台接入(飞书、钉钉、企微)
  • 分布式 Agent 集群
  • GraphRAG(图增强检索)
  • 自动化测试覆盖率 > 80%

详细路线图请查看 ROADMAP.md


👥 参与贡献

欢迎所有形式的贡献!请参阅 CONTRIBUTING.md 获取详细指南。

快速开始

# 1. Fork 并克隆
git clone https://github.com/your-username/crablet.git

# 2. 创建分支
git checkout -b feature/my-feature

# 3. 开发并测试
cargo test --release

# 4. 提交 PR
git push origin feature/my-feature

📄 许可证

本项目基于 MIT License 开源。

Copyright (c) 2026 Hertz


🙏 致谢

Crablet 的开发受到了以下项目的启发:


📞 联系方式


**用 Rust 和热爱构建 | Crablet - 让 AI Agent 快如闪电 ⚡️**

Star History Contributors

Made with ❤️ by the Crablet Team

About

🦀🦀🦀Crablet: Next-gen AI Assistant

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Rust 89.7%
  • HTML 9.8%
  • Dockerfile 0.5%