ClawAI の構築方法
18 の独立して展開可能なサービスは、それぞれが独自のデータベースを所有し、イベント駆動型のバックボーン上で調整されます。応答は生成されるとストリーミングされ、すべてのレイヤーが独自に防御されます。
最終レビュー日 2026-07-27
ClawAI の構築方法
ClawAI は、単一のリバース プロキシの背後にある 18 の独立して展開可能なサービスです。認証、チャット、ルーティング、コネクタ、メモリ、ファイル、調査、ワークスペース、画像生成、ドキュメントのエクスポート、請求、監査、ログは、それぞれ独自のデータベースを使用した独自のプロセスとして実行されます。 Web アプリは、1 つの API サーフェスを通じてそれらすべてに到達します。
理由は封じ込めです。プロバイダーが遅い、ファイル変換が停止している、エクスポートが失敗しているなどの理由で、プロバイダーとのチャットを停止することはできません。プロセス、接続プール、データベースを共有していないからです。各サービスは独自にデプロイ、スケール、ロールバックされます。
- 18
- 独立して展開可能なサービス
- サービスごとに 1 つ
- 共有データベースはこれまで存在しません
- HTTP + イベント
- 同期呼び出しと非同期イベント バス
- 1 つのエントリ ポイント
- すべての前に単一のリバース プロキシ
サービス
すべてのサービスが外から見て興味深いわけではありません。これらは、単一のリクエストがタッチする傾向があるもので、おおよそその順序で表示されます。
- 認証PostgreSQL
- アカウント、セッション、トークン発行と更新ローテーション、ロール、権限セット。
- チャットPostgreSQL
- 会話とメッセージ、コンテキスト アセンブリ、ストリーミング実行、およびマルチモデル オーケストレーション。
- ルーティングPostgreSQL
- 各メッセージを分類し、アクティブ モードとポリシーを適用し、そのフォールバック チェーンで決定を記録します。
- コネクタPostgreSQL
- プロバイダーの資格情報、モデル カタログ、機能フラグ、および継続的なヘルス チェック。
- メモリとコンテキストPostgreSQL + pgvector
- メモリ レコード、提案キュー、コンテキスト パックとそのバージョン、およびセマンティック検索。
- ファイルPostgreSQL
- アップロード、セキュリティ スキャン、テキスト抽出、OCR、チャンキング、および保持。
- 研究PostgreSQL
- Web 検索、ページの取得、およびソースを含む回答の証拠の収集。
- ワークスペースPostgreSQL
- 12 のサードパーティ ツール、Webhook、スケジュールされた同期、クロスツール検索への OAuth 接続。
- 画像生成PostgreSQL
- 画像のレンダリング中の画像リクエスト、プロバイダー アダプター、およびステップごとの進行状況。
- ドキュメントの生成PostgreSQL
- 回答を PDF、DOCX、CSV、HTML、Markdown、TXT、および JSON にレンダリングします。
- 請求PostgreSQL
- プラン、サブスクリプション、バージョン化された価格、請求書、および手当の適用。
- 監査MongoDB
- 誰が何をしたかという不変の記録と、各手当の数値が導出される使用量台帳。
- ロギングMongoDB
- すべてのサービスおよびブラウザーからの構造化されたログは、ローリング ウィンドウに保持されます。
各サービスは、それが所有するデータベースに名前を付けます。他には何も接続されていません。他のデータを必要とするサービスは、HTTP 経由でデータを要求するか、イベントに反応します。
サービスごとに 1 つのデータベース
すべてのサービスは 1 つのデータベースを所有しており、データベースに接続する唯一のものです。共有スキーマ、クロスサービス結合、全員のテーブルを静かに読み取るレポート データベースはありません。
代償として、一部の質問では 1 回の参加ではなく 2 回の呼び出しが必要になります。利点は、請求におけるスキーマ変更によってチャットが中断されることがなく、ログ記録における暴走クエリによって会話が依存する接続プールを使い果たすことがないことです。
- クロスデータベースクエリなし
- サービスは、他の誰のテーブルではなく、独自のテーブルを読み取ります。他の場所からのデータは、API 呼び出しまたはイベントを通じて到着します。
- スキーマはプライベートです
- サービスは、サービスの形状に依存する外部コンシューマがないため、誰とも調整することなく独自のテーブルを変更できます。
- 移行はサービスごとに実行されます
- 各サービスは、起動時に独自のデータベースを移行します。誰もが待たなければならない世界的な移住などありません。
- 障害はローカルにとどまります
- データベースが遅いか使用できない場合、製品全体ではなく 1 つの機能が低下します。
1 つのリクエストの寿命
送信を押してから回答を読むまでの間に何が起こるか。
リクエストは認証されました
リバース プロキシはそれをチャットに渡し、アクセス トークンとロールに関連付けられた権限を検証します。
許容量がチェックされています
の請求により、プランで要求したモデルが許可されていること、および日次および月次の許容量にまだ余裕があることが確認されます。
メッセージが保存され、アナウンスされます
チャットはメッセージを独自のデータベースに書き込み、イベントを発行します。ルーティングはそれをリッスンしています。
ルーティングはモデルを選択します
メッセージは分類され、アクティブ モードとポリシーが適用され、コネクタの健全性が調査され、フォールバック チェーンによる決定が記録されます。
コンテキストが組み立てられています
チャットは、関連するレコードとパック アイテムについてはメモリを要求し、関連するチャンクについてはファイルを要求し、それらをトークン バジェット内でプロンプトにマージします。
モデルが呼び出され、ストリーミングされます
チャットはプロバイダーを呼び出し、ステージ、テキスト、推論、メトリクスが到着すると、サーバー送信イベントを介してブラウザーに転送します。
結果は永続化されます
答え、そのルーティング決定、そのトークン数、そのコンテキスト受信が一緒に記録されます。
使用状況と監査が記録されます
請求では、許容量に対するコストが測定され、監査によりイベントが記録されます。ここでもメモリ抽出が実行されます。
ステップ 1 ~ 7 は同期的であり、それらを待ちます。ステップ 8 とメモリの抽出は、答えがすでに画面に表示された後に行われるため、体験に待ち時間が追加されることはありません。
イベントバス
回答が表示される前に終了する必要のない作業は、RabbitMQ トピック交換のイベントとして公開され、それを扱うサービスによって処理されます。使用状況の測定、監査レコード、メモリ抽出はすべてこの方法で実行されます。
イベントは、チャットが監査の存在を知る必要がない理由です。チャットには何が起こったかが記載されています。反応する必要があるものはすべて購読します。コンシューマを追加する場合、パブリッシャーを変更する必要はありません。
- トピック交換
- 出版社は何が起こったのかを名指しするのであって、誰がそれを聞くべきかではない。消費者は関心のあるパターンに縛られます。
- バックオフを伴う再試行
- 失敗したハンドラーは、遅延が増加しながら 3 回再試行され、そのほとんどを構成する一時的なエラーが吸収されます。
- 配信不能キュー
- 再試行後も失敗するメッセージは、削除されたり、その後のすべてがブロックされたりするのではなく、配信不能キューに送られます。
- べき等ハンドラー
- 少なくとも 1 回の配信により、最終的には 1 回の配信が保証されるため、ハンドラーは同じイベントの 2 回の受信を許容します。
- すべてが監査可能
- Audit はすべてのドメイン イベントをサブスクライブするため、何が起こったかの記録は、各サービスが記録を記憶しているかどうかに依存しません。
ストリーミング
回答は、ポーリングではなく、サーバー送信イベント経由で到着します。メッセージを送信すると接続が開き、応答が完了するかキャンセルされるまですべてが保持されます。
バッファリングは、プロキシとパス上のすべてのサービスでエンドツーエンドで無効になっています。これは、バッファリングされたストリームは、余分なステップを伴う単なる遅い応答であるためです。
同じチャネルでテキスト生成、画像生成の進捗状況、長期にわたる研究が行われるため、インターフェイスには進行中の作業を 3 つではなく 1 つの方法で表示できます。
- ステージ変更
- キューに登録、ルーティング、コンテキストの組み立て、モデルの呼び出し、終了 - したがって、一時停止には常に目に見える理由があります。
- コンテンツデルタ
- モデルがトークンごとに生成する応答テキスト。
- 推論デルタ
- 思考を公開するモデルの場合、推論ストリームは答えとは別に配信され、別々にレンダリングされます。
- メトリクス ティック
- これまでのトークン、1 秒あたりのトークン数、最初のトークンまでの時間、および実際に時間がかかった場所 (モデルのロード、プロンプト評価または生成)。
- ターミナルイベント
- 最終的な使用状況の概要、または明示的なエラーまたはキャンセル。流れは決して止まることはありません。
何を保存するか
4 種類のストアがあり、それぞれの得意分野で使用されます。
- PostgreSQL
- アカウント、会話、ルーティングの決定、メモリ、ファイル、接続、請求の記録システム — サービスごとに 1 つのデータベース。
- pgvector
- PostgreSQL 内のベクトル類似性検索。別個のベクトル データベースを実行せずに、関連するメモリとコンテキスト パック項目を取得するために使用されます。
- MongoDB
- 監査イベント、使用状況台帳、および構造化ログ: ローリング保持期間を持つ大量の追加専用データ。
- Redis
- キャッシュ、レート制限カウンター、および短期間の調整状態。大切なものはここにしか保管されていません。
セキュリティメカニズム
製品に存在する具体的なコントロール。認証の主張はありません - 最後の注記を参照してください。
- アクセス トークンとリフレッシュ トークン
- 更新ローテーションを伴う有効期間の短いアクセス トークン。ローテーションされたトークンを再利用すると、セッションが無効になります。
- パスワードのハッシュ化
- Argon2 とユーザーごとのソルト。パスワードは、回復可能な形式で保存または記録されることはありません。
- ロールベースのアクセス制御
- ロールには明示的な権限セットが含まれており、インターフェイスだけでなく、すべてのサービスのすべてのエンドポイントでガードによって強制されます。
- 暗号化された資格情報
- プロバイダーとコネクタのシークレットは保存時に AES-256-GCM で暗号化され、API によって返されることはありません。
- スキーマの検証
- すべてのリクエスト本文は、ロジックに到達する前に、明示的な長さとサイズの制限を持つ Zod スキーマに対して検証されます。
- レート制限
- すべてのサービスでアカウントごとのスロットリングが行われるため、1 つのクライアントが他のすべてのクライアントの容量を使い果たすことはありません。
- セキュリティヘッダー
- リクエストごとのナンス、HSTS、およびすべての応答の標準強化ヘッダーを備えた厳格なコンテンツ セキュリティ ポリシー。
- どこでも TLS
- TLS は、ブラウザーからエッジまで、さらにすべての内部ホップで、サービス間の証明書検証を行います。
- ログ編集
- トークン、パスワード、API キー、および認証ヘッダーは、ログに何かが書き込まれる前に削除されます。
ClawAI は現在、SOC 2、ISO 27001、HIPAA などのサードパーティのセキュリティ認証を取得していません。私たちが得ていない保証を暗示するのではなく、上記のメカニズムについて説明します。正式な要件がある組織は、エンゲージメントの一部として範囲を設定できるように、私たちと一緒に要件を提起する必要があります。
可観測性
すべてのサービスは同じ信号を同じ形状で発信し、それらはすべてクエリ可能な場所に到達します。 「このリクエストに何が起こったのか」に答えるオペレータは、18 個のログ ファイルを開く必要はありません。
- 構造化ログ
- すべてのサービスおよびブラウザーからの JSON ログは、イベント バス経由で送信され、ローリング ウィンドウに保持されます。
- リクエスト相関
- リクエスト ID はブラウザーで生成され、すべてのサービス ホップを通じて伝達されるため、1 つの識別子でパス全体が再構築されます。
- 監査イベント
- 運用ログとは別に保管される、セキュリティおよびビジネス関連のアクションの別個の不変記録。
- 使用台帳
- すべての従量制通話は台帳エントリとして書き込まれます。手当の数値は、変動する可能性のあるカウンターからではなく、元帳から導出されます。
- 健康状態の集計
- 専用のサービスが他のすべてのサービスをポーリングし、何が起こっているかを 1 つの統合ビューでレポートします。
何かが失敗したとき
モデル プロバイダーには、停止、レート制限、低速日があります。プラットフォームは、解決しないスピナーとしてそれらを渡すのではなく、それらを吸収するように構築されています。
- フォールバック チェーン
- すべてのルーティング決定には、順序付けられた代替案のリストが含まれます。選択したモデルが失敗した場合、次のモデルが自動的に試行され、代替が記録されます。
- 健康に基づく回避
- コネクタは継続的にヘルスチェックされ、障害が発生したプロバイダーは回復するまでルーターによってスキップされます。
- 安全な再試行
- イベント ハンドラーは重複配信を許容するため、許容量を 2 回請求するのではなく、再試行によって失敗が修正されます。
- エラーが表示されます
- すべてのオプションが失敗すると、明示的なエラーが会話に書き込まれ、ストリームにプッシュされます。インターフェイスを待機状態のままにするサイレント障害は発生しません。
- 爆発半径
- プロセスとデータベースが別々であるということは、障害が発生すると 1 つの機能が低下することを意味します。画像生成が停止してもチャットが停止するわけではありません。
ネットワーク内で同じアーキテクチャ
このページのすべてはホスト型サービスについて説明していますが、アーキテクチャはそれに結びついておりません。同じ 18 のサービス、同じイベント バス、および同じデータ モデルを組織独自のネットワーク内に展開できます。
この構成では、外部モデル プロバイダーが独自の GPU で提供されるオープンウェイト モデルに置き換えられるため、プロンプト、ドキュメント、または会話がインフラストラクチャから離れることはありません。これは、購入できるプランではなく、範囲を限定したエンゲージメントです。お客様のチームに合わせてサイズを決定します。