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

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

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

SurfMindは、特定のモデルだけに縛られることはありません。Custom Model API(カスタムモデルAPI)を通じて、自分のマシン上で動かしているモデル(Ollama、LM Studio、Jan、llama.cpp、vLLM)や、OpenAIの補完APIに対応したほぼあらゆる外部AIプロバイダー(Poe、z.ai、Together、Groq、DeepSeek、AWS Bedrockなど数十種類)に接続先を向けることができます。

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

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

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

60秒チェックリスト

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

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

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

各欄に入力する内容

Custom タブ → Add Custom Models を開くと、「Custom Model API」フォームが表示されます。各欄に入力すべき内容は次のとおりです。

入力する内容
API Name 好きなラベル(例:「Groq」や「My Ollama」)。ドロップダウンの矢印をクリックすると preset(プリセット)を読み込めます。OllamaとOpenAI互換の汎用オプションが用意されており、選ぶと残りの欄を自動入力してくれます。
API URL ベースURLではなく、チャットエンドポイント全体。Ollamaなら http://localhost:11434/api/chat、それ以外はすべて /chat/completions で終わります。ミス #1 を参照。
Models URL (任意) 利用可能なモデルを一覧するエンドポイント。これを指定すると、SurfMindがモデル名を入力させる代わりにドロップダウンで表示できます。Ollama: /api/tags。OpenAI互換: /v1/models。一覧エンドポイントがないプロバイダーは空欄でかまいません。その場合はモデルidを自分で入力します。
API Key Header キーの送り方。None = 認証なし(ローカルモデル)。Authorization = Authorization: Bearer <key> で、ほぼすべてのクラウドプロバイダーが使用します。x-api-key = x-api-key: <key> で、Anthropic系のAPIや一部のプロバイダーが使用します。
API Key (任意) キーそのものだけを入力します。Bearer という語は入力しないでください。SurfMindが自動で付加します。ローカルモデルでは空欄のままにします。

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

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

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

この世界には、2つの異なるAPIの「方言」があります。

  • Ollamaのネイティブ APIhttp://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
OpenAI互換のすべて https://<host>/v1/chat/completions

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

ミス #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

114341234 は典型的な取り違えです。一見すると混同しやすいのですが、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: Models URLがAPI URLと一致していない

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

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

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

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

ミス #5: API Key Header(Bearer vs x-api-key)

API Key Header ドロップダウンは、キーをリクエストに どう 付加するかを決めます。間違ったものを選ぶと、完全に有効なキーであっても 401 Unauthorized が返ってきます。選択肢は3つあります。

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

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

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

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

ミス #6: 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 を試してください(逆も同様)。システムによっては、両者が同じように解決されないことがあります。

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

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

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

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

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

これらはすべて自分のマシン上で動きます。SurfMindの Custom タブ → Add Custom Models を開き、対応するプリセットを選び(Ollamaには専用のプリセットがあり、それ以外は汎用の OpenAI-compatible プリセットを使います)、API Key HeaderNone に設定します。プロバイダー名は各ツールのセットアップドキュメントにリンクしています。

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キー: なし

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

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

これらのクラウドプロバイダーはすべてOpenAI互換のAPIに対応しています。汎用の OpenAI-compatible プリセットを使い、API Key HeaderAuthorization に設定し(すべてBearerトークンを使います)、キーを貼り付けてください。プロバイダー名は各プロバイダーのAPIドキュメントにリンクしています。

Poe — 1つのキーで数百のモデル(Claude、GPT、Gemini、Llama…)を利用でき、料金はPoeのサブスクリプションポイントから引かれます。モデル名は表示用のボット名で、Poe上に表示されているとおり正確にコピーしてください(例: Claude-Sonnet-4.6GPT-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.6glm-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-flashdeepseek-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

Mistralmistral-large-latestmistral-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 のような形です。

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

それでも接続できない? 最終トリアージ

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

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

この手順で、設定の大多数は解決します。

それでも助けが必要ですか?

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


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

SurfMindを入手する →

最近の投稿

すべて表示
SurfMindでローカルLLMやカスタムAIをブラウザに接続する | SurfMind Blog