Ollamaを使用したOpenClaw:モデルを接続する ローカル
このガイドでは、OpenClawをOllamaに接続して、ローカルモデル上でアシスタントを動かす方法を説明します。内容は、プロバイダーの宣言、サーバーアドレス、確保すべきコンテキストウィンドウ、ツール呼び出しに対応したモデルの選択です。作業の半分は、エラーを表示しない障害を避けることに費やされます。たとえば、切り詰められたコンテキスト、まったく呼び出されないツール、一覧にないモデルなどです。コマンドはOllamaとOpenClawのドキュメントに基づいています。両者は急速に変化しているため、貼り付ける前に読み直してください。このページには、独自テスト、速度測定、モデルランキングはありません。
#OpenClawとOllama:それぞれの役割
OpenClawはゲートウェイです。メッセージングサービスからメッセージを受け取り、言語モデルに転送し、そのモデルが要求するアクションを実行するプロセスです。Ollamaはモデルサーバーです。モデルをメモリに読み込み、デフォルトではhttp://localhost:11434というアドレスのマシンのポート11434で応答します。一方をもう一方に接続するには、OpenClawでOllamaをプロバイダーとして登録し、ローカルモデルをエージェントのメインモデルに指定します。
OpenClawのドキュメントによると、この接続はOllamaのネイティブAPI(エンドポイント/api/chat)を経由します。このAPIはストリーミング応答とツール呼び出しに対応しています。この点は見た目以上に重要です。後で説明するように、アドレスの書き方を誤るだけでゲートウェイが別のモードに切り替わり、ツールが機能しなくなります。
- Ollama
- モデルを読み込み、コンテキストウィンドウを割り当てて、テキストを生成します。消費するメモリを決めるのはこれです。
- OpenClaw
- 各ターンで、システム指示、利用可能なツールの説明、会話履歴を送信し、その後、モデルが要求したツールを実行します。
- モデル
- 長い指示を保持し、期待される形式でツールを要求できる必要があります。すべてのローカルモデルがこれに対応できるわけではありません。
- 変化しない点
- メッセージング、アシスタントのメモリ、トークン、ゲートウェイのセキュリティは、モデルの提供元にかかわらず、OpenClaw側で設定されたままです。
この接続は、チャットインターフェースの接続よりも扱いが難しくなります。チャットはモデルに数行を送るだけですが、エージェントには、最初のメッセージを送る前から、指示とツール定義を数千トークンもまとめて送ります。Ollamaのデフォルト設定は前者を想定したもので、後者には適していません。
#前提条件
あなたのマシンで動作するエージェント:エージェント型 Cline、MCP、n8n + Ollama、ローカル自動化。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 生涯アップデート
- OpenClawをインストール済み
- 起動して診断にも合格するゲートウェイ。インストールについてはここでは扱いません。「DockerでOpenClawをインストールする」ガイドを参照してください。
- Ollamaがインストール済みで最新
- 以下で使用するollama launchコマンドは、最近のバージョンにしか存在しません。インストールについては、ガイド「Ollamaをインストールする」で説明しています。
- モデルとそのコンテキスト用のメモリ
- 重みだけを Q4_K_M にした場合の目安は、70億パラメータのモデルで約 5 GB、140億で 9 GB、320億で 19 GB です。エージェントが要求するコンテキストウィンドウは、この数値に加算されます。
- ターミナルへのアクセス
- ゲートウェイをホストするマシンと、同じマシンでない場合はOllamaをホストするマシン上で。
最後のコマンドは、インストール済みモデルの一覧をJSON形式で返すはずです。接続拒否は、Ollamaが起動していないことを意味します。アプリケーションを起動するか、ターミナルでollama serveを実行してください。この応答が返るまで先に進む必要はありません。
#手順1:64 000トークンのコンテキストを確保する
インストールの失敗原因として最も多い設定で、Ollama側で行い、OpenClaw側では行いません。OllamaがOpenClawについて掲載しているページによると、アシスタントには大きなコンテキストウィンドウが必要で、ローカルモデルでは少なくとも64 000トークンが推奨されています。コンテキスト長に関するページでも、エージェント、ウェブ検索、コードツールについて同じ値が示されています。
一方、Ollamaは、利用可能なビデオメモリに応じてデフォルトのコンテキストウィンドウを選択します。同じドキュメントによれば、VRAMが24 GiB未満では約4,000トークン、24~48 GiBでは32,000トークン、48 GiB以上では256,000トークンです。したがって、12または16 GBのカードでは、サーバーは推奨値の十六分の一のウィンドウで起動します。これを示す通知はありません。Ollamaは超過分をエラーメッセージなしで切り捨てます。
Ollamaがすでにアプリケーションとして動作している場合(macOS、Windows)、このコマンドは実行しないでください。二つ目のサーバーがポート11434で競合します。アプリケーションの設定でコンテキスト長を調整してください。LinuxでOllamaをsystemdサービスとしてインストールした場合は、変数をサービス自体で宣言します。
#ステップ2:ツール呼び出しができるモデルを選ぶ
エージェントはツールを通じてのみ動作します。ファイルを読む、コマンドを実行する、ウェブを検索する、といった操作です。ツール要求を組み立てられないモデルは、メッセージには丁寧に返答しますが、実際には何も実行しません。このページではモデルを順位付けせず、接続する前に確認すべき基準を示します。
- 「tools」機能
- コマンドollama show afficheにはCapabilitiesセクションがあります。そこにはtoolsが含まれていなければなりません。Ollamaのライブラリでは、対応するフィルターがhttps://ollama.com/search?c=toolsにあります。
- 十分なネイティブウィンドウ
- 同じコマンドで、モデルの最大コンテキスト長も表示されます。8,000または32,000トークン向けに設計されたモデルは、サーバーの設定にかかわらず、64,000という推奨値には対応できません。
- 現実的なメモリ予算
- モデルの重みとコンテキストは、VRAM内、またはMacのユニファイドメモリ内に一緒に収める必要があります。12 GBのカード(RTX 3060、RTX 4070)では、単純な対話でカードが受け入れられるモデルよりも明らかに小さいモデルを選ぶことになります。16 GB(RTX 4080)と24 GB(RTX 4090)なら、より余裕があります。
- 長時間の安定性
- 一つのエージェントは、リクエストごとに複数のツール呼び出しを連続して実行します。非常に小規模なモデルは、形式やツールを間違える頻度が高くなります。どの資料も、まずは低リスクのものから、ご自身のリクエストで試すことに代わるものではありません。
このガイドの以降の説明では、gpt-oss:20bを例として使用します。選択したモデルに置き換えてください。Ollamaの統合ページでは、OpenClaw向けに推奨されるモデルの一覧が更新されています。リリースに応じて変わるため、ここに固定された一覧を掲載するより、そちらを参照するほうが適切です。
#ステップ3:OpenClawでプロバイダーOllamaを設定する
二つの方法があります。一つ目は、Ollamaのコマンドで設定を代わりに書き込む方法です。二つ目は、OpenClawの設定でプロバイダーを自分で宣言する方法です。ゲートウェイがDocker内で動作している場合や、Ollamaが別のマシンにある場合は、後者が不可欠です。
#高速な方法:ollama launch openclaw
Ollama のドキュメントによると、このコマンドはモデルを選択し、OpenClaw が Ollama を使うよう設定してゲートウェイを起動します。ゲートウェイがすでに動作している場合は、新しい設定を自動的に再読み込みします。以前のプロジェクト名も引き続き使用できます。ollama launch clawdbot はエイリアスです。このコマンドは、マシンに直接インストールされ、ターミナルで openclaw コマンドを使用できる OpenClaw を対象としています。手順1の代わりにはなりません。同じページでサーバーのコンテキストを確認するよう求めています。
#手動の方法:プロバイダーを自分で宣言する
OpenClawのドキュメントでは、まず自動検出モードについて説明しています。Ollamaはキーを要求しないため、ダミーキーを指定します。するとOpenClawはhttp://127.0.0.1:11434にあるローカルインスタンスへ問い合わせ、インストール済みのモデルを探します。
モデルは、ollama/の後にollama listで表示される正確な名前(タグを含む)を続ける形式で指定します。ゲートウェイをサービスとして動かす場合は、環境変数よりも設定ファイルへの記載を優先してください。ターミナルでエクスポートした変数は、システムが起動したプロセスには引き継がれません。Dockerインストールでは、各 openclaw コマンドの前に docker compose run --rm openclaw-cli を付けます。
二つ目の方法は、JSON5形式で記述された~/.openclaw/openclaw.jsonファイル内で明示的に宣言することです。これは、Ollamaがゲートウェイのマシン以外で動作している場合、モデルが一覧に表示されない場合、またはエージェントに通知するウィンドウを自分で固定したい場合に使用します。
- baseUrl
- ポートを含むOllamaサーバーのアドレスで、それ以外は何も記述しません。Ollamaが別のマシンで動作している場合に変更するのは、この一行だけです。
- api: "ollama"
- ツール呼び出しを処理する、OllamaのネイティブAPIを明示的に要求します。
- apiKey
- ダミー値です。プロバイダーを有効にするためだけに使用します。
- contextWindow
- OpenClawに通知され、履歴の長さの管理に使われるウィンドウです。これは、理論上モデルが受け付けられる長さではなく、Ollamaが実際に読み込む長さに対応していなければなりません。
- maxTokens
- 回答の長さの上限です。
- cost
- ゼロ:ローカルモデルではトークン単位の課金はありません。
- agents.defaults.model.primary
- エージェントがデフォルトで使用するモデル。ollama/モデル名 の形式。
この例は OpenClaw のドキュメントに示された構成を踏襲しています。contextWindow と maxTokens の値は私たちの設定なので、お使いのモデルに合わせて調整してください。覚えておくべき点は二つあります。まず、推論モデルでは reasoning を true に設定します。次に、同じドキュメントによれば、明示的な models.providers.ollama エントリが存在すると自動検出は無効になります。その場合、使用したい各モデルを models のリストに記載する必要があります。
#Docker内のゲートウェイ、または別のマシン上のOllama
コンテナ内では、localhostはコンテナ自体を指します。そのため、Dockerで起動したOpenClawゲートウェイは、ホストマシンのOllamaをアドレスhttp://localhost:11434で認識できません。ターミナルからはすべて正常に動作するのに、接続は拒否されます。解決策はOllamaが動作している場所によって異なります。
- Docker Desktop(macOS、Windows)
- host.docker.internal という名前は、コンテナから見たホストマシンを指します。明示的な宣言では、http://host.docker.internal:11434 を baseUrl として指定してください。
- Linux上のDocker Engine
- この名前はデフォルトでは存在しないため、以下の例のようにextra_hostsを使ってサービスに追加する必要があります。さらにOllamaは、コンテナから到達できるインターフェースで待ち受ける必要がありますが、元の設定ではローカルループバックに限定されているため、そうなっていません。
- Ollamaを別のマシンで使用
- このマシンのアドレスをローカルネットワークまたはVPN上のbaseUrlに設定し、このマシンでのOllamaのリッスン先も同様に設定します。
Composeファイルは当方による例であり、OpenClawのドキュメントから抜粋したものではありません。サービス名を、お使いのバージョンのdocker-compose.ymlと比較してください。一方、OLLAMA_HOST変数についてはOllamaのFAQで説明されています。その意味を確認してください。0.0.0.0では、サーバーはマシン上のすべてのインターフェースで待ち受け、OllamaのAPIは認証を一切要求しません。ファイアウォールでポート11434をDockerネットワークまたはローカルネットワークに制限し、このポートにはインターネットから決して接続できないようにしてください。Ollamaサーバーのセキュリティ保護に関する当方のガイドで、これらのルールを詳しく説明しています。
#ステップ4:エンドツーエンドの接続を確認する
「こんにちは」と返すエージェントは、何も証明していません。この応答にはツールもコンテキストも必要ないからです。有用な検証は、モデルサーバーからメッセージングまで、層ごとに進めます。
- 01Ollama単体でツール呼び出しをテストする以下のコマンドを使い、架空のツールを添えて質問をサーバーに送信します。レスポンスには、ツール名を指定し、そのツールに引数を渡すtool_callsフィールドが含まれていなければなりません。モデルが文章で返答する場合、そのモデルはエージェントには適していません。
- 02OpenClawに見えているものを確認するopenclaw models list コマンドでモデルが ollama/モデル名 の形式で表示され、openclaw doctor でプロバイダーエラーが報告されないこと。
- 03回答ではなくアクションを要求する制御インターフェースまたはメールから、エージェントにツールの使用を強制する依頼を送ってください。たとえば、ワークスペースのファイル一覧を取得させます。実際に実行しなければならず、何をするかを説明するだけでは不十分です。
- 04Ollamaが読み込んだ内容を確認するこのやり取りの直後に、サーバーマシンで ollama ps を実行し、CONTEXT 列と PROCESSOR 列を確認してください。
ollama psの出力では、CONTEXT列に、読み込まれたモデルに実際に割り当てられているウィンドウが表示されます。64 000を想定していたのに4096と表示される場合は、OpenClawの設定に何と書かれていても、手順1の設定が反映されていません。PROCESSOR列には、グラフィックカードとプロセッサーの分担が表示されます。求めているのは100% GPUという表示です。混在した分担になっている場合は、モデルとコンテキストがビデオメモリを超えています。
#ひそかに起きる障害:症状と原因
明確なエラー(接続拒否、モデルが見つからないなど)はログで確認できます。以下の障害は、アシスタントが応答を続けるため、より厄介です。ただし、応答の内容は不適切です。
- アシスタントが指示を無視する、または的外れな応答をする
- 最も可能性の高い原因は、コンテキストが切り詰められていることです。システム指示とツール定義が、Ollamaによって読み込まれたウィンドウを超えているため、警告なしに一部が切り捨てられています。ollama psのCONTEXT列を確認し、手順1をやり直してください。
- アクションの代わりにJSONが表示される
- モデルはツール呼び出しを正しく生成しましたが、ゲートウェイはそれをテキストとして受信しました。これは、/v1 のアドレスを使っているか、OpenAI 互換モードでプロバイダーを宣言している兆候です。ネイティブのアドレスと api: "ollama" に戻してください。
- 実行することを説明するだけで、何も実行しない
- モデルがtools機能を宣言していないか、長い指示の途中で使用するには制限が強すぎます。手順4で説明しているOllamaでの直接テストを再実行し、失敗する場合はモデルを変更してください。
- openclaw models listにモデルが表示されない
- 可能性は三つあります。プロバイダーが有効になっていません(ダミーキーがない、または変数がサービスに渡されていない)。models.providers.ollamaの明示的なエントリは存在しますが、このモデルが一覧にありません。あるいは、モデルがツール呼び出しを宣言していません。私たちが把握しているドキュメントによると、自動検出の対象になるのはツール呼び出しを宣言しているモデルだけであり、この動作はバージョンによって変わっている可能性があります。
- コンテキスト設定が効果を発揮しない
- OLLAMA_CONTEXT_LENGTH変数をターミナルでエクスポートしたものの、Ollamaはサービスまたはアプリケーションとして動作していたため、サーバーからはその変数が見えていませんでした。サービス内、またはアプリケーションの設定で変数を宣言してから、Ollamaを再起動してください。
- 応答に非常に長い時間がかかる、または返ってこない
- モデルがプロセッサー側にはみ出している(ollama ps の PROCESSOR 列)か、アイドル状態の後にアンロードされ、メッセージごとに再読み込みされています。デフォルトでは、Ollama はモデルを 5 分間メモリに保持します。OLLAMA_KEEP_ALIVE 変数でこの時間を延長できます。
- ターミナルではすべて動くのに、ゲートウェイ経由では何も動かない
- ゲートウェイはコンテナ内で動作し、自身の localhost 上で Ollama を探します。Docker のセクションを参照してください。
- 「Model context window too small」
- これは静かに失敗するわけではありませんが、戸惑いやすい点です。私たちが知るOpenClawのバージョンは、通知されたウィンドウが小さすぎるモデルを拒否します。明示的な宣言でcontextWindowを確認し、それに応じてOllamaのコンテキストも設定してください。
接続を確立した後も、覚えておくべき限界があります。正しく接続されたローカルモデルでも、長時間に及ぶタスクや曖昧なタスクでは、大規模なオンラインモデルと同じように振る舞うとは限りません。ここでは比較結果も処理速度も公開していません。まずは単純で重要度の低い依頼から始め、モデルがどこで行き詰まるかを観察してください。アシスタントを日常的に使う場合は、オンラインプロバイダーを予備モデルとして残しておきましょう。
#手元に置いておきたい公式情報源
このガイドは独自テストに基づくものではありません。所要時間、スループット、スコアはいずれも掲載していません。コマンドとフィールド名は、バージョンごとに変わる両プロジェクトのドキュメントに従っています。ollama launch のオプション、自動検出の挙動、デフォルト値などが対象です。このページとドキュメントに相違がある場合は、ドキュメントを正とします。
#さらに詳しく
接続は、サイトの別の場所で詳しく扱っている3つの概念に基づいています:サーバーOllama、コンテキストウィンドウ、ツール呼び出しです。
- Ollama のインストール
- モデルサーバーのインストール、基本設定、そしてマシンから外部に出られるもの。https://quelllm.fr/guide/installer-ollama
- コンテキストウィンドウを理解する
- トークンが測るもの、コンテキストがメモリを消費する理由、適切なサイズの決め方。https://quelllm.fr/guide/comprendre-fenetre-contexte
- Ollamaでのツール呼び出し
- ツール要求の形式と、エージェントを介さずにテストする方法。https://quelllm.fr/guide/appel-outil-ollama-tutoriel
- Hermes Agent と Ollama
- ローカルモデルに接続した、別のセルフホスト型エージェントです。アプローチを比較できます。https://quelllm.fr/guide/hermes-agent-ollama-guide
- DockerでOpenClawをインストールする
- ゲートウェイのインストールと更新、VPS での公開ルール。https://quelllm.fr/guide/installer-openclaw-docker
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。