ローカルAIを好む、ではなく必要とするユーザーカテゴリがある。特権通信を扱う弁護士。患者データを処理する医療機関。機密環境で働く政府請負業者。コンプライアンスチームがクラウドAIサービスを却下した企業。そして単に会話データを他人のサーバーに保存されたくない多数の個人。
これらのユーザーにとって「ほぼローカル」では足りない。ネットワークケーブルを抜いても動くスタックが必要だ。構築方法を説明する。
アーキテクチャ
三つのコンポーネントがそれぞれ別の責務を持つ:
- •Ollama がモデルのダウンロード、量子化を管理し、localhost上でOpenAI互換APIを提供
- •ZeroClaw がエージェントランタイムを提供——メモリ、チャネル、ツール、パーソナリティ、オーケストレーション
- •Open WebUI がChatGPTのUIに似た洗練されたブラウザベースのチャットインターフェースを提供
三つともローカルで動く。OllamaとZeroClawはlocalhost経由で通信。Open WebUIはOllamaのローカルAPIに接続。初期セットアップ後、何もインターネットに触れない。
ステップ1:Ollamaのインストール
```bash curl -fsSL https://ollama.com/install.sh | sh ```
Windowsはollama.com/downloadからインストーラをダウンロード。macOSは `brew install ollama` で可。
まだネットがあるうちにモデルをプル:
```bash ollama pull llama3.1:8b ollama pull qwen2.5-coder:7b ollama pull gemma3:4b ```
モデルは一度だけダウンロードされローカルに保存される。このステップ以降、Ollamaはインターネットアクセスを必要としない。
モデル選択: 16GB以上のRAMまたは8GB以上のVRAM GPUがあるなら、llama3.1:8bから始めよう——同サイズで最も万能。GPUなしの8GBRAMならgemma3:4b。コーディング専用ならqwen2.5-coder:7bがサイズ2倍のモデルをコード生成ベンチマークで上回る。
ステップ2:ZeroClawのインストール
```bash curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/scripts/bootstrap.sh | bash ```
ZeroClawのプロバイダをOllamaに設定。`~/.zeroclaw/config.toml` を編集:
```toml [provider] type = "openai-compatible" base_url = "http://localhost:11434/v1" model = "llama3.1:8b" api_key = "not-needed"
[agent] name = "LocalAssistant" personality = "Helpful, concise assistant running entirely on local hardware. Prioritize accuracy over speed."
[memory] type = "sqlite" path = "~/.zeroclaw/memory.db" ```
ZeroClawを起動:
```bash zeroclaw start ```
テスト:
```bash zeroclaw chat "What can you help me with?" ```
ステップ3:Open WebUIのインストール
Open WebUIは馴染みのあるチャットインターフェースを提供する。Dockerでデプロイ:
```bash docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main ```
ブラウザで http://localhost:3000 を開く。ローカル管理者アカウントを作成(Dockerボリュームに保存され、どこにも送信されない)。Open WebUIがローカルのOllamaインスタンスを自動検出しダウンロード済みモデルをリスト表示する。
自分のハードウェアだけで動くChatGPTスタイルのインターフェースが完成した。
ステップ4:インターネットを切断する
これがテストだ。LANケーブルを抜くかWiFiを無効にする。Open WebUIはlocalhost:3000でまだロードできるはずだ。メッセージを入力する。数秒以内にローカルモデルからレスポンスが来るはずだ。
切断状態で動けば、スタックは完全オフライン対応だ。インターネットに再接続しても何も変わらない——ネットワーク状態にかかわらずスタックはローカルで動き続ける。
ハードウェア別モデル選択
動かせるモデルはRAMとGPUに依存する:
- •gemma3:4b——高速、基本タスクに十分
- •qwen2.5:3b——さらに小さいが意外に有能
- •llama3.1:8b——このティアで最良の汎用モデル
- •qwen2.5-coder:7b——開発作業用
- •上と同じモデルだが推論速度3〜5倍
- •レスポンスタイムが5〜8秒から1〜2秒に短縮
- •deepseek-v3.2:32b——8Bモデルからの大幅な品質向上
- •qwen2.5-coder:32b——ソフトウェア開発に最適
ZeroClawのエージェント機能を追加
基本のOllama + Open WebUIスタックはチャットインターフェースを提供する。ZeroClawを追加するとエージェントになる——以前の会話を覚え、ツールを使い、メッセージプラットフォームに接続するもの。
メモリの永続化: ZeroClawはSQLiteハイブリッド検索(FTS5 + ベクトル)で会話を保存。エージェントは昨日、先週、先月話した内容を覚えている。Open WebUI単体ではセッション横断メモリは提供されない。
ツールの使用: ファイル操作、計算、カスタムスクリプト用のZeroClawツールを設定。エージェントはシステム上のファイルを読み、ホワイトリスト化されたコマンドを実行し、ローカルサービスと連携できる——すべてオフラインで。
マルチチャネルアクセス: オンライン時にTelegram、Discord、その他のメッセージプラットフォームに接続、実際の推論はローカルのまま。メッセージプラットフォームにはテキストメッセージだけが見える;AI処理は一切マシンの外に出ない。
セキュリティ強化
コンプライアンスやセキュリティ上の理由でこのスタックが必要なユーザー向けの追加強化ステップ:
- 1.**localhostのみにバインド。** OllamaとZeroClawは両方127.0.0.1で待ち受けるべき。0.0.0.0ではなく。ZeroClawはこれがデフォルト;Ollamaは `OLLAMA_HOST=127.0.0.1 ollama serve` で確認。
- 2.**テレメトリを無効化。** Open WebUIにはオプションのテレメトリがあり、エアギャップデプロイでは無効にすべき:Docker環境変数で `ENABLE_TELEMETRY=false` を設定。
- 3.**ZeroClawのアローリストを使用。** ファイルパスとネットワークのアローリストを設定し、ローカルマシン上でもエージェントがアクセスできる範囲を制限。
- 4.**メモリデータベースを暗号化。** センシティブな会話にはZeroClawのメモリファイルにSQLite暗号化(SQLCipher)を使用。
何を諦めるか
トレードオフに正直であることが大事だ。完全オフラインは以下を意味する:
- •モデル品質の天井。 ローカルモデル(8B〜32Bパラメータ)は良いがフロンティアレベルではない。Claude 3.5 OpusやGPT-5のようなクラウドモデルは複雑な推論タスクでより良い出力を出す。
- •インターネット接続ツールなし。 Web検索、リアルタイムデータ取得、外部API呼び出しはオフラインでは動かない。エージェントはローカルの知識とツールに限定される。
- •ハードウェア投資。 専用ハードウェアが必要。ランニングコストはAPI料金ではなく電気代だが、初期投資は実在する。
ほとんどのユーザーの実用的なアプローチはハイブリッドだ:デフォルトでローカル実行、フロンティア品質が必要な時はクラウドにルーティング、ネットワークが使えないかタスクがセンシティブな時のフォールバックとしてオフライン機能を保持。
ZeroClawはこれをネイティブサポートする——ローカルプロバイダ(Ollama)とクラウドプロバイダを両方設定し、ルーティングルールを設定すれば、エージェントがクエリごとに適切なバックエンドを自動選択。プライベートな会話はローカルに。複雑なリサーチはクラウドへ。境界はあなたが管理する。