JA ▾
API キーを取得

OpenCodeとOpenAI互換API:セットアップ

opencode openai compatible apiアクセスを有効にするには、カスタムプロバイダーエントリが1つ必要です。設定ファイルにベースURL、キー、モデルエントリを持つカスタムプロバイダーを定義します。このガイドでは、正確な値とそれらを最初にテストする方法を示します。

更新日:

サーバーラックに光るケーブルで接続されたターミナルパネル。カスタムAPIを呼び出すコーディングエージェントを表す

主要ポイント

  • OpenCodeに触れる前にcurlでエンドポイントを検証し、失敗が設定の問題かAPIの問題かを確認してください。
  • カスタムプロバイダーには3つのものが必要です:ベースURL、APIキー、およびモデルID(ここではuncensored)。
  • エージェントが実際のウィンドウに合わせて計画できるように、コンテキスト制限を100,000トークンに設定します。
  • ストリーミングと関数呼び出しはサポートされており、これはエージェントループに必要な機能です。

開始前に必要なもの

OpenCodeはターミナルで実行されるオープンソースのコーディングエージェントです。多くのモデルプロバイダーと通信でき、エンドポイントがOpenAIチャット形式に従っている場合、独自のプロバイダーを追加できます。このAPIはそれに従うため、セットアップは数フィールドに入力するだけの問題です。

まずこれら3つの値を収集してください:

  • ベースURL: https://api.kimicode.top/v1
  • モデルID: uncensored
  • APIキー: APIキーページで作成します。新規アカウントは、ワンクリックで$0.50の無料トライアルクレジットを取得でき、これは以下のテストに十分です。トライアルキーは、最大2つの同時リクエストと1分あたり60リクエストまで許可されます。

キーをファイルに貼り付けるのではなく、環境変数に保持してください:

export KIMICODE_API_KEY="your-key-here"

ステップ1:curlでエンドポイントをテスト

ツールを設定する前にこれを行ってください。curlが動作してOpenCodeが動作しない場合、問題が設定にあることがわかります。curlが失敗する場合、キーまたはURLを2か所でなく1か所で修正します。

curl https://api.kimicode.top/v1/chat/completions \
  -H "Authorization: Bearer $KIMICODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "Say hello in five words."}],
    "max_tokens": 40
  }'

choices配列とusageブロックを含むJSONオブジェクトを取得する必要があります。401は、キーが間違っているか、Bearerプレフィックスが不足していることを意味します。404は通常、URLの入力ミスまたはすでに/chat/completionsが含まれていることを意味します。

コーディングエージェントは回答をストリーミングし、ツールを呼び出すため、それら2つも確認してください:

curl -N https://api.kimicode.top/v1/chat/completions \
  -H "Authorization: Bearer $KIMICODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "stream": true,
    "messages": [{"role": "user", "content": "Count from one to five."}]
  }'

一連のdata:行、各々に小さなJSON差分、使用状況の数値、および最終マーカーが表示されるはずです。-Nフラグはcurlのバッファリングを無効にし、チャンクが到着するたびに現れます。

ステップ2:OpenCodeにカスタムプロバイダーを追加

OpenCodeは、プロジェクトフォルダーまたはグローバル設定ディレクトリからJSON設定ファイルopencode.jsonを読み取ります。カスタムOpenAIスタイルのプロバイダーは、AI SDKのOpenAI互換パッケージ、ベースURL、およびモデルのリストを使用して宣言されます。以下のレイアウトは、執筆時点でのOpenCodeの公開ドキュメントに従っています。フィールド名はリリース間で変更される可能性があるため、拒否された場合は現在のOpenCodeドキュメントのプロバイダーセクションと比較してください。

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "kimicode": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Kimicode API",
      "options": {
        "baseURL": "https://api.kimicode.top/v1",
        "apiKey": "{env:KIMICODE_API_KEY}"
      },
      "models": {
        "uncensored": {
          "name": "Uncensored",
          "limit": {
            "context": 100000,
            "output": 8192
          }
        }
      }
    }
  },
  "model": "kimicode/uncensored"
}

