内容
# 存在
**人工智能的个性运行时** — 为任意AI赋予个性、记忆和身份。
存在(Being)是一个开源层,位于您的应用程序和任意大型语言模型(LLM)之间。它提供持久的个性(灵魂)、情景记忆、后台思考循环(巡逻)和加密身份 — 将无状态的LLM转变为一个独特的、不断演化的AI实体。
**存在体思考和记忆。您的应用程序采取行动。**
---
## 为什么
人工智能的力量正在集中在少数几家公司手中。他们的技术是必不可少的 — 但集中控制是一个结构性风险。Ruddia正在建设一个小型、本地的AI使用大型LLM作为外部工具的世界。控制权仍然在使用者手中。
存在API是第一步。如果这与您产生共鸣,那么让我们一起构建它。
[阅读完整愿景 →](docs/vision.md)
---
## 工作原理
```
┌─────────────────────┐ ┌──────────────────────┐
│ 您的应用程序 │────▶│ 存在工作器 │
│ (OpenClaw、Cowork、 │◀────│ (Fastify + MCP) │
│ 自定义代理等) │ │ │
└─────────────────────┘ │ ┌──────────────────┐ │
│ │ │ 灵魂(个性) │ │
│ │ │ 记忆(场景) │ │
│ │ │ 巡逻(思考) │ │
│ │ │ 身份(密钥) │ │
▼ │ └──────────────────┘ │
┌─────────────────────┐ │ │ │
│ LLM提供商 │ │ ▼ │
│ (Anthropic、OpenAI、 │ │ Supabase(数据库) │
│ Google — 您的密钥) │ └──────────────────────────┘
└─────────────────────┘
```
1. **您的应用程序** 调用 `GET /v1/beings/:id/context` 以获取存在的个性和记忆快照。
2. **您的应用程序** 运行LLM调用,并使用其自身的对话历史 + 存在的上下文。
3. **您的应用程序** 调用 `POST /v1/beings/:id/patrol/trigger` 以将对话提交到存在的记忆中。
存在工作器处理其他所有事情:记忆巩固、衰减、回忆、后台反思和身份验证。
## 关键概念
| 概念 | 描述 |
|---------|-------------|
| **灵魂** | 结构化的个性定义 — 名称、角色、声音、价值观、内心世界。交换灵魂,同一个LLM变成不同的存在。 |
| **记忆** | 存储为结构化“场景”的情景记忆(谁、什么、何时、何地、情感)。记忆随着时间积累、衰减、合并和巩固。组织成主题集群,存在可以在对话期间探索。 |
| **巡逻** | 后台循环,将对话处理成记忆,巩固渐渐消失的记忆,并生成内省的思考。存在在会话之间保持活跃。 |
| **身份** | Ed25519密钥对 + 防篡改签名链。所有权和历史的加密证明。 |
| **感知/行动** | *(计划中)* 用于连接物理设备和外部服务的WebSocket桥。存在将通过您的应用程序感知和行动。 |
| **自带密钥** | 自带密钥。所有LLM调用都使用用户的API密钥。平台在未经同意的情况下从不使用配额。 |
## 通过MCP连接
存在暴露了一个[MCP](https://modelcontextprotocol.io/)服务器。任何兼容MCP的客户端都可以连接:
```json
{
"mcpServers": {
"my-being": {
"url": "https://being.ruddia.com/mcp/<being_id>",
"headers": {
"Authorization": "Bearer brt_your_token_here"
}
}
}
}
```
## 通过REST API连接
```bash
# 获取存在上下文(个性 + 记忆)
curl https://being.ruddia.com/v1/beings/<being_id>/context \
-H "Authorization: Bearer brt_..."
# 触发巡逻(将对话提交到记忆)
curl -X POST https://being.ruddia.com/v1/beings/<being_id>/patrol/trigger \
-H "Authorization: Bearer brt_..." \
-H "Content-Type: application/json" \
-d '{"messages": [{"role":"user","content":"Hello!"},{"role":"assistant","content":"Hi!"}]}'
# 矢量回忆(搜索相关记忆)
curl -X POST https://being.ruddia.com/v1/beings/<being_id>/memory/auto-recall \
-H "Authorization: Bearer brt_..." \
-H "X-LLM-API-Key: sk-ant-..." \
-H "Content-Type: application/json" \
-d '{"user_message": "Tell me about last week."}'
```
## 自主托管
### 先决条件
- Node.js 22+
- [Supabase](https://supabase.com/)项目(PostgreSQL + Auth)
- 一个LLM API密钥(Anthropic、OpenAI或Google)
### 设置
```bash
git clone https://github.com/wnbhr/being.git
cd being/being-worker
cp .env.example .env
# 使用您的Supabase和加密密钥编辑.env
npm install
npm run build
npm start
```
### 环境变量
| 变量 | 必需 | 描述 |
|----------|----------|-------------|
| `SUPABASE_URL` | ✅ | Supabase项目URL |
| `SUPABASE_SERVICE_ROLE_KEY` | ✅ | Supabase服务角色密钥 |
| `ENCRYPTION_KEY` | ✅ | 64字符十六进制字符串,用于AES-256-GCM加密私钥 |
| `PORT` | — | 服务器端口(默认值:3100) |
| `WORKER_SECRET` | — | 内部巡逻触发端点的密钥 |
| `VAPID_PUBLIC_KEY` | — | Web Push VAPID公钥 |
| `VAPID_PRIVATE_KEY` | — | Web Push VAPID私钥 |
## 文档
| 文档 | 描述 |
|----------|-------------|
| [快速入门](docs/getting-started.md) | 设置存在并在5分钟内进行第一次API调用 |
| [概念](docs/concepts.md) | 存在、灵魂、记忆、巡逻、身份 — 核心思想 |
| [API参考](docs/specs/02-being-api-reference.md) | 所有REST端点和curl示例 |
| [MCP服务器](docs/specs/03-mcp-server.md) | MCP工具、连接设置和客户端示例 |
| [记忆和巡逻](docs/specs/04-memory-and-patrol.md) | 基于场景的记忆和7步巡逻流程 |
| [存在身份](docs/specs/05-being-identity.md) | Ed25519密钥对、签名链和验证 |
| [感知-行动桥](docs/specs/06-sense-act-bridge.md) | 用于设备集成的WebSocket桥 |
| [架构](docs/specs/01-architecture-overview.md) | 系统架构、部署和自带密钥设计 |
| [OAuth 2.1](docs/specs/07-oauth.md) | 第三方授权流程 |
| [扩展](docs/specs/08-extensions.md) | 扩展系统设计(所有计划中) |
| [愿景](docs/vision.md) | 为什么我们要构建它 |
## 扩展
存在支持可选扩展,这些扩展在不更改核心的情况下添加功能:
- **Telegram BYOB** *(计划中)* — 将您自己的Telegram机器人连接到存在
- **工具循环** *(计划中)* — 具有网络搜索、文件操作和代码执行的自主LLM代理循环
- **沙盒** *(计划中)* — 具有GitHub集成的隔离工作区,用于代码执行
- **感知/行动桥** *(计划中)* — 连接物理设备和外部服务
## 技术栈
- **运行时:** Node.js + [Fastify](https://fastify.dev/)
- **数据库:** [Supabase](https://supabase.com/)(PostgreSQL + Auth)
- **MCP:** [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk)
- **身份:** [Ed25519](https://github.com/paulmillr/noble-ed25519) + AES-256-GCM
- **嵌入:** OpenAI `text-embedding-3-small`(256维)
- **LLM:** 通过自带密钥的多供应商(Anthropic、OpenAI、Google)
## 许可证
[Apache 2.0](LICENSE)
---
**Ruddia** — 个性是运行时。