ブログに戻る
ローカルLLMカスタムAIOpenAI互換トラブルシューティングBYOK

SurfMindでローカルLLMやカスタムAIをブラウザに接続する

•読了時間 30 分
SurfMindでローカルLLMやカスタムAIをブラウザに接続する

SurfMindなら、使うモデルを自由に選べます。自分のマシン上で動かしているモデル(Ollama、LM Studio、Jan、llama.cpp、vLLM)や、OpenAIの補完APIに対応したほぼあらゆる外部AIプロバイダー(Poe、z.ai、Together、Groq、DeepSeek、AWS Bedrockなど数十種類)に接続できます。

主要なプロバイダーやローカルランナーの多くは、SurfMindの設定にあらかじめ用意されています。Connect をクリックしてAPIキーを貼り付けるだけです。それ以外のものは、Custom Providers / API フォームから自分でエンドポイントを追加できます。

ただし、注意点があります。一度でうまくいかないときは、ちょっとした設定ミスが原因のことが少なくありません。返ってくるエラー(「connection failed」「401」「404」「model not found」)からは原因が読み取りにくい場合もあります。

この記事は、手早く確認できるセルフチェックガイドです。チェックリストにざっと目を通して、設定を見直してみてください。それでもうまくいかない場合は、wave@surfmind.ai までメールでお問い合わせください。

特定のプロバイダーをお探しですか? こちらの一覧をご覧ください。ローカルモデル(Ollama、LM Studio、OpenWebUI、Jan…)または AIプロバイダー(Poe、z.ai、Together、Groq、AWS…)。

60秒チェックリスト

まず何よりも、次の項目を一通り確認してください。設定上の問題の大半は、このいずれかに行き着きます。

  1. サーバーは本当に動いていますか? ローカルモデルの場合、ランナー(Ollama、LM Studioなど)が起動していて、かつ モデルが読み込まれている必要があります。
  2. ポートは合っていますか? Ollamaは 11434、LM Studioは 1234 です。この2つを 取り違えない ようにしてください。特によくある設定ミスです。
  3. パスは合っていますか? Ollamaのネイティブパスは /api/chat です。それ以外のほぼすべては /v1/chat/completions です。これらを取り違えるとエラーになります。
  4. プロトコルは合っていますか — http それとも https? localhost 上のローカルモデルは http://(s なし)を使います。クラウドプロバイダーは https:// を使います。これを逆にすると、接続が切れているように見えます。
  5. ベースURLだけでなく、エンドポイント全体を貼り付けましたか? SurfMindの API URL 欄には、/chat/completions(Ollamaなら /api/chat)で終わる完全なURLが必要で、https://api.provider.com/v1 だけでは不十分です。
  6. APIキー(とその形式)は正しいですか? ローカルランナーは通常キー不要です。外部プロバイダーでは、Authentication を API Key に、形式を Authorization: Bearer に設定し、実際のキーを入力する必要があります。
  7. ブラウザでローカルモデルを使う場合、CORSは許可されていますか? これはローカル構成だけに必要な追加ステップです(OLLAMA_ORIGINS、またはLM Studioの「Enable CORS」)。

それでも解決しない場合は、以下を読み進めてください。各項目には、見落としがちな細かい落とし穴があります。

プロバイダーの接続方法

モデル選択メニューから数クリックで接続できます。

ステップ1. SurfMindパネル下部のモデル名をクリックしてお気に入りを開き、Show all をクリックします。

Show allボタンが表示されたSurfMindのモデル選択メニュー

ステップ2. モデル一覧の上部にある Add model provider をクリックします。SurfMindの設定の Models ページが開きます。

Add model providerボタンが表示されたSurfMindのモデル一覧

ステップ3. 使っているプロバイダーを探します。ローカルランナー(Ollama、LM Studio、vLLM、llama.cpp、Open WebUI)は Self-hosted にあります。クラウドプロバイダー(OpenAI、Anthropic、Google、OpenRouter、Groq、DeepSeek、Mistral、Poe、z.ai、Together、AWS Bedrockなど)は Providers にあります。一覧が長い場合は検索ボックスを使い、Connect をクリックします。

セルフホスト型ランナーとプロバイダーが、それぞれConnectボタン付きで一覧表示されたSurfMindのModels設定ページ

ステップ4. クラウドプロバイダーの場合は、APIキーを貼り付けて Connect をクリックします。ダイアログには、キーを取得できるページへのリンクがあります。セルフホスト型ランナーの場合は、ローカルのURLが入力済みの状態でフォームが開くので、そのまま保存するだけです(Open WebUIはキーも必要です)。

APIキーの入力を求めるSurfMindのConnectダイアログ

接続が完了すると、そのプロバイダーのモデルがモデル選択メニューに表示されます。プロバイダーの行を展開すると、表示するモデルを選べます。

プロバイダーが見つからない場合は? カスタムプロバイダーとして追加する

使っているプロバイダーやランナーが一覧にない場合(Jan、LocalAI、社内のゲートウェイ、まだ追加されていないプロバイダーなど)は、Modelsページ上部の Custom Providers / API をクリックします。

Custom Providers / APIボタンが表示されたSurfMindのCustomセクション

「Custom Model API」フォームが開くので、エンドポイントを自分で入力します。

SurfMindのCustom Model APIフォーム

設定ミスが起きるのはこのフォームなので、このガイドの残りは主にこのフォームについて説明します。

各欄に入力する内容

Custom Providers / API をクリックすると、「Custom Model API」フォームが表示されます。各欄に入力すべき内容は次のとおりです。

欄 入力する内容
API Name 好きなラベル(例:「My Gateway」や「Jan」)。モデル選択メニューに表示される名前です。
API URL ベースURLではなく、チャットエンドポイント全体。Ollamaなら http://localhost:11434/api/chat、それ以外はすべて /chat/completions で終わります。ミス #1 を参照。
Models URL (任意) 利用可能なモデルを一覧するエンドポイント。これを指定すると、モデル名を手入力せず、SurfMindのドロップダウンから選べます。Ollama: /api/tags。OpenAI互換: /v1/models。一覧エンドポイントがないプロバイダーは空欄でかまいません。その場合はモデルidを自分で入力します。
Authentication ローカルモデルでは No authentication。キーが必要なものには API Key を選びます。選ぶと下の2つの欄が表示されます。
API Key Format キーの送り方。Authorization: Bearer = Authorization: Bearer <key> で、ほぼすべてのクラウドプロバイダーが使用します。x-api-key = x-api-key: <key> で、Anthropic系のAPIや一部のプロバイダーが使用します。Custom header では独自のヘッダー名を指定できます。
API Key キーそのものだけを入力します。Bearer という語は入力しないでください。SurfMindが自動で付加します。

特に間違えやすいのは API URL(ベースか、エンドポイント全体か)と API Key Format(どのヘッダーか)です。このガイドの残りは、その2つを掘り下げます。

ミス #1: API URLのパス(/api/chat vs /v1/chat/completions の落とし穴)

これは最も大きなポイントで、なぜ 起きるのかを理解しておく価値があります。

ここでは、2つの異なるAPI形式が使われています。

  • Ollamaのネイティブ API。http://localhost:11434/api/chat を使います。
  • OpenAIの補完 API。.../v1/chat/completions を使います。LM Studio、vLLM、Jan、Poe、z.ai、Together、Groq、つまりそれ以外のほぼすべてがこちらに対応しています。

そのため、LM Studio向けに書かれたセットアップガイドをコピーして、そのパスをOllamaで使おうとすると(あるいはその逆も)、サーバーが完璧に動いていても404が返ってきます。サーバーは起動しているのに、リクエストの送り先が違っているだけなのです。

ランナー / プロバイダー 正しい API URL
Ollama (ネイティブ) http://localhost:11434/api/chat
Ollama (OpenAI互換モード) http://localhost:11434/v1/chat/completions
LM Studio http://localhost:1234/v1/chat/completions
OpenWebUI http://localhost:3000/api/chat/completions
OpenAI互換のすべて https://<host>/v1/chat/completions

知っておくと便利: Ollamaは 両方 のAPI形式に対応しています。SurfMindの Self-hosted にある Ollama はネイティブの /api/chat パスを使います。これが最もシンプルな経路で、モデルの自動検出も利用できます。Ollamaの /v1/chat/completions パスが必要になるのは、ツールが特にOpenAI形式を要求する場合だけです。SurfMindでは、Ollamaの行で Connect をクリックするだけで十分です。

ミス #2: ポート番号

ローカルランナーはそれぞれ独自のデフォルトポートを選んでおり、しかも見た目が似ていて打ち間違えやすいのです。

ツール デフォルトポート チャットURL全体
Ollama 11434 http://localhost:11434/api/chat
LM Studio 1234 http://localhost:1234/v1/chat/completions
Jan 1337 http://localhost:1337/v1/chat/completions
llama.cpp (llama-server) 8080 http://localhost:8080/v1/chat/completions
vLLM 8000 http://localhost:8000/v1/chat/completions
LocalAI 8080 http://localhost:8080/v1/chat/completions

11434 と 1234 は典型的な取り違えです。一見すると混同しやすいのですが、1桁違うだけで何も接続できません。自分でポートを変更した場合(例: vLLMを --port 9000 で起動した場合)は、デフォルトではなく 自分の ポートを使ってください。

簡単な動作確認: ブラウザでそのポートを開いてみてください。http://localhost:11434 にアクセスすると、Ollamaの「Ollama is running」というメッセージが表示されるはずです。ページがまったく読み込まれない場合は、サーバーが起動していないか、ポートが間違っています。

ミス #3: エンドポイントの代わりにベースURLを貼り付ける

プロバイダーのドキュメントは、ほぼ必ず ベースURL を示します(https://api.poe.com/v1 のようなもの)。これは、ドキュメントのコードサンプルがOpenAI SDKを使っており、SDKが内部で /chat/completions を自動的に付け足してくれるためです。

SurfMindの API URL 欄は、それをやってくれません。完全なエンドポイント を入力する必要があります。そのため、パスは自分で追加する必要があります。

  • ドキュメントのベースURL: https://api.poe.com/v1
  • SurfMindに貼り付けるもの: https://api.poe.com/v1/chat/completions

Models URL 欄(利用可能なモデルを自動で一覧表示するために使用)も同じ考え方です。ベースに /models を追加します → https://api.poe.com/v1/models。

関連してよくある2つのつまずき:

  • /v1 の重複。 ベースがすでに /v1 で終わっている場合、もう1つ追加してはいけません。.../v1/v1/chat/completions は404になります。
  • 末尾のスラッシュ。 .../chat/completions/ のように末尾にスラッシュが付くと、一部のサーバーで失敗することがあります。削除してください。

ミス #4: http と https の取り違え

URLの先頭にあるプロトコルは重要で、これを取り違えると、実際にはサーバーが動いているのに「connection failed」が返ってきて、サーバーが落ちているように見えてしまいます。

  • ローカルモデルは http です。 Ollama、LM Studio、Jan、llama.cpp など、localhost 上で動くものはすべて暗号化されていない http:// で提供されます。https://localhost:11434 と入力すると失敗します。ローカルサーバーにはTLS証明書がないためです。localhost の前に https が付いたスニペットをコピーした場合は、s を削除してください。
  • クラウドプロバイダーは https です。 Poe、z.ai、Together、Groq などは https:// しか受け付けません。http:// を送ると拒否されるか、黙ってリダイレクトされます。

ブラウザのセキュリティという観点もあります。https で配信されるページは、暗号化されていない http エンドポイントへのリクエストをブロックします(「mixed content」)。SurfMindは http://localhost を信頼できる例外として扱うため、ローカルモデルは動作します。ただし、http://192.168.1.50:11434 のような暗号化されていないLAN内のIPアドレスは依然としてブロックされる場合があります。ネットワーク上の別のマシンを指定する場合は、https を優先するか、モデルをローカルの https プロキシの背後で提供してください。

目安: localhost には http、公開インターネット上のあらゆるものには https。

ミス #5: Models URLがAPI URLと一致していない

Models URL は任意です。これは、プロバイダーが提供するモデルの一覧を取得するためにSurfMindが呼び出すエンドポイントで、モデル名を入力させる代わりにドロップダウンで表示できるようにします。保存後にモデルが選択メニューに表示されない場合、たいていはこの欄が原因です。チャットエンドポイントと 同じAPI形式 を使う必要があります。

API形式 Models URL
Ollama (ネイティブ) http://localhost:11434/api/tags
OpenAI互換 (それ以外すべて) https://<host>/v1/models

よくある間違いは、これらを混在させること、つまりOpenAI互換プロバイダーに /api/tags を使ったり、Ollamaネイティブの /api/chat に /v1/models を使ったりすることです。Self-hosted の Ollama の行から接続した場合は、ここは正しく自動入力されています。そのままにしてください。

空欄にしてよい場合: 一部のプロバイダーは、公開のモデル一覧エンドポイントを提供していないか、ブロックしています。それで問題ありません。Models URLは空欄のままにして、モデル欄に正確なモデルidを自分で入力してください(ミス #8 を参照)。チャットは問題なく機能します。自動入力のドロップダウンが使えないだけです。

ミス #6: APIキーの形式(Bearer vs x-api-key)

カスタムフォームでは、Authentication と API Key Format が、キーをリクエストに どう 付加するかを決めます。間違ったものを選ぶと、完全に有効なキーであっても 401 Unauthorized が返ってきます。選択肢は次のとおりです。

設定 SurfMindが送るもの こういう場合に使う
No authentication 何も送らない ローカルモデルは通常認証不要ですが、実際の構成を確認しておく価値があります。
API Key → Authorization: Bearer Authorization: Bearer <your key> ほぼすべてのクラウドプロバイダー: Poe、z.ai、Together、Groq、DeepSeek、Mistral、Fireworks、xAI、AWS Bedrock。OpenAI互換APIではこれがデフォルトです。
API Key → x-api-key x-api-key: <your key> Anthropic系のAPIや、Bearerトークンではなく生のキーヘッダーを期待する一部のプロバイダー。
API Key → Custom header <your header>: <your key> 独自の名前のヘッダーからキーを読み取るゲートウェイやプロキシ。

そして API Key 欄には、キーそのものだけを入れます。

  • Bearer という語は入力 しない でください。Authorization: Bearer を選ぶとSurfMindが付加します。
  • 末尾にスペースを残 さない でください(401の意外とよくある原因です)。
  • ローカルモデル では No authentication を選びます。(LM Studioは例外で、何らかの 空でない値を求めます。LM Studio自身のドキュメントでは lm-studio を使っています。)

どの形式を使うか分からない場合: OpenAI互換プロバイダーの99%は Authorization: Bearer を使います。x-api-key を選ぶのは、プロバイダーのドキュメントに x-api-key ヘッダーが明示されている場合だけにしてください。それでも401が出る場合は、キーを再生成し、形式の選択を再確認し、余計なスペースがないか確認してください。

ミス #7: CORS — ローカルだけの落とし穴

ブラウザは、ローカルサーバーが拡張機能からのリクエストを明示的に許可していない限り、そのサーバーの呼び出しを拒否します。これは特に ローカル 構成でつまずく点です(外部プロバイダーはすでに許可しています)。

  • Ollama: ブラウザアクセスを有効にして起動します。

    # Mac/Linux
    OLLAMA_ORIGINS="*" ollama serve
    
    # Windows (PowerShell)
    $env:OLLAMA_ORIGINS="*"; ollama serve

    「port 11434 already in use」と出ますか? Ollamaのバックグラウンドアプリがすでに動いています。まずそれを終了し(Macではメニューバー、Windowsではシステムトレイ)、それから上のコマンドを実行してください。

  • LM Studio: Developer / ローカルサーバータブで、サーバーを起動する前に Enable CORS をオンに切り替えます。

もう1つの細かい点: localhost で接続できない場合は、代わりに 127.0.0.1 を試してください(逆も同様)。システムによっては、両者が同じように解決されないことがあります。

ミス #8: モデル名は完全に一致させる必要がある

接続できたら、選択する モデル名 がプロバイダーの期待するものと、大文字小文字を含めて完全に一致している必要があります。これは、モデルを自動で一覧表示しないプロバイダーや、独特な命名規則を使うプロバイダーでつまずきやすいポイントです。

  • Poe は Claude-Sonnet-4.6 や GPT-5.4 のような表示用のボット名を使います。Poe上に表示されているとおり、正確にコピーしてください。
  • z.ai は glm-4.6 や glm-5 のようなidを使います。
  • Together AI は名前空間付きのidを使います: meta-llama/Llama-3.3-70B-Instruct-Turbo、deepseek-ai/DeepSeek-V3。
  • Fireworks はフルパスのidを使います: accounts/fireworks/models/llama-v3p3-70b-instruct。

接続はできるのに「model not found」が出る場合、ほぼ必ずモデル名のタイプミスか大文字小文字の間違いです。SurfMindがModels URL経由でモデルを自動で一覧表示できるときは、入力せずに一覧から選んでください。

クイックリファレンス: ローカルモデル

これらはすべて自分のマシン上で動きます。Ollama、LM Studio、vLLM、llama.cpp、Open WebUIは、Modelsページの Self-hosted にすでに用意されています。 Connect をクリックすれば、下記のURLが自動で入力されます。Jan と LocalAI の場合は、Custom Providers / API をクリックしてURLを貼り付け、Authentication を No authentication に設定します。ランナーのポートを変更している場合は、それに合わせてURLを編集してください。プロバイダー名は各ツールのセットアップドキュメントにリンクしています。

Ollama

  • API URL: http://localhost:11434/api/chat
  • Models URL: http://localhost:11434/api/tags
  • APIキー: なし

LM Studio

  • API URL: http://localhost:1234/v1/chat/completions
  • Models URL: http://localhost:1234/v1/models
  • APIキー: 空でない任意の値(例: lm-studio)

Jan

  • API URL: http://localhost:1337/v1/chat/completions
  • Models URL: http://localhost:1337/v1/models
  • APIキー: なし(またはJanのキー)

llama.cpp

  • API URL: http://localhost:8080/v1/chat/completions
  • Models URL: http://localhost:8080/v1/models
  • APIキー: なし(--api-key を付けて起動した場合を除く)

vLLM

  • API URL: http://localhost:8000/v1/chat/completions
  • Models URL: http://localhost:8000/v1/models
  • APIキー: 設定した場合は --api-key の値

LocalAI

  • API URL: http://localhost:8080/v1/chat/completions
  • Models URL: http://localhost:8080/v1/models
  • APIキー: なし

OpenWebUI: 「APIキー不要」の例外です。OpenWebUIにはAPIキーが必要で、パスも /v1/... ではなく /api/... です。Self-hosted の一覧から接続し、Settings → Account → API keys で取得した sk-… のキーを貼り付けてください。一般的なDockerでのインストールなら http://localhost:3000 を、別の場所で動かしている場合はそのサーバーのアドレスを使います。

  • API URL: http://localhost:3000/api/chat/completions
  • Models URL: http://localhost:3000/api/models
  • APIキー: OpenWebUIのキー(sk-…)

詳しいセットアップ手順とトラブルシューティングは、OpenWebUI APIガイド にまとめています。

これらのいずれでも、CORSのステップ(ミス #7)をお忘れなく。特にOllamaについては、スクリーンショット付きの詳しい手順を Ollamaガイド にまとめています。また、最初の2つで迷っている場合は Ollama vs LM Studio をご覧ください。

クイックリファレンス: 人気のAIプロバイダー

以下のプロバイダーはすべて、Modelsページの Providers にすでに用意されています。 Connect をクリックしてキーを貼り付けるだけで、URLは自動で入力されます。ここでは参考として、また Custom Providers / API から手動で追加したい場合のためにURLを掲載しています(その場合は Authentication を API Key に、形式を Authorization: Bearer に設定します)。プロバイダー名は各プロバイダーのAPIドキュメントにリンクしています。

Poe — 1つのキーで数百のモデル(Claude、GPT、Gemini、Llama…)を利用でき、料金はPoeのサブスクリプションポイントから引かれます。モデル名は表示用のボット名で、Poe上に表示されているとおり正確にコピーしてください(例: Claude-Sonnet-4.6、GPT-5.4)。キーは poe.com → Settings → API key から取得します。

  • API URL: https://api.poe.com/v1/chat/completions
  • Models URL: https://api.poe.com/v1/models

CanopyWave — オープンモデル(Kimi、DeepSeek、Llama、Qwen)を提供するGPUクラウドプロバイダー。キーはCanopyWaveのダッシュボードから取得します。

  • API URL: https://inference.canopywave.io/v1/chat/completions
  • Models URL: https://inference.canopywave.io/v1/models

z.ai (GLM) — ZhipuのGLMモデル(glm-4.6、glm-5)。注意: z.aiは別途、Coding Planエンドポイント(https://api.z.ai/api/coding/paas/v4)とPaaSエンドポイント(https://api.z.ai/api/paas/v4)も公開しています。下記のOpenAI互換のものを使い、余計な /v1 を追加しないでください。

  • API URL: https://api.z.ai/api/openai/v1/chat/completions
  • Models URL: https://api.z.ai/api/openai/v1/models

Together AI — オープンモデルの大規模なカタログ。モデルidは長く(meta-llama/Llama-3.3-70B-Instruct-Turbo)、Togetherのモデルページから正確にコピーしてください。

  • API URL: https://api.together.xyz/v1/chat/completions
  • Models URL: https://api.together.xyz/v1/models

Groq — 非常に高速な推論。注意点: パスは単なる /v1 ではなく /openai/v1 です。

  • API URL: https://api.groq.com/openai/v1/chat/completions
  • Models URL: https://api.groq.com/openai/v1/models

DeepSeek — 現在のモデルは deepseek-v4-flash と deepseek-v4-pro です(旧来の deepseek-chat / deepseek-reasoner のエイリアスは廃止が進んでいます。最新情報はDeepSeekのドキュメントを確認してください)。/v1 は任意で、DeepSeekは付けても付けなくてもURLを受け付けます。

  • API URL: https://api.deepseek.com/v1/chat/completions
  • Models URL: https://api.deepseek.com/v1/models

Mistral — mistral-large-latest、mistral-small-latest など。標準的なOpenAI互換です。

  • API URL: https://api.mistral.ai/v1/chat/completions
  • Models URL: https://api.mistral.ai/v1/models

Fireworks AI — 注意点: パスは /v1 ではなく /inference/v1 です。モデルidは accounts/fireworks/models/llama-v3p3-70b-instruct のような形です。

  • API URL: https://api.fireworks.ai/inference/v1/chat/completions
  • Models URL: https://api.fireworks.ai/inference/v1/models

xAI (Grok) — Grokモデル(grok-4 など)。標準的なOpenAI互換です。

  • API URL: https://api.x.ai/v1/chat/completions
  • Models URL: https://api.x.ai/v1/models

AWS Bedrock — Bedrockには現在OpenAI互換のエンドポイントがありますが、2つの注意点があります。ホストはリージョン固有(例: us-west-2)で、パスは /openai/v1 です。通常のAWSアクセスキー/SigV4ではなく、Bedrock APIキー(コンソールで生成するベアラートークン)を使う必要があります。モデルidは openai.gpt-oss-120b-1:0 のような形です。Providersの一覧からBedrockを接続する場合は、ドロップダウンでリージョンを選ぶと、SurfMindがURLを組み立ててくれます。

  • API URL: https://bedrock-runtime.<region>.amazonaws.com/openai/v1/chat/completions
  • Models URL: 空欄のまま — モデルidは後で入力します

それでも接続できない? 最後に確認すること

このリストを上から順に進めてください。

  1. まずModelsページを確認する。 使っているプロバイダーが一覧にあれば、カスタム登録ではなくそこから接続してください。
  2. API URLのホストをブラウザで開く。 ローカルサーバーが読み込まれない → 起動していないか、ポートが間違っています。
  3. パスを読み直す。 Ollama → /api/chat。それ以外すべて → /v1/chat/completions(または表にあるプロバイダー固有のパス)。
  4. ベースではなくエンドポイント全体を貼り付けたか確認し、/v1 の重複や末尾のスラッシュがないことを確認します。
  5. 401? キーかその形式です。形式 = Authorization: Bearer、キーはスペースなし、Bearer の接頭辞なし。
  6. 404「model not found」? 接続は問題ありません。モデル名を修正してください(大文字小文字も正確に)。
  7. ローカルモデルで、ブラウザがブロックしている? CORSを有効にし(OLLAMA_ORIGINS="*" またはLM Studioのトグル)、127.0.0.1 と localhost を試してください。

この手順で、設定に関するほとんどの問題を解決できます。

それでも解決しない場合は

チェックリストを一通り試してもプロバイダーがどうしても接続できない場合は、試しているプロバイダーと表示されるエラーを添えて wave@surfmind.ai までメールでお問い合わせください。接続できるようお手伝いします。


接続できましたか? 次に読もうとしていたページでSurfMindを開いて、あなたのモデルを活用しましょう。

SurfMindを入手する →

関連記事

すべて表示