modelsの下のキーは、サーバーに送信される正確なモデルIDであるため、uncensoredと読み込まなければなりません。最後の行は、プロバイダー名、スラッシュ、モデルIDとして記述されたデフォルトとしてプロバイダーとモデルを選択します。

{env:KIMICODE_API_KEY}形式は、OpenCodeにシェル変数から読み込ませるよう指示します。お使いのバージョンが独自のログインコマンド経由で認証情報を処理する場合は、その方法を使用し、ファイルからキーを除外してください。いずれの場合も、実際のキーをコミットしないでください。

プロジェクト設定またはグローバル設定

プロバイダーブロックを2つの場所に保持できます。プロジェクトルートにあるファイルはそのリポジトリにのみ適用され、1つのセットアップを共有するチームに適しています。ユーザー設定ディレクトリにあるファイルはすべてに適用され、パーソナルなデフォルトに適しています。両方が存在する場合、プロジェクトファイルはグローバルファイルに追加または上書きします。

プロバイダー定義にはグローバルファイル、キーには環境変数を優先してください。そうすれば、すべてのリポジトリがエンドポイントを使用でき、機密情報がソースコードの隣に置かれません。複数の人が1つのプロジェクトで作業する場合、キーなしでプロバイダーブロックのみをコミットし、各人が独自の変数を設定させます。これにより、キーのローテーションも簡単になります:変数を変更し、ターミナルを再起動すると、設定ファイルは変更されません。

ステップ3:モデルを選択してタスクを実行

プロジェクトフォルダーでOpenCodeを起動し、モデルピッカーを開きます。カスタムプロバイダーは、設定した表示名でリストに表示されるはずです。それを選択し、関数の説明や短いファイルのユニットテストの作成など、小さく検証可能なタスクをエージェントに与えます。

2つの理由で小さく始めてください。まず、ツール呼び出しが機能するかどうかを確認できます:OpenCodeがモデルにファイルを読み取ったり編集したりするように依頼すると、ツール呼び出しインターフェースを介して行われます。第二に、コーディングエージェントは1ターンあたりのテキスト量が多く、ファイル内容と履歴を含むため、長いセッションはトークンを急速に消費します。次のセクションでは、その数値を示します。

モデルが表示されない場合は、ファイルが有効なJSONであること、OpenCodeが設定を探す場所に配置されていること、およびプロバイダー名がmodelフィールドに入力したものと一致していることを確認してください。

関数呼び出しとJSONモードを直接テスト

OpenCodeはファイルの読み取り、コマンドの実行、コードの編集にツール呼び出しに依存するため、エージェントの失敗を責める前にエンドポイントがツール定義を処理できることを確認する価値があります。このリクエストは1つのツールを提供し、それが必要な質問をします。

curl https://api.kimicode.top/v1/chat/completions \
  -H "Authorization: Bearer $KIMICODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "What is in the file notes.txt?"}],
    "tools": [{
      "type": "function",
      "function": {
        "name": "read_file",
        "description": "Read a text file by path",
        "parameters": {
          "type": "object",
          "properties": {"path": {"type": "string"}},
          "required": ["path"]
        }
      }
    }],
    "tool_choice": "auto"
  }'

良い応答には、tool_callsエントリが含まれ、JSON引数文字列でread_fileを指定します。エージェントはツールを実行し、roleをtoolに設定したメッセージとして結果を送り返し、モデルはそこから続行します。プレーンテキストしか表示されない場合は、モデルがツールを呼び出すかどうかはその動作の一部であるため、より直接的なプロンプトを試してください。

JSONモードは別のスイッチです。"response_format": {"type": "json_object"}を追加すると、有効なJSON出力が要求され、戻り値を解析する必要があるスクリプトに役立ちます。期待する形状をモデルに知らせるため、プロンプトにJSONも言及してください。

コンテキストサイズとセッションの費用

コンテキストウィンドウは100,000トークンで、プロンプトと補完を合わせてカウントします。limit.contextを100000に設定すると、エージェントは実際の上限を知り、サーバーがリクエストを拒否する前に履歴をトリムまたは要約できます。補完は残りのスペースを使用でき、max_tokensはオプションです。

課金は、1M入力トークンあたり$0.15、1M出力トークンあたり$0.50です。エージェントは入力が重く、これは各ターンで会話が再送信されるためです。適度なセッションの計算例を以下に示します。

  • 40ターン、各ターンで約30,000入力トークンを送信:1,200,000入力トークン、つまり1.2 x $0.15 = $0.18。
  • 各ターンで約800出力トークンを返す:32,000出力トークン、つまり0.032 x $0.50 = $0.016。
  • 合計:$0.196、つまりセッション全体で約20セント。

あなたの数値は異なる可能性があります。レスポンス内のusage値を確認するか、各レスポンスで残高を報告するX-Balance-USDヘッダーを確認してください。クレジットは前払いで期限切れにならず、失敗または拒否されたリクエストには課金されません。詳細は料金ページをご覧ください。

コーディングエージェントに対する正直な期待

これは、法的な成人用途においてコンテンツ拒否なしで回答するように調整された汎用テキストモデルです。これはコード専用で構築されたモデルではなく、このページではベンチマークに関する主張は行っていません。リポジトリを確実に編集できるかどうかは、重要なデータを渡す前に、バージョン管理を有効にして独自のタスクでテストすべきです。

エージェントに必要な配管を処理します:ストリーミングされたtool_calls、role: "tool"メッセージとして送信されるツール結果、およびresponse_formatを通じたJSONモード。テキストのみで画像には対応していないため、スクリーンショットを添付する機能は機能しません。

エージェントにとって2つの制限が重要です。フルキーは最大8つの同時リクエストと1分あたり300リクエストまで許可されます。一度に多くの呼び出しを発生させるサブエージェントや並列ツール実行は、同時実行数の上限に達する可能性があり、ストリーミングされたリクエストはストリームが終了するまでスロットを保持します。その場合、コードconcurrencyでHTTP 429を取得します。コードrate_limitedは、1分あたりのリクエストが多すぎます。一時的な過負荷時には、Retry-After: 5で429も表示されることがあります。並列性を減らすか、待機して再試行してください。

トラブルシューティング

症状考えられる原因修正方法
401 Unauthorized空または間違ったキー;OpenCodeを起動したシェルで環境変数が設定されていない同じターミナルで echo $KIMICODE_API_KEY を実行し、その後 OpenCode を再起動してください
404 Not FoundベースURLに/chat/completionsが含まれているか、/v1が欠落しているhttps://api.kimicode.top/v1 を正確に使用してください
モデルが見つからないモデルキーがuncensoredと異なるmodelsのキーを、GET /v1/modelsで返されるIDと一致させてください
concurrency付きの429一度にリクエストが多すぎる並列のツール呼び出しを減らすか、ストリーミングが完了するまで待ってください
リクエストが大きすぎます本文が8 MBを超えるか、履歴がコンテキストウィンドウの制限に近づいている新しいセッションを開始するか、履歴を要約してください

ここでカバーされていない内容については、ドキュメントページに完全なリクエストリファレンスが記載されており、統合ガイドでは他のOpenAI互換クライアントの観点から同じエンドポイントについて解説しています。

質問と回答

OpenCodeはカスタムベースURLをサポートしていますか?

はい。opencode.jsonでベースURL、キー、モデルのリストを使用してカスタムプロバイダーを宣言します。バージョン間で変更される可能性があるため、正確なフィールド名についてはOpenCodeの現在のドキュメントを確認してください。

どのモデルIDを入力すべきですか?

uncensoredと、記載されている通りに正確に入力してください。入力値はmodelsブロックのキーとGET /v1/modelsで返されるIDの両方と一致している必要があります。

セットアップをテストする無料の方法はありますか?

新規ユーザーは、APIキーページでサインアップ後にワンクリックで$0.50の無料トライアルクレジットを取得できます。有効期間は7日で、カードは不要、1人あたり1回限りです。

エージェント実行中に429エラーが発生するのはなぜですか?

エージェントはしばしば複数のリクエストを同時に送信します。フルキーでは同時8リクエスト、1分あたり300リクエストまで可能で、トライアルキーではそれぞれ2および60です。並列度を減らすか、Retry-Afterの遅延後に再試行してください。

キーはフォーム 1 つで手に入ります

アカウントを作成し、キーをコピーし、ベースURLを変更します。これでセットアップは完了です。

API キーを取得