「なぜOpenCodeでClaudeモデルを使うと頻繁に切断されるのか?」——これは、OpenCode(現在はCrushに改名)でClaudeモデルを利用する多くの開発者が頭を悩ませている問題です。その核心的な理由は非常にシンプルです。OpenCodeはAnthropicのネイティブSDKを使用してClaudeを呼び出しますが、多くのサードパーティ製API中継サービスはOpenAI互換フォーマットしかサポートしておらず、フォーマットの不一致が頻繁なエラーや接続断を引き起こしているのです。
核心的価値: 本記事を読むことで、OpenCodeがClaudeを呼び出す際の基盤アーキテクチャ、よくある3つの切断原因、そしてAPIYIのAnthropicネイティブフォーマットインターフェースを通じてこの問題を根本的に解決する方法を理解できます。

OpenCodeとは:OpenCodeからCrushへ
OpenCodeは、Go言語ベースのターミナルAIコーディングアシスタントで、Bubble Teaフレームワークを使用して洗練されたTUI(ターミナルユーザーインターフェース)を構築しています。プロジェクトはGitHubで11,600以上のスターを獲得し、後にCharmチームに統合され、Crush(charmbracelet/crush、22,200以上のスター)へと改名されました。
| プロジェクト情報 | 詳細 |
|---|---|
| 旧名称 | OpenCode (opencode-ai/opencode) |
| 現名称 | Crush (charmbracelet/crush) |
| 開発言語 | Go |
| インターフェース | TUI (Bubble Tea) |
| GitHub Stars | 22,200+ (Crush) |
| 対応AIプロバイダー | Anthropic, OpenAI, Gemini, Groq, OpenRouter, xAI, Bedrock, Azure |
| ツールシステム | ファイル操作, Bash, Grep, Glob, LSP, MCP |
| オープンソースライセンス | MIT |
OpenCodeとClaude Code、Aiderの主な違い
| 特性 | OpenCode/Crush | Claude Code | Aider |
|---|---|---|---|
| マルチプロバイダー対応 | 7社以上のネイティブSDK | Anthropicのみ | マルチプロバイダー |
| APIフォーマット | 各社のネイティブフォーマット | Anthropicネイティブ | 主にOpenAI互換 |
| Claude呼び出し方式 | Anthropic SDKネイティブ | Anthropic SDKネイティブ | OpenAI互換フォーマット |
| 思考拡張 | 条件付きトリガー("think"キーワード含む) | 内蔵サポート | モデル依存 |
| MCPサポート | 対応 | 対応 | 非対応 |
| UI | TUIグラフィカルインターフェース | CLI + TUI | CLIのみ |
重要な違い: OpenCodeは各AIプロバイダーに対してネイティブSDKを使用しており、OpenAI互換フォーマットを一律に利用しているわけではありません。つまり、Claudeを呼び出す際はAnthropicネイティブのMessages API(/v1/messages)を使用しており、OpenAIのChat Completions API(/v1/chat/completions)ではないということです。
🎯 重要なヒント: これが問題の根源です。もし利用している中継サービスが
/v1/chat/completionsインターフェースしか提供していない場合、OpenCodeのAnthropicネイティブSDKは正しく呼び出しを行えません。APIYI(apiyi.com)はOpenAI互換フォーマットとAnthropicネイティブフォーマットの両方をサポートしており、この問題を根本的に解決できます。
description: Claude在OpenCode中频繁中断的根本原因分析及解决方案。本文详细解析了API格式不匹配、流式传输中断及思维链格式差异等问题,并提供APIYI的原生接口配置指南。
Claude 在 OpenCode 中频繁中断的 3 个根本原因

原因一:API 格式不匹配(最常见)
这是 90% 用户遇到的问题根源。
OpenCode 的 Claude 调用路径:
OpenCode → Anthropic Go SDK → POST /v1/messages
↑ Anthropic ネイティブ形式を使用
很多 API 中継サービスが提供するインターフェース:
API中継サービス → POST /v1/chat/completions のみをサポート
↑ OpenAI 互換形式
これら2つの形式では、リクエスト構造が全く異なります:
| 比較項目 | Anthropic ネイティブ (/v1/messages) |
OpenAI 互換 (/v1/chat/completions) |
|---|---|---|
| リクエストエンドポイント | /v1/messages |
/v1/chat/completions |
| 認証ヘッダー | x-api-key: sk-ant-xxx |
Authorization: Bearer sk-xxx |
| メッセージ形式 | messages: [{role, content: [{type, text}]}] |
messages: [{role, content: "text"}] |
| システムプロンプト | system: "..." (トップレベルフィールド) |
messages: [{role: "system", content: "..."}] |
| ツール呼び出し | tool_use / tool_result 型 |
function_call / tool_calls 形式 |
| ストリーミング応答 | message_start, content_block_delta |
data: {"choices": [...]} |
| 拡張思考 | thinking ブロックをネイティブサポート |
非サポート、または特殊処理が必要 |
OpenCode が Anthropic 形式のリクエストを OpenAI 形式のみをサポートするエンドポイントに送信すると、サーバーはリクエストを解析できず、エラーを返すか接続が切断されます。
原因二:ストリーミング伝送の中断
OpenCode は Anthropic SDK の Messages.NewStreaming() を使用してストリーミング応答を受け取ります。ストリーミング中のイベントシーケンスは以下の通りです:
ContentBlockStartEvent → ContentBlockDeltaEvent (複数回) → ContentBlockStopEvent → MessageStopEvent
もし API 中継サービスが Anthropic のストリーミング形式を完全にはサポートしていない場合(例:thinking_delta イベントを返さない、または content_block_stop 形式が正しくないなど)、OpenCode のイベント解析が失敗し、接続が中断されます。
OpenCode の再試行ロジックは HTTP 429(レート制限)と 529(過負荷)のみをカバーしており、その他のエラーコードは即座に終了し、再試行されません。つまり、形式エラーによる 400/500 レスポンスは即座に失敗となります。
原因三:拡張思考とツール呼び出しの形式の違い
OpenCode には Claude の拡張思考(Thinking)に対する特殊な処理ロジックがあります:
- ユーザーメッセージに "think" キーワードが含まれる場合に自動有効化
- 有効化後、
maxTokensの 80% を思考予算として割り当て - 温度(Temperature)を強制的に 1.0 に設定
API 中継サービスが Anthropic ネイティブの thinking ブロック形式をサポートしていない場合、思考内容が欠落したり、解析エラーが発生したりします。同様に、Anthropic ネイティブの tool_use / tool_result 形式も、OpenAI の function_call / tool_calls 形式とは全く異なります。
解決策:Anthropic ネイティブ形式をサポートする API インターフェースを使用する

APIYI のデュアル形式サポートアーキテクチャ
APIYI (apiyi.com) は両方の API 形式をサポートしており、開発者はツールの要件に応じて選択できます:
| 形式 | リクエストエンドポイント | 対応ツール | 機能の完全性 |
|---|---|---|---|
| Anthropic ネイティブ | https://api.apiyi.com/v1/messages |
OpenCode/Crush, Claude Code | 100% 完備 |
| OpenAI 互換 | https://api.apiyi.com/v1/chat/completions |
Aider, Cursor, 自作アプリ | 基本機能完備 |
方案一:OpenCode で Anthropic ネイティブ形式を設定する(推奨)
OpenCode の Anthropic プロバイダーは Base URL 設定項目を直接公開していないため、環境変数を通じて設定する必要があります:
# Anthropic API Key を設定(APIYI のキーを使用)
export ANTHROPIC_API_KEY="sk-あなたのAPIYIキー"
# Anthropic Base URL を設定(APIYI のネイティブインターフェースを指定)
export ANTHROPIC_BASE_URL="https://api.apiyi.com"
# OpenCode を起動
opencode
または、.opencode.json 設定ファイルで設定します:
{
"providers": {
"anthropic": {
"apiKey": "sk-あなたのAPIYIキー"
}
},
"agents": {
"coder": {
"model": "claude-sonnet-4-6",
"maxTokens": 16000
},
"task": {
"model": "claude-haiku-4-5-20251001",
"maxTokens": 8000
}
}
}
環境変数との併用:
# .bashrc または .zshrc に追加
export ANTHROPIC_API_KEY="sk-あなたのAPIYIキー"
export ANTHROPIC_BASE_URL="https://api.apiyi.com"
これにより、OpenCode は Anthropic ネイティブ SDK を介して https://api.apiyi.com/v1/messages を呼び出し、すべてのネイティブ機能(Prompt Caching、拡張思考、ネイティブツール呼び出し)を保持できます。
方案二:Local Provider を介して OpenAI 互換形式を使用する(予備)
方案一が機能しない場合は、APIYI を OpenCode の Local Provider として設定できます:
# Local エンドポイントを設定
export LOCAL_ENDPOINT="https://api.apiyi.com/v1"
export LOCAL_API_KEY="sk-あなたのAPIYIキー"
{
"providers": {
"local": {
"apiKey": "sk-あなたのAPIYIキー"
}
},
"agents": {
"coder": {
"model": "claude-sonnet-4-6",
"maxTokens": 16000
}
}
}
注意: この方案は OpenAI 互換形式(/v1/chat/completions)を使用するため、以下のネイティブ機能が失われます:
- Prompt Caching(キャッシュヒット)
- ネイティブ拡張思考(Thinking ブロック)
- Anthropic ネイティブツール呼び出し形式
💡 アドバイス: 方案一(Anthropic ネイティブ形式)を優先して使用し、完全な機能と最高の安定性を確保してください。
APIYI (apiyi.com) の管理画面でキーを取得する際、【ClaudeCode】グループを選択すると 88% 割引が適用されます。
description: APIYI を使用して Claude API を呼び出すための完全ガイドです。Anthropic ネイティブ形式と OpenAI 互換形式の両方の設定方法、推奨モデル、主要な AI コーディングツールへの接続方法を解説します。
APIYI Claude API 呼び出し完全ガイド
APIキーの取得と設定
| 手順 | 操作 | 説明 |
|---|---|---|
| 1. キーの取得 | api.apiyi.com/token にアクセス |
管理画面のトークン管理ページ |
| 2. トークンの選択 | デフォルトまたは新規作成 | 新規作成時に【ClaudeCode】グループを選択すると 12% OFF |
| 3. ベースURLの確認 | https://api.apiyi.com |
統一されたエンドポイント |
対応している2つのリクエスト形式
形式1:Anthropic ネイティブ形式(OpenCode/Claude Code 推奨)
リクエストURL: https://api.apiyi.com/v1/messages
import anthropic
client = anthropic.Anthropic(
api_key="sk-あなたのAPIYIキー",
base_url="https://api.apiyi.com"
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=4096,
messages=[
{"role": "user", "content": "Pythonでクイックソートを書いてください"}
]
)
print(message.content[0].text)
形式2:OpenAI 互換形式(Aider/Cursor/自作アプリ推奨)
リクエストURL: https://api.apiyi.com/v1/chat/completions
import openai
client = openai.OpenAI(
api_key="sk-あなたのAPIYIキー",
base_url="https://api.apiyi.com/v1"
)
response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[
{"role": "user", "content": "Pythonでクイックソートを書いてください"}
]
)
print(response.choices[0].message.content)
対応 Claude モデル一覧
最新の主力モデル(推奨):
| モデル ID | シリーズ | 特徴 | 推奨用途 |
|---|---|---|---|
claude-opus-4-6 |
Opus | 最高峰の推論能力 | 複雑なアーキテクチャ設計、詳細な分析 |
claude-sonnet-4-6 |
Sonnet | 性能のバランス | 日常的なコーディング、コードレビュー |
claude-haiku-4-5-20251001 |
Haiku | 高速レスポンス | 単純なタスク、分類、抽出 |
推論モデル(拡張思考を強制有効化):
| モデル ID | 説明 |
|---|---|
claude-opus-4-6-thinking |
Opus + 強制推論 |
claude-sonnet-4-6-thinking |
Sonnet + 強制推論 |
claude-haiku-4-5-20251001-thinking |
Haiku + 強制推論 |
推論モデルは標準モデルと同一のベースモデルを使用していますが、拡張思考(thinking)が強制的に有効化され、より詳細な推論プロセスが出力されます。深い分析が必要なタスクに適しています。
Anthropic ネイティブ形式での拡張思考呼び出しコード
import anthropic
client = anthropic.Anthropic(
api_key="sk-あなたのAPIYIキー",
base_url="https://api.apiyi.com"
)
# thinking モデルを使用して拡張思考を強制
message = client.messages.create(
model="claude-sonnet-4-6-thinking",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000 # 思考トークンの予算
},
messages=[
{"role": "user", "content": "このコードの時間計算量を分析して最適化してください"}
]
)
for block in message.content:
if block.type == "thinking":
print(f"思考プロセス:\n{block.thinking}")
elif block.type == "text":
print(f"最終回答:\n{block.text}")
🚀 クイックスタート: APIYI
api.apiyi.com/tokenにアクセスしてキーを取得し、
【ClaudeCode】グループを選択して 12% OFF の特典を受け取りましょう。
1つのキーで Anthropic ネイティブ形式と OpenAI 互換形式の両方に対応しており、
OpenCode、Claude Code、Aider、Cursor など、主要な AI コーディングツールすべてで利用可能です。
AI コーディングツール別の最適な接続方法
| ツール | 推奨インターフェース | Base URL | 推奨モデル |
|---|---|---|---|
| OpenCode/Crush | Anthropic ネイティブ | https://api.apiyi.com |
claude-sonnet-4-6 |
| Claude Code | Anthropic ネイティブ | https://api.apiyi.com |
claude-sonnet-4-6 |
| Aider | OpenAI 互換 | https://api.apiyi.com/v1 |
claude-sonnet-4-6 |
| Cursor | OpenAI 互換 | https://api.apiyi.com/v1 |
claude-sonnet-4-6 |
| Cline (VS Code) | OpenAI 互換 | https://api.apiyi.com/v1 |
claude-sonnet-4-6 |
| 自作アプリ (Python) | 両方可 | 上記参照 | 用途に応じて選択 |
各ツールの設定クイックリファレンス
OpenCode/Crush:
export ANTHROPIC_API_KEY="sk-あなたのAPIYIキー"
export ANTHROPIC_BASE_URL="https://api.apiyi.com"
Claude Code:
export ANTHROPIC_API_KEY="sk-あなたのAPIYIキー"
export ANTHROPIC_BASE_URL="https://api.apiyi.com"
claude
Aider:
export OPENAI_API_KEY="sk-あなたのAPIYIキー"
export OPENAI_API_BASE="https://api.apiyi.com/v1"
aider --model claude-sonnet-4-6
🎯 一元管理: APIYI (apiyi.com) なら、1つのキーですべての AI コーディングツールの API 呼び出しを管理できます。
Claude、GPT、Gemini など 300 以上のモデルをサポートし、課金も管理も一元化可能です。
よくある質問
Q1: OpenCode で “agent coder not found” というエラーが出る場合は?
これは OpenCode で最もよくあるエラーで、有効な AI プロバイダーの設定が見つからないことを示しています。以下の点を確認してください。1) ANTHROPIC_API_KEY 環境変数が設定されており、有効であること。2) .opencode.json 内の providers.anthropic.apiKey が正しいこと。3) APIキーに残高があること。APIYI (apiyi.com/token) で取得したキーは、他の設定なしでそのまま使用可能です。
Q2: なぜ OpenAI 互換形式よりも Anthropic ネイティブ形式の方が安定しているのですか?
OpenCode は Anthropic 公式の Go SDK を直接使用しており、SDK 内部で Anthropic 特有のストリーミングイベント形式、リトライロジック、エラー処理が適切に管理されているためです。OpenAI 互換形式を経由すると中間層での変換が必要となり、その過程で thinking_delta イベントや tool_use 形式などの重要な情報が欠落し、解析エラーが発生する可能性があります。APIYI (apiyi.com) の /v1/messages エンドポイントは Anthropic ネイティブプロトコルを完全にサポートしており、形式変換は不要です。
Q3: thinking モデルと通常モデルの違いは何ですか?使い分けは?
claude-sonnet-4-6 と claude-sonnet-4-6-thinking は同一のベースモデルです。thinking バージョンは拡張推論が強制的に有効化されており、詳細な推論プロセスが出力されます。通常バージョンはデフォルトでは有効になりません(OpenCode では、メッセージに "think" というキーワードが含まれていると自動的に有効化されます)。日常的なコーディングには通常バージョン(高速でトークン消費も抑えられます)、複雑なアーキテクチャ設計やデバッグには thinking バージョンの使用をおすすめします。
Q4: OpenCode が Crush に改名されましたが、設定方法に変更はありますか?
コアアーキテクチャに変更はなく、Crush は OpenCode の全コードを継承しています。設定ファイルは .opencode.json から .crush.json に変更されている可能性があります(バージョンによります)が、環境変数はそのままです。ANTHROPIC_API_KEY や ANTHROPIC_BASE_URL の設定方法は完全に同じです。より高い安定性と機能を得るため、最新版の Crush を使用することをおすすめします。

まとめ:API形式を正しく選べば、ClaudeはOpenCodeで安定稼働する
OpenCode/CrushにおいてClaudeモデルが頻繁に中断する根本的な原因は、API形式の不一致にあります。OpenCodeはAnthropicのネイティブ形式を使用しますが、多くの中継サービスはOpenAI互換形式のみをサポートしているためです。
解決策は非常に明確です:
- Anthropicネイティブ形式をサポートするAPIサービスを利用する —— APIYIの
/v1/messagesエンドポイントを使用してください。 - 正しい環境変数を設定する ——
ANTHROPIC_BASE_URL=https://api.apiyi.comを設定します。 - 適切なモデルを選択する —— 日常的なタスクには
claude-sonnet-4-6、高度な推論が必要な場合はclaude-sonnet-4-6-thinkingを使用します。
すべてのAIコーディングツールのAPI呼び出しを統合管理するために、APIYI(apiyi.com)の利用を推奨します。api.apiyi.com/token にアクセスしてキーを取得し、【ClaudeCode】グループを選択すると12%オフの割引が適用されます。一つのキーでAnthropicネイティブ形式とOpenAI互換形式の両方に対応しており、市場に出回っている主要なAIコーディングツールのすべてに適合します。
📝 記事作成者: APIYI技術チーム | APIYI apiyi.com – 300種類以上のAI大規模言語モデルAPI統合プラットフォーム
参考資料
-
OpenCode GitHubリポジトリ(アーカイブ済み): オリジナルのプロジェクトコードとドキュメント
- リンク:
github.com/opencode-ai/opencode - 説明: 現在はCrushに名称変更されています
- リンク:
-
Crush GitHubリポジトリ: 活発に開発されている後継プロジェクト
- リンク:
github.com/charmbracelet/crush - 説明: Charmチームによってメンテナンスされている最新バージョン
- リンク:
-
Anthropic APIドキュメント: Messages APIネイティブ形式の仕様
- リンク:
docs.anthropic.com/en/api/messages - 説明:
/v1/messagesエンドポイントの完全なリクエストおよびレスポンス形式
- リンク:
-
APIYIドキュメント: Claude API接続ガイド
- リンク:
apiyi.com - 説明: Anthropicネイティブ形式とOpenAI互換形式の両方をサポートしています
- リンク: