14 KiB
14 KiB
LLM プロバイダ統合の外部事例
調査日: 2026-04-19。プロバイダ認証経路・ollama launch 等の時事的項目は陳腐化が早い。数値・URLは一次ソースで再確認すること。
各ハーネスのプロバイダ対応方式
Zed
- ネイティブ: Anthropic / OpenAI / Google / Ollama / DeepSeek / Mistral / OpenRouter / Vercel AI Gateway
openai_compatibleスロットで任意プロバイダ追加- OpenRouter は宣言型:
available_models[]にmax_tokens/supports_tools等の capability を書く。自動 discovery ではない - Ollama は
auto_discover: boolでローカル tag 自動列挙 - https://zed.dev/docs/ai/llm-providers
OpenCode (sst/opencode)
- Vercel AI SDK + Models.dev で 75+ プロバイダ
- 認証は
~/.local/share/opencode/auth.jsonに統一保存(OAuth / APIキー / その他の3種別) - 2026-03-19 に Anthropic OAuth 対応を削除(PR #18186)。詳細は後述
- ChatGPT ブラウザ認証 (
/connect) は存続 - https://opencode.ai/docs/providers/
OpenClaw
- Peter Steinberger らの個人向け self-hosted AI(OpenCode と別物)
- 30+ プロバイダ対応
- Anthropic 独自 OAuth 実装は縮小、現在は
claude -p(Claude Code CLI) の subprocess 再利用を推奨 - OpenRouter は「OpenAI 互換プロキシ」扱いで固有機能 (serviceTier, prompt-cache hints) は転送しない
- https://docs.openclaw.ai/concepts/model-providers
Aider / Cline / Roo / Continue.dev
- Aider は LiteLLM 経由、他は直叩き
- BLACKBOX 等マイナー系は OpenAI 互換枠で収容するのが一般パターン
認証経路の現状
Anthropic (Claude Pro / Max) ── 封鎖済み
- 2026-01-09: Anthropic がサーバ側で Pro/Max OAuth トークンに
This credential is only authorized for use with Claude Code and cannot be used for other API requestsの制限導入 - 2026-02-19: Claude Code の Legal & Compliance ページに "Authentication and credential use" セクション追加。「OAuth 認証は Claude Code 等の通常利用のため専用」「Agent SDK を含む第三者製ツールで Free/Pro/Max 資格情報を経由するのは許可しない」と明記
- 2026-03-19: OpenCode が PR #18186 で以下を削除
packages/opencode/src/session/prompt/anthropic-20250930.txt(Claude Code 風システムプロンプト)opencode-anthropic-auth@0.0.13ビルトインプラグインclaude-code-20250219beta ヘッダ
- 代替検討:
claude -p(Claude Code の headless mode) を subprocess で呼ぶ方式。ACP ではなく素朴な CLI fork であり、insomnia では採用しない - https://code.claude.com/docs/en/legal-and-compliance
- https://github.com/sst/opencode/pull/18186
OpenAI (Codex CLI / Responses)
- Codex CLI は Apache-2.0 で公開されている。insomnia の Codex OAuth 経路は、Codex CLI と同じ Responses 系 wire behavior に寄せる
- Codex CLI の認証ストアと conversation header / request compression / SSE behavior を参考にする
- OpenCode の
/connectで ChatGPT ブラウザ認証が通る - コミュニティ評価: 「Anthropic は walled garden、OpenAI はむしろ取り込みに来た」
- https://github.com/openai/codex/discussions/8338
- https://developers.openai.com/codex/auth
CLI fork 方式 (claude -p)
claude --print/claude -pは Claude Code の非対話(headless)モード。プロンプトを stdin/引数で受け stdout に返す- ACP ではなく素朴な subprocess 呼び出し
- OpenClaw と OpenCode コミュニティフォーク (
griffinmartin/opencode-claude-auth) が採用 - insomnia では専用 API integration ではないため採用しない
Ollama の統合機構
ollama launch <tool>
- v0.14.0 (2026-01) 以降、Ollama サーバ本体に Anthropic Messages API 互換レイヤーが組み込まれた
- 別プロセスのプロキシは起動しない。Ollama コア (
localhost:11434) が/v1/messages相当を喋る(streaming / system prompt / tool calling / extended thinking / vision 対応) ollama launch claudeはサブコマンドバイナリを fork し、子プロセスに env を注入ANTHROPIC_BASE_URL=http://localhost:11434ANTHROPIC_AUTH_TOKEN=ollamaANTHROPIC_API_KEY=(空)
- 設定ファイル書き換えやシェル rc 操作はしない
ANTHROPIC_BASE_URLはハードコードでOLLAMA_HOSTを見ない(issue #13936)- サブコマンド
claude/codex/opencode/droid/clawdbotは「ツール毎の env 注入テンプレート」の集合体- 例:
opencodeはOPENCODE_CONFIG_CONTENTに JSON を流し込み OpenCode 側で deep-merge codexは OpenAI 互換 (/v1/chat/completions) を向けるので Anthropic 系ではなく OpenAI 系 env を設定
- 例:
- https://ollama.com/blog/launch
- https://ollama.com/blog/claude
- https://github.com/ollama/ollama/issues/13936
Ollama クラウド
ollama signinは OAuth ではなく Ed25519 鍵ペア登録。~/.ollama/id_ed25519(秘密鍵)と.pub(公開鍵)をローカル保存、ブラウザでollama.com/connectから公開鍵をアカウントに紐付け- ルーティング:
server/routes.goのGenerateHandler/ChatHandlerがモデル名をパースし、:cloudサフィックスならserver/cloud_proxy.go経由でollama.com:443に中継 - 署名: タイムスタンプ付きチャレンジを Ed25519 秘密鍵で署名し
Authorizationヘッダに載せる - レスポンスは 32KB バッファで chunk 中継
- クライアントは
localhost:11434のままでよい。ローカル Ollama デーモンが透過プロキシ役を果たす ollama.com/apiを直叩きしたいときのみOLLAMA_API_KEYを別途発行- https://github.com/ollama/ollama/blob/main/server/cloud_proxy.go
OpenAI 互換プロバイダ事例
「共通 OpenAI 互換枠」で収容する代表的プロバイダ。base_url + API key 差し替えで動く。
xAI (Grok)
base_url:https://api.x.ai/v1(OpenAI SDK 互換、Anthropic SDK 互換レイヤーも提供)- 主要モデル:
grok-code-fast-1— 256K ctx、$0.20/$1.50 /1M tok、SWE-bench 70.8%、142 tok/s(Sonnet の 1/10 以下の単価)grok-4-1-fast— 2M ctx、$0.20/$0.50 /1M tok(長文向け差別化)grok-4— 256K ctx、$3.00/$15.00 /1M tok
- プロンプトキャッシュあり(50–75% 引)、Batch API 50% 引
- 認証は API key のみ、OAuth なし
- サブスク(X Premium+ / SuperGrok / SuperGrok Heavy)は UI 専用で API 枠を含まない
- Zed / OpenCode / Cline / Cursor に第一級サポートあり
- https://docs.x.ai/developers/models
Groq
base_url:https://api.groq.com/openai/v1(OpenAI SDK 互換)- 特徴: LPU で TTFT <100ms、モデル別 TPS 500–1000(
gpt-oss:120bで 500 tok/s 等) - 主要モデル:
- GPT-OSS 120B — $0.15/$0.60 /1M tok、128K ctx
- Kimi K2-0905 — $1.00/$3.00、256K ctx(open モデル最強クラス)
- Llama 3.3 70B Versatile — $0.59/$0.79、131K ctx
- Qwen3 32B — $0.29/$0.59、131K ctx
- tool_use / JSON mode / streaming すべて OpenAI 互換
- プロンプトキャッシュ 50% 引、Batch API 50% 引
- Qwen3-Coder-480B は未提供。Coder 用途は Together / Cerebras 等で補完する前提
- Cerebras 比較: GPT-OSS 120B で Cerebras ~3000 tok/s vs Groq ~476 tok/s。throughput は Cerebras、TTFT は Groq
- 月額サブスクは Enterprise のみ、通常は従量
- https://groq.com/pricing
- https://console.groq.com/docs/api-reference
BLACKBOX AI
base_url:https://cloud.blackbox.ai/api(OpenAI 互換 REST)、Bearerbb_*トークン- 主要ハーネスに専用サポートなし。共通枠で登録するのが実用
- Unlimited プランは FUP 非公開で実態不明
- https://docs.blackbox.ai/api-reference/authentication
OpenRouter
base_url:https://openrouter.ai/api/v1- 多数のプロバイダを単一 API で束ねる(料金は passthrough + プリペイド手数料 5.5%)
- BYOK: 月 100 万 req 無料、超過で元コストの 5%
:freeモデル 50 req/日($10 入金で 1000 req/日)- https://openrouter.ai/docs
プロバイダ独自拡張
各プロバイダが OpenAI 互換エンドポイントに載せている独自機能。詳細は llm-pricing-2026-04.md と合わせて参照。
OpenAI 本家
/v1/responsesstateful API、previous_response_id、reasoning.effort(minimal/low/medium/high/xhigh)、reasoning.summary: "auto"、store=false/ ZDR 組織で強制- 高次ツール:
web_search/code_interpreter/computer_use max_tokens→max_completion_tokens(o系) →max_output_tokens(Responses) のリネーム
xAI (Grok)
- OpenAI + Anthropic 両 SDK 互換(Anthropic 互換は deprecated、native 推奨)
reasoning_effort: low/highは Grok-3 mini 系のみ、Grok-4 系は常時 reasoning- Deferred Chat Completions で
request_idによる非同期取得 - Live Search
Groq
service_tier: on_demand / flex / auto(flex は 10x rate、失敗許容、paid 限定)- prompt caching は自動・追加料金なし・コード変更なし
reasoning_formatで reasoning の提示方式制御(JSON 出力との両立)
DeepSeek
deepseek-reasonerはレスポンスにreasoning_content別フィールド- reasoner では function calling 非対応
- 入力に
reasoning_contentを含めると 400 - 自動 prefix cache (64 tok 単位、hit で 90% 割引)
Cerebras / Together AI
- JSON schema / tool calling / multi-turn tool calling / streaming + structured を全モデル対応
Fireworks
- Grammar mode (BNF) が独自、任意出力形式を制約可能
OpenRouter
providerでルーティング/フォールバック、transformsで自動中抜きreasoning統一インターフェースで各社差を吸収
Ollama
/v1/chat/completionsは "experimental" 明記- stream + tools で単一ブロック返却のバグ (#9092)
- context size は Modelfile の
num_ctxで固定(API 側で設定不可) - native
/api/chatの方が機能フル - v0.14+ で
/v1/messages(Anthropic 互換) も追加
Azure OpenAI
- URL が
{resource}/openai/deployments/{name}/chat/completions?api-version=...、model_id ではなく deployment 名 - content filter が
finish_reason: content_filterや 400 で観測
Capability 軸
モデル/プロバイダごとの機能差を表現する軸。プロバイダ側高次ツール (web_search / code_interpreter / computer_use / Live Search) は insomnia では使用しない方針のため capability 軸から除外。
1. tool calling
parallel tool calls 可否、tool_choice 対応度。DeepSeek reasoner のような「reasoner + tool 非対応」ケースあり。
2. structured output
json_objectのみjson_schema対応- Grammar (Fireworks 独自)
3. reasoning
reasoning.effort(OpenAI / xAI)thinking.budget_tokens(Anthropic)reasoning_content別フィールド出力 (DeepSeek)reasoning_format(Groq)- OpenRouter は
reasoningに統一投影
4. vision
モデル依存度が大
5. prompt caching
呼び出し側ロジックから見て 2 値に集約:
- Explicit:
cache_controlマーカー挿入(Anthropic のみ) - Auto: scheme はマーカー挿入しない(OpenAI / DeepSeek / Groq の自動 prefix も、サーバ側で何もしないケースも同じ扱い)
付随パラメータ
max_tokens名の差(max_tokens/max_completion_tokens/max_output_tokens)、Anthropic は必須- stateful (
previous_response_id) は OpenAI Responses のみ - streaming SSE の delta 粒度・usage 到達タイミング差
ToolCall streaming の差異
| プロバイダ | ToolCall 引数の streaming |
|---|---|
| Anthropic | input_json_delta partial streaming — 安定 |
| OpenAI (chat) | tool_calls[i].function.arguments partial — 安定、parallel 時は複数 index 並走 |
| OpenAI Responses | reasoning item が別構造(summary[] / encrypted_content) |
| xAI / Groq / DeepSeek | OpenAI 互換、chat と同じ |
| Gemini | function_call は delta なし、一括で返る |
Ollama /v1 |
stream + tools で delta が欠けるバグ (#9092) |
Ollama /api/chat |
native API、安定 |
→ Gemini / Ollama /v1 は scheme アダプタで「BlockStart → InputJson(全体 1 回) → BlockStop」の擬似ストリーム化で共通化可能。
insomnia での採用方針
第一級サポート(専用アダプタ)
- Ollama API — ローカル +
:cloudサフィックスで透過的にクラウド中継。エンドポイントはlocalhost:11434で統一 - Codex OAuth —
~/.codex/auth.jsonを読み、Codex CLI 互換の Responses 経路として扱う。conversation header / compression / SSE behavior は公開実装に合わせる - Anthropic API — 従量 API key 経路のみ
二次サポート(共通 OpenAI 互換枠)
provider_kind: openai_compatible+base_url+available_models[]の共通スロットで OpenRouter / xAI / Groq / Together / Fireworks / DeepInfra / BLACKBOX 等を一括収容- ルーター系は後追いで追加しやすい宣言型設計
非サポート
- Claude Pro/Max OAuth 経路 — 2026-01-09 サーバ側ブロック、2026-02-19 に第三者ツール経由の利用制限を明文化。第一級機能としては採用しない
claude -pCLI fork も専用 API integration ではないため実装しない
実装原則
- 認証アダプタ(外部 CLI の認証ストアを読む類)は llm-worker 直下ではなく上位アダプタ層に配置。llm-worker は低レベル基盤に留める原則(project memory)と整合
- モデル列挙は
auto_discoverと宣言型の両輪。Ollama は自動、ルーター系は宣言 ollama launch insomnia対応を視野に入れ、env 注入 (ANTHROPIC_BASE_URL/OPENAI_BASE_URL等) で起動設定を受け入れる作り