Skip to main content
Sonzai Docs

OpenClaw連携

OpenClawのデフォルトメモリーをSonzai Mind Layerに置き換え、永続的な記憶、パーソナリティの進化、感情の追跡、 関係性モデリングをすべてのエージェントに提供します。

OpenClawとは?

OpenClaw は、会話型AIエージェントを構築するためのオープンソースフレームワークです。 名前付きスロットを持つモジュラープラグインシステムを採用しており、 各スロットはエージェントパイプラインの特定の部分を制御します。

最も重要なスロットは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で、contextEngineスロットにどの登録済みエンジンを使用するかをOpenClawに指示します。"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.jsonplugins.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注入コンテキストの最大トークン数
extractionProvider----事実抽出用LLMプロバイダー
extractionModel----事実抽出用LLMモデル

コンテキストソースの無効化

disableマップを使用して、特定のコンテキストソースを選択的に無効化できます。 Mind Layerをメモリとして使用したいが感情追跡は不要な場合や、 トークン使用量を削減したい場合に便利です:

{
  "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>ブロックをシステムプロンプトに注入します。 セクションは優先度順に並べられ、トークンバジェットを超過した場合は優先度の低いものから削除されます:

パーソナリティ1(最高)キャラクター定義、主要特性、話し方のパターン、Big5プロファイル
関連する記憶2最新のユーザーメッセージに一致するセマンティック検索された事実
現在の感情34次元感情状態(感情価、覚醒度、緊張度、親和度)
関係性4関係性の物語、愛情スコア、現在のユーザーとの相性
目標5アクティブな目標(成長、習熟、関係性、発見)
興味6信頼度レベル付きの検出された興味
習慣7(最低)強度スコア付きの行動パターン

トークンバジェット

デフォルトのバジェットは2000トークン(約8000文字)です。 プラグインは1トークンあたり約4文字でトークン数を推定し、 バジェット超過時は優先度の低いセクションから削除します。contextTokenBudgetで調整可能です。

セッションキーの解決

プラグインはOpenClawのセッションキー形式からユーザーIDを自動的に抽出します。 これにより、設定なしでユーザーごとの記憶と関係性が可能になります:

セッション形式解決されるユーザーID
CLI(1:1)agent:abc:mainKeyowner
Telegram DMagent:abc:telegram:direct:123123
WhatsApp DMagent:abc:whatsapp:direct:+1555...+1555...
Discordグループagent:abc:discord:group:guild789guild789
Cron / 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のライフサイクルフックに接続します。 1回の会話ターンのフローは次の通りです:

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中に、コンテキストソース(記憶、パーソナリティ、感情、関係性、目標、興味、習慣)を取得し、 優先度順にランク付けして、トークンバジェットに合わせてトリミングします。afterTurn中に、事実抽出と状態更新のために会話をMind Layerに送信します。 エンジンはローカルでLLM呼び出しを実行しません。すべてのインテリジェンスはSonzai側にあります。

グレースフルデグラデーション

すべてのAPI呼び出しはエラーハンドラーでラップされています。 Mind Layerに到達できない場合、エンジンは空のコンテキストを返し、 OpenClawをブロックすることはありません。 エージェントはエンリッチされたコンテキストなしで動作を継続します。

エクスポート

パッケージは以下の高度な使用向けエクスポートを提供します:

エクスポート説明
defaultプラグイン登録(OpenClawが自動ロード)
SonzaiContextEngineコアエンジンクラス — OpenClaw外でも使用可能
setup()B2Bデプロイメント向けプログラマティックセットアップ
resolveConfig()openclaw.json + 環境変数 + 設定を解決済みオプションにマージ
parseSessionKey()OpenClawセッションキーからユーザーIDを抽出
buildSystemPromptAddition()コンテキストを注入ブロックにフォーマット
estimateTokens()文字列のトークン数を推定(約4文字/トークン)
SessionCacheセッション状態のTTLベースキャッシュ

次のステップ