コンテンツにスキップ
無料で登録
Coding Agent のセットアップ

DeepSeek Harness の設定:API Key・Base URL・モデル

DeepSeek Harness の接続手順。API Key と Base URL を設定し、プロトコルの選択とファイル読み取りを確認します。

headless プロファイルにカスタムプロバイダーを設定し、DeepSeek Harness(dsh)を BetterToken に接続します。macOS でのテストでは、@deepseek-ai/dsh@0.2.1-rc.2 は次の各組み合わせでテキストリクエストとファイル読み取りツールの呼び出しに 3 回中 3 回成功しました。GPT モデルと Chat Completions、GPT モデルと Responses、Claude モデルと Anthropic Messages、GPT モデルと Anthropic Messages です。

主な設定

項目値
API KeyapiKeyEnv で指定した名前の環境変数から読み取る BetterToken API Key
Base URLhttps://bettertoken.ai/v1 — Chat Completions / Responses
Anthropic Messages の Base URLhttps://bettertoken.ai(/v1 なし)
モデルYOUR_MODEL_ID
設定ファイル$DSH_HOME/profiles/headless/cordis.patch.yml(DSH_HOME の既定値は ~/.dsh)

前提条件

インストール

グローバルインストールせずに、このページでテストしたバージョンを実行します。

ターミナルウィンドウ
npx @deepseek-ai/dsh@0.2.1-rc.2 --help

テスト時の npm の latest タグは、リリース候補版の 0.2.1-rc.2 を指していました。next など、ほかのタグはテストしていません。

手動設定

YOUR_API_KEY を置き換え、API Key を環境変数に設定します。

ターミナルウィンドウ
export BETTERTOKEN_API_KEY="YOUR_API_KEY"

~/.dsh/profiles/headless/cordis.patch.yml を作成します。このファイルは Cordis パッチのリストです。2 か所の YOUR_MODEL_ID を同じ正確な Model ID に置き換えてください。

Chat Completions

- id: llm-pi-ai
config:
providers:
bettertoken:
api: openai-completions
baseURL: https://bettertoken.ai/v1
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

Responses

- id: llm-pi-ai
config:
providers:
bettertoken:
api: openai-responses
baseURL: https://bettertoken.ai/v1
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

Anthropic Messages

- id: llm-pi-ai
config:
providers:
bettertoken:
api: anthropic-messages
baseURL: https://bettertoken.ai
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

apiKeyEnv に指定するのは環境変数名です。API Key 本体や ${...} 式ではありません。カスタムプロバイダーには api、baseURL、および models 内の 1 件以上のエントリが必要です。各モデルエントリで必須なのは id のみです。すでに llm-pi-ai を設定している場合は、残したいプロバイダーを同じ config にコピーしてください。新しいエントリは既存のエントリを置き換えます。

カスタムプロバイダーの api フィールドで使えるのは、openai-completions、openai-responses、anthropic-messages のみです。Anthropic の Base URL にはサイトのルートを指定します。クライアントが /v1/messages を自動で追加するためです。

モデルにリクエストを送らずに構文を確認するには、npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --dump-config を実行します。

接続を確認する

同じターミナルで実行します。

ターミナルウィンドウ
npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --json "Reply with only: OK"

--json は 1 行につき 1 件の JSON イベントを出力します。終了コードが 0、turn_end.reason が正常終了を示し、最後の final イベントの text が OK であることを確認してください。失敗時にも空の final イベントが出力されることがあるため、イベントの有無だけで判断しないでください。

ファイルアクセスを確認するには、空のディレクトリに sample.txt を作成します。そのディレクトリから、プロンプトを Read sample.txt using a tool. Reply with only its exact contents. に変えて同じコマンドを実行してください。出力に tool_call、ファイルのテキストを含む tool_result、同じ内容の final テキストがあることを確認します。

モデルを切り替える

2 か所の YOUR_MODEL_ID を別の正確な Model ID に変更します。Anthropic Messages 経由の Claude モデルなど、新しいモデルが別のプロトコルを使う場合は、api と baseURL を一緒に変更してください。ゲートウェイが返すモデルの一覧は、DeepSeek Harness のウェブ UI でカスタムプロバイダーの Fetch available models を使って取得できます。テストでは、同じモデル検出サービスが 3 つのプロトコルすべてで BetterToken のモデル一覧を返しました。

よくあるエラー

症状確認すること
MISSING_CREDENTIAL、終了コード 1、ダッシュボードにリクエストなしプロセスが apiKeyEnv で指定された変数を読み取れていません。dsh を起動するターミナルで変数をエクスポートし、名前のつづりを確認してください。この確認はローカルで行われます。
ウェブ UI に保存した Key が headless プロファイルで使われないheadless プロファイルは、起動時の環境、現在のディレクトリの .env、DSH_HOME 内の .env の順にのみ認証情報を読み取ります。
404 が返り、リクエストパスの末尾が /v1/v1/messages になるAnthropic の baseURL の末尾に /v1 が付いています。https://bettertoken.ai を使ってください。
モデルが見つからないモデル広場から Model ID を再度コピーし、2 か所に同じ値を設定してください。
失敗後に何度も再試行するretryPolicy を省略すると、アダプターは既定で 5 回再試行します。例のように maxRetries を明示的に設定してください。
Node.js のバージョンエラーNode.js 24.9 以降を使ってください。

関連ドキュメント

技術的な詳細

テストでの実際のリクエストパスは、3 つの api 値に対応して /v1/chat/completions、/v1/responses、/v1/messages でした。dsh は設定済みのプロバイダーとモデルを使ってセッションタイトルの生成も自動でリクエストするため、1 つのタスクで複数のリクエストが発生することがあります。出力上限の既定値はクライアントが追加しており、たとえばメインリクエストでは 32768 トークンでした。これらの上限は設定ファイルでは指定していません。

モデルエントリの input と contextWindow はクライアントに渡す宣言です。ゲートウェイの制限を問い合わせたり、検証したりするものではありません。画像入力は未テストです。テスト対象は macOS のみです。