Skip to main content
Sonzai Docs

OpenClaw 集成

将 OpenClaw 的默认记忆替换为 Sonzai Mind Layer — 为每个智能体提供持久记忆、人格进化、情绪追踪和关系建模。

什么是 OpenClaw?

OpenClaw 是一个用于构建对话式 AI 智能体的开源框架。它采用带有命名插槽(slots)的模块化插件系统,每个插槽控制智能体管道的特定部分。

最重要的插槽是 contextEngine。 这个插件负责决定在每次 LLM 调用之前注入系统提示词的上下文内容。 它控制智能体记住什么、知道什么、以及感受到什么。

插件系统工作原理

OpenClaw 的插件系统类似中间件。每个插件实现生命周期钩子, 在对话轮次的特定节点触发:

bootstrap(sessionId)新聊天会话开始时调用。插件初始化所需的连接或状态。
assemble(messages, tokenBudget)每次 LLM 调用前调用。插件返回 systemPromptAddition — 注入系统提示词的额外上下文。
afterTurn(sessionId)LLM 响应后调用。插件处理对话内容(如提取事实、更新状态)。
compact(sessionId)上下文需要整合时调用(如将短期记忆合并到长期记忆)。
dispose()会话结束时调用。清理连接和状态。

默认情况下,OpenClaw 附带一个基本的上下文引擎,将记忆存储为本地 Markdown 文件。 Sonzai 插件将其替换为 Mind Layer — 无需额外代码即可为智能体提供持久记忆、人格进化、情绪追踪和关系建模。

插件注册机制

安装 @sonzai-labs/openclaw-context 后, 该包会导出一个 register() 函数作为默认导出。 启动时,OpenClaw 加载所有已安装的插件并调用其 register 函数。 我们的插件以 "sonzai" 名称注册上下文引擎工厂:

// @sonzai-labs/openclaw-context 内部(不需要开发者编写)
export default function register(api) {
  api.registerContextEngine("sonzai", () => {
    return new SonzaiContextEngine(client, config);
  });
}

然后在 openclaw.json 中,告诉 OpenClaw 哪个已注册的引擎用于 contextEngine 插槽。 名称 "sonzai" 必须与插件注册的名称匹配:

{
  "plugins": {
    "slots": {
      "contextEngine": "sonzai"    // ← 与 register() 中注册的名称匹配
    },
    "entries": {
      "sonzai": {                  // ← 传递给插件的配置
        "enabled": true,
        "apiKey": "sk-your-api-key",
        "agentId": "your-agent-uuid"
      }
    }
  }
}

流程如下:安装 npm 包 → OpenClaw 发现并调用 register() → 插件以 "sonzai" 注册 → 配置将其分配给 contextEngine 插槽。

为什么使用 Sonzai 作为上下文层?

Sonzai 作为 OpenClaw 的纯上下文引擎。 不再由框架管理自己的记忆文件, 所有对话都流经 Mind Layer — 自动处理事实提取、语义搜索、情绪更新和人格进化。 无需编写任何记忆逻辑,即可获得丰富的结构化上下文。

快速开始

1. 获取 API 密钥

Sonzai 项目设置获取 API 密钥。在设置向导中输入后,它将保存到 openclaw.json 中。

2. 安装插件

# 通过 OpenClaw CLI 安装
openclaw plugins install @sonzai-labs/openclaw-context

# 或直接使用包管理器安装
npm install @sonzai-labs/openclaw-context
# bun add @sonzai-labs/openclaw-context

3. 运行设置向导

设置向导将引导你将 OpenClaw 项目连接到 Mind Layer:

npx @sonzai-labs/openclaw-context setup

向导将:

  • 要求输入 API 密钥(或从环境中检测 SONZAI_API_KEY
  • 询问是否有现有的智能体 ID,或选择名称创建新的
  • 在 Mind Layer 上验证 API 密钥
  • 将 API 密钥和插件配置保存到 openclaw.json

设置完成后,openclaw.json 将如下所示:

{
  "plugins": {
    "slots": {
      "contextEngine": "sonzai"
    },
    "entries": {
      "sonzai": {
        "enabled": true,
        "apiKey": "sk-your-api-key",
        "agentId": "a1b2c3d4-..."
      }
    }
  }
}

API 密钥存储

API 密钥与插件配置一起存储在 openclaw.json 中 — 无需设置环境变量。请确保将 openclaw.json 添加到 .gitignore 以避免提交密钥。

4. 开始聊天

像往常一样启动 OpenClaw。插件注册为 sonzai 上下文引擎并自动接管上下文组装:

openclaw chat

就这样。所有对话现在都流经 Mind Layer — 智能体从第一条消息开始就拥有持久记忆、人格和情绪。

配置参考

所有设置都在 openclaw.json plugins.entries.sonzai 下配置。 环境变量可作为覆盖使用。

选项环境变量覆盖默认值说明
apiKeySONZAI_API_KEY--项目 API 密钥(必填)
agentIdSONZAI_AGENT_ID自动配置预配置的智能体 UUID
baseUrlSONZAI_BASE_URLhttps://api.sonz.ai平台 API 基础 URL
agentName--openclaw-agent自动配置智能体的名称
defaultUserId--owner1:1 会话的备用用户 ID
contextTokenBudget--2000注入上下文的最大 token 数
extractionProvider----事实提取用 LLM 提供商
extractionModel----事实提取用 LLM 模型

禁用上下文来源

可以通过 disable 映射选择性地禁用特定上下文来源。 当你需要 Mind Layer 的记忆功能但不需要情绪追踪, 或者想要减少 token 使用时很有用:

{
  "plugins": {
    "entries": {
      "sonzai": {
        "enabled": true,
        "apiKey": "sk-your-api-key",
        "agentId": "your-agent-uuid",
        "disable": {
          "mood": true,
          "personality": false,
          "relationships": true,
          "memory": false,
          "goals": true,
          "interests": true,
          "habits": true
        }
      }
    }
  }
}

使用上述配置,只会注入人格记忆上下文 — 适合将 Mind Layer 作为纯记忆和人格存储使用。

注入的上下文

每个轮次中,插件会向系统提示词注入一个结构化的 <sonzai-context> 块。各部分按优先级排序, 超出 token 预算时从最低优先级开始移除:

人格1(最高)角色定义、主要特征、说话模式、Big5 人格档案
相关记忆2与最新用户消息语义匹配的已搜索事实
当前情绪34维情绪状态(效价、唤醒度、紧张度、亲和度)
关系4关系叙述、亲密度分数、与当前用户的化学反应
目标5活跃目标(成长、精通、关系、探索)
兴趣6带有置信度的已检测兴趣
习惯7(最低)带有强度分数的行为模式

Token 预算

默认预算为 2000 token(约 8000 字符)。 插件以每 token 约 4 个字符来估算 token 数量, 超出预算时从最低优先级的部分开始移除。 可通过 contextTokenBudget 调整。

会话密钥解析

插件自动从 OpenClaw 的会话密钥格式中提取用户身份。 无需任何配置即可实现按用户的记忆和关系:

会话格式示例解析的用户 ID
CLI(1:1)agent:abc:mainKeyowner
Telegram 私信agent:abc:telegram:direct:123123
WhatsApp 私信agent:abc:whatsapp:direct:+1555...+1555...
Discord 群组agent:abc:discord:group:guild789guild789
定时任务 / Webhookcron:daily-checkowner

编程式设置(B2B)

对于需要以编程方式配置智能体的多租户部署, 可以直接使用 setup() 函数:

import { setup } from "@sonzai-labs/openclaw-context";

const result = await setup({
  apiKey: "sk-project-key",
  agentName: "customer-support-bot",
  configPath: "/path/to/openclaw.json",
});

console.log(result.agentId);   // 确定性 UUID(tenantID + agentName 的 SHA1)
console.log(result.written);   // true — 配置文件已更新

幂等配置

智能体 ID 从 SHA1(tenantID + agentName) 确定性生成。使用相同名称多次调用 setup 会返回相同的智能体 — 重启和重新部署都是安全的。

架构

Sonzai 上下文引擎插入 OpenClaw 的生命周期钩子。 以下是单个对话轮次的流程:

OpenClaw Runtime                SonzaiContextEngine              Sonzai Mind Layer
      |                                    |                                |
      |-- bootstrap(sessionId) ----------->|                                |
      |                                    |-- resolve agent + session ---->|
      |                                    |<-- session state cached -------|
      |                                    |                                |
      |-- assemble(messages, budget) ----->|                                |
      |                                    |-- fetch context (memory,       |
      |                                    |   personality, mood,           |
      |                                    |   relationships) ------------>|
      |                                    |<-- ranked context blocks ------|
      |                                    |                                |
      |<-- systemPromptAddition -----------|   (priority-ordered,           |
      |                                    |    budget-trimmed)             |
      |                                    |                                |
      |  [LLM call with enriched prompt]   |                                |
      |                                    |                                |
      |-- afterTurn(sessionId) ----------->|                                |
      |                                    |-- send conversation ---------> |
      |                                    |   Mind Layer extracts facts,   |
      |                                    |   updates mood, evolves        |
      |                                    |   personality automatically    |
      |                                    |                                |
      |-- compact(sessionId) ------------->|                                |
      |                                    |-- merge short-term → long-term>|
      |                                    |<-- compacted ------------------|

上下文引擎处理与 Mind Layer 的所有通信。 在 assemble 期间,获取上下文来源(记忆、人格、情绪、关系、目标、兴趣、习惯), 按优先级排序并裁剪至 token 预算。在 afterTurn 期间,将对话发送回 Mind Layer 进行事实提取和状态更新。 引擎不在本地运行 LLM 调用 — 所有智能都在 Sonzai 端。

优雅降级

所有 API 调用都包裹在错误处理器中。如果 Mind Layer 不可达, 引擎返回空上下文,绝不会阻塞 OpenClaw — 智能体将在没有增强上下文的情况下继续工作。

导出

该包提供以下高级用途的导出:

导出说明
default插件注册(OpenClaw 自动加载)
SonzaiContextEngine核心引擎类 — 可在 OpenClaw 外使用
setup()B2B 部署的编程式设置
resolveConfig()合并 openclaw.json + 环境变量 + 配置为已解析选项
parseSessionKey()从 OpenClaw 会话密钥提取用户身份
buildSystemPromptAddition()将上下文格式化为注入块
estimateTokens()估算字符串的 token 数量(约 4 字符/token)
SessionCache基于 TTL 的会话状态缓存

下一步