内容
# 网格
[](https://www.rust-lang.org/)
[](LICENSE)
[中文文档](README.zh.md) | [English](README.md)
**企业级自主代理运行时栈 — 不是框架,不是包装器,而是一层生产级执行层,企业实际部署。**
网格是位于您的LLM提供商和业务逻辑之间的组件。它处理代理在运行时所需的一切:上下文、内存、工具、沙盒、安全策略、审计追踪、调度以及MCP集成 — 所有这些都在一个Rust二进制文件中。没有Python GIL,没有500MB的Docker镜像,也没有“仅在我的笔记本电脑上有效”的问题。
它既可以作为**可替换的L1运行时**(可通过gRPC合约插入任何编排平台),又可以作为**完整的独立产品套件**(CLI、桌面应用、多租户平台、评估框架)。
---
## 网格的不同之处
### 1. 它是一个运行时,而不是框架
该领域的大多数工具都是Python框架,它们封装了LLM API,并附带一些不错的实用程序。网格是一个执行层 — 它从头到尾拥有代理进程。引擎管理代理状态,在每个工具调用时强制执行安全策略,并记录每个决策以供审计。您不需要将网格的API集成到您的代码中;您只需将网格作为您的代理基础设施运行。
### 2. 可替换的设计 — 合同可移植的L1
网格运行时实现了16个方法的gRPC合约,任何符合要求的运行时都可以实现这一点。目前已有**6个比较运行时**(Claude Code、Goose、Nanobot、Pydantic AI、Claw Code、CCB)独立通过相同的`contract-v1.1.0`测试套件。如果您需要切换代理引擎,您可以更换实现,而不是重新集成。运行时层没有供应商锁定。
### 3. 企业级安全,而非检查清单
每个工具调用都会经过具有**每代理自主级别**、命令风险分类和路径白名单的安全策略引擎。沙盒执行支持Docker容器、WASM隔离和原生子进程 — 不受信任的代码永远不会接触主机。每个工具调用、内存访问和会话边界都会持久记录审计事件。这不是一个功能标志;这是默认执行模型。
### 4. 跨会话甚至跨年持久的内存
网格的内存是多层的:**工作内存**(会话内上下文)、**会话内存**(对话历史)、**持久内存**(通过SQLite FTS5 + 基于内存HNSW向量的全文搜索和语义搜索),以及用于结构化关系的**知识图谱**。时间衰减混合检索确保回忆保持相关性,而不会扩大上下文窗口。
### 5. 单个代码库的完整产品套件
| 组件 | 描述 | 适用对象 |
|-----------|-----------|--------------|
| **grid-server** | HTTP/WS工作台,约130个端点,HMAC + JWT认证 | 单用户代理工作台 |
| **grid-cli** | 16命令CLI,完整TUI,流式输出 | 终端原生开发者 |
| **web/** | 8标签React SPA,实时WS流式传输,Markdown | 基于Web的代理交互 |
| **grid-platform** | 多租户服务器,JWT租户隔离,RBAC,配额 | SaaS/企业部署 |
| **web-platform/** | 多租户React UI,会话/仪表板/聊天/设置 | 平台管理员 |
| **grid-desktop** | Tauri 2桌面应用,系统托盘,嵌入式仪表板 | 桌面优先用户 |
| **grid-eval** | 10个评分器,12个测试套件,4个基准测试(GAIA,SWE-bench,τ-bench) | 质量工程 |
所有组件共享一个`grid-engine`核心。修复引擎中的一个错误,所有产品都会受益。
---
## 架构
```
┌──────────────────────────┐
│ 编排层 │
│ (EAASP L2/L3/L4 或您的 │
│ 自己的平台) │
└──────────┬───────────────┘
│ gRPC(16个方法)
┌──────────▼───────────────┐
│ grid-runtime │
│ (L1合约适配器) │
└──────────┬───────────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
┌────▼─────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ 代理 │ │ 上下文 │ │ 调度器 │
│ 循环 │ │ 引擎 │ │ (Cron) │
└────┬─────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
┌────▼─────┐ ┌───────┐ ┌───▼────┐ ┌───────┐ ┌───▼────┐
│ 内存 │ │ MCP │ │ 工具 │ │ 审计 │ │技能 │
│ (4层) │ │ 客户端│ │引擎 │ │记录 │ │注册 │
└────┬─────┘ └───┬───┘ └───┬────┘ └───┬───┘ └───┬────┘
│ │ │ │ │
┌────▼────────────▼──────────▼───────────▼───────────▼────┐
│ 安全策略引擎 │
│ 自主级别 · 风险分类 │
│ 路径白名单 · RBAC │
└─────────────────────────┬─────────────────────────────┘
│
┌─────────────────────────▼─────────────────────────────┐
│ 沙盒路由器 │
│ Docker · WASM · 原生子进程 │
└───────────────────────────────────────────────────────┘
```
引擎通过以下流程处理每个工具调用:**自主检查 → 风险分类 → 策略评估 → 沙盒路由 → 执行 → 审计记录**。这是一个纯粹的流程 — 没有分支,没有可选安全。
---
## 快速开始
```bash
# erequisites: Rust 1.75+, Node.js 18+, 一个API密钥
git clone https://github.com/uukuguy/grid.git && cd grid
cp .env.example .env # 添加ANTHROPIC_API_KEY或OPENAI_API_KEY
make setup # 安装前端依赖
make dev # 后端:3001,前端:5180
```
或使用CLI原生:
```bash
make cli # 构建CLI
make cli-ask # 单个提示:“2+2等于多少?”
make studio-tui # 完整的TUI仪表板
```
---
## 内存架构
网格的内存不是一个附加的向量数据库。它是一个4层系统,专为长期运行的自主代理设计:
| 层级 | 存储 | 检索 | 生命周期 |
|------|---------|-----------|----------|
| **工作** | 内存 | 直接访问 | 单个代理调用 |
| **会话** | 内存 + 日志 | 会话范围查询 | 单个会话 |
| **持久** | SQLite FTS5 + HNSW向量 | 全文 + 语义混合 | 跨会话 |
| **知识图谱** | 实体关系存储 | 图遍历 | 永久 |
持久内存使用**时间衰减混合检索**:最近的记忆会被提升,相关性通过文本匹配、向量相似性和时间的新鲜度加权组合来计算。不会“丢失在中间” — 检索层保持上下文窗口紧密和相关。
---
## MCP集成
完整的模型上下文协议支持 — 不仅仅是一个直通包装器:
- **双重传输**:stdio(本地服务器)和SSE(远程服务器)
- **热重载**:在运行时添加/删除MCP服务器,无需重启代理
- **每个会话的配置**:每个会话可以安装不同的MCP工具集
- **命名空间隔离**:来自不同服务器的工具被命名以避免冲突
```bash
# 在运行时注册新的MCP服务器
grid mcp add --name filesystem --command "npx -y @modelcontextprotocol/server-filesystem /tmp"
```
---
## 安全模型
每个工具调用都会经过:
1. **自主检查** — 该代理是否允许做出此决定?
2. **风险分类** — 影响范围是多少?(低 / 中 / 高 / 严重)
3. **策略评估** — 安全策略是否允许此操作?(路径白名单,网络规则)
4. **沙盒路由** — 在哪里执行?(Docker容器 / WASM虚拟机 / 原生进程)
5. **审计记录** — 发生了什么?(工具名称,参数,结果,持续时间,使用沙盒)
自主层控制需要人类批准的内容:
- **自主**:完全自动,无关
- **半自主**:对高风险/严重风险操作进行关卡
- **监督**:所有工具调用都需要批准
---
## 评估基础设施
`grid-eval`是一个一流的评估框架,而不是一套临时脚本:
```bash
# 运行所有工具调用准确性测试(23个任务,L1-L4难度)
grid eval run --suite tool_calls
# 运行安全策略测试(14个任务,S1-S4)
grid eval run --suite security
# 运行GAIA基准测试(165个任务,3个难度级别)
grid eval run --benchmark gaia
# 比较两次运行
grid eval compare --baseline baseline.json --candidate candidate.json
# 生成Markdown报告
grid eval report --input results/ --output report.md
```
10种评分方法:ExactMatch、ToolCallsMatch、BehaviorPattern、AST结构匹配、LLM-as-Judge、EventSequence(LCS)等。用于CI管道的回归检测。
---
## 技术栈
| 层级 | 选择 | 理由 |
|-------|--------|-----------|
| 运行时 | Rust + Tokio | 内存安全,零成本抽象,异步I/O |
| HTTP/WS | Axum + Tower | 类型安全,可组合的中间件,符合人体工程学的提取器 |
| 数据库 | SQLite(rusqlite,WAL模式) | 零配置,嵌入式,全文搜索FTS5 |
| 向量搜索 | HNSW(内存) | 无外部服务依赖, 比暴力法快150倍 |
| MCP | rmcp | 原生Rust MCP实现,stdio + SSE |
| 沙盒 | Docker(Bollard),WASM(Wasmtime),子进程 | 深度防御,隔离级别 |
| gRPC | tonic + prost | 契约优先协议,类型安全代码生成 |
| 前端 | React 19,TypeScript,Vite,TailwindCSS v4 | 现代,快速,类型安全UI层 |
| 桌面 | Tauri 2 | 原生桌面,Rust后端 + WebView前端 |
| 评估 | GAIA,SWE-bench,τ-bench,12个自定义套件 | 行业基准测试 + 自定义测试覆盖 |
---
## 比较:网格 vs 替代品
| | 网格 | LangChain | CrewAI | AutoGPT |
|---|---|---|---|---|
| **语言** | Rust | Python | Python | Python |
| **运行时模型** | 执行引擎 | 框架胶水 | 框架胶水 | 代理循环 |
| **沙盒** | Docker + WASM + 子进程 | 无内置 | 无内置 | 仅Docker |
| **安全策略** | 每代理自主 + 风险分类 | 无 | 无 | 无 |
| **审计** | 每个工具调用,内存访问,会话事件 | 可选回调 | 无 | 无 |
| **多租户** | JWT隔离 + RBAC + 配额 | 无 | 无 | 无 |
| **内存** | 4层,时间衰减混合检索 | 向量数据库包装器 | 基本 | 基本 |
| **MCP** | 原生(stdio + SSE,热重载) | 包装器 | 包装器 | 无 |
| **契约可移植性** | 16方法gRPC,6个比较运行时 | 无 | 无 | 无 |
| **桌面应用** | Tauri 2原生 | 无 | 无 | 无 |
| **评估框架** | 10个评分器,12个套件,4个基准测试 | LangSmith(SaaS) | 无 | 无 |
| **部署** | 单个二进制文件(`grid`) | pip安装20+依赖 | pip安装 | Docker compose |
网格并不试图成为“LangChain but in Rust”。它是一个完全不同的类别:用于生产环境下的自主代理的运行时平台,而不是用于原型设计的库。
---
## 许可证
MIT — 使用它,fork它,部署它,销售它。没有任何限制。