0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DeepSeek HarnessにCometAPIを接続する:OpenAI互換APIをカスタムプロバイダーとして使う

0
Posted at

DeepSeek Harness(dsh)を試していて、「モデルを変えたい」「自分のAPIゲートウェイを使いたい」と思ったことはありませんか。

DeepSeek Harnessは、特定のモデル専用のチャット画面ではありません。モデル、ツール、スキル、セッション、サンドボックス、ストレージ、ループ、スケジューリング、UIなどをプラグインとして組み合わせる、拡張可能なAgent実行環境です。

この記事では、DeepSeek Harnessのカスタムプロバイダー機能を使い、OpenAI互換APIを提供するCometAPIを接続します。ポイントは、Harnessのソースコードを変更せずに、baseURL、APIキー、モデルIDを設定するだけで推論経路を差し替えられることです。

この記事の結論

  • DeepSeek Harness(dsh)は、カスタムプロバイダーとしてOpenAI互換エンドポイントを登録できる
  • CometAPIのエンドポイントは https://api.cometapi.com/v1
  • APIプロトコルには openai-completions を指定する
  • モデルIDに deepseek-v4-prodeepseek-v4-flash を指定できる
  • Harnessのワークスペース、ツール、セッション、実行ログはそのままに、モデルだけを切り替えられる

つまり、DeepSeek HarnessがAgentの実行環境、CometAPIがモデルに接続するためのAPIゲートウェイという役割分担です。

DeepSeek Harnessは「モデル」ではなくAgent実行環境

DeepSeek Harnessの考え方は、公式サイトにある Agent = Model + Harness という表現に集約されています。

モデルはテキストを生成します。一方、Harnessはモデルが実際の開発環境で作業を続けられるように、次のような機能を提供します。

  • ワークスペースとファイル編集
  • Shellなどのツール実行
  • Skills、計画、目標、サブAgent、ワークフロー
  • セッション管理とストレージ
  • サンドボックス
  • ループとスケジューリング
  • Web UI

DeepSeek Harnessでは、これらの能力をプラグインとして構成できます。必要な能力を追加したり、構成を差し替えたりする際に、Agent本体のソースコードを直接変更する必要がありません。

さらに、モデルが見たシステムプロンプト、ツール呼び出し、ツールの結果、コンテキスト注入などはセッションログに記録されます。長いコーディングタスクで「なぜこの変更をしたのか」を確認しやすい点も、単純なAPIクライアントとの違いです。

CometAPIを接続する理由

CometAPIは、OpenAI SDKと互換性のあるAPI形式で、複数プロバイダーのモデルを同じ形式から呼び出せるAPIゲートウェイです。既存のOpenAI互換コードでは、通常はAPIキーとベースURLを変更して利用できます。

この構成では、役割が明確になります。

レイヤー 担当
Agent実行環境 DeepSeek Harness
ファイル、Shell、セッション、ワークフロー Harnessのプラグイン
推論モデルへのルーティング CometAPI
実際に利用するモデル CometAPIのモデルID

この分離により、Agentの実行ロジックを作り直さずに、deepseek-v4-prodeepseek-v4-flash を比較したり、同じOpenAI互換形式を持つ別モデルへ切り替えたりできます。

前提

  • Node.jsがインストールされていること
  • DeepSeek HarnessがDeveloper Previewであることを理解していること
  • CometAPIのAPIキー管理ページでAPIキーを用意していること
  • 利用するモデルIDをCometAPIのモデルカタログで確認していること

DeepSeek HarnessはDeveloper Previewのため、バージョン更新で互換性を壊す変更が入る可能性があります。検証時はパッケージバージョンと設定ファイルを保存しておくと、再現しやすくなります。

1. DeepSeek Harnessを起動する

まず、任意の作業ディレクトリでWeb UIを起動します。

npx @deepseek-ai/dsh web

通常はローカルの http://127.0.0.1:3080 でWeb UIが起動します。

2. Web UIからCometAPIを登録する

DeepSeek HarnessのWeb UIで、次の順番に進みます。

  1. Settings を開く
  2. Models を開く
  3. Add a custom provider を選択する
  4. 次の値を入力する
項目 設定例
Provider ID cometapi
Display name CometAPI
Base URL https://api.cometapi.com/v1
API protocol openai-completions
API key CometAPIで発行したAPIキー
Model ID deepseek-v4-pro

モデル一覧を取得できる場合は Fetch available models を使います。モデル取得に失敗する場合は、モデルIDを手動で入力してください。OpenAI互換APIでは、モデル一覧取得の対応状況がゲートウェイごとに異なるためです。

まずは、テキスト中心のAgentタスクに向く deepseek-v4-pro か、高速処理を試しやすい deepseek-v4-flash から始めるとよいでしょう。

3. settings.yaml で設定する

UIではなく設定ファイルで管理したい場合は、DeepSeek Harnessの設定ディレクトリにある $DSH_HOME/settings.yaml にカスタムプロバイダーを追加します。

APIキーはファイルに直接書かず、環境変数から渡します。

macOS / Linux:

export COMETAPI_KEY="YOUR_COMETAPI_KEY"

PowerShell:

$env:COMETAPI_KEY = "YOUR_COMETAPI_KEY"

設定例です。

llm-pi-ai:
  providers:
    cometapi:
      apiKeyEnv: COMETAPI_KEY
      api: openai-completions
      baseURL: https://api.cometapi.com/v1
      models:
        - id: deepseek-v4-pro
        - id: deepseek-v4-flash

この設定の意味はシンプルです。

  • cometapi: プロバイダーID
  • apiKeyEnv: APIキーを読む環境変数
  • api: OpenAI互換Chat Completions形式
  • baseURL: CometAPIのOpenAI互換エンドポイント
  • models: Harnessのモデルピッカーに表示するモデル

設定を保存したらWeb UIを開き、モデルピッカーからCometAPIのモデルを選択します。モデル設定は次のリクエストから反映されます。

4. CometAPIのAPI経路を単体で確認する

Harnessの設定を疑う前に、CometAPIのエンドポイントへ直接リクエストを送り、APIキーとモデルIDを確認しておくと切り分けが簡単です。

curl https://api.cometapi.com/v1/chat/completions \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-flash",
    "messages": [
      {"role": "user", "content": "DeepSeek Harnessとは何ですか?"}
    ],
    "stream": false
  }'

このリクエストが成功したあとにHarnessから同じモデルを選べば、問題がAPI側なのかHarness側なのかを分けて確認できます。

5. Harness上でAgentタスクを実行する

モデルを選択したら、ワークスペースを追加して、次のようなタスクを実行します。

このリポジトリの構成を要約してください。
主要なパッケージ、エントリーポイント、テストの実行方法を整理し、
変更を加える前に確認すべきファイルを列挙してください。

ここで重要なのは、CometAPIが単にチャットの返答を返すだけではないことです。Harnessがワークスペース、ツール、セッション、実行ループを管理し、CometAPIはその中で推論を担当するモデル経路になります。

長いタスクでは、Trajectoryビューで次の情報を確認できます。

  • モデルが受け取ったコンテキスト
  • 実行されたツールと引数
  • ツールの結果
  • サブAgentのスケジュール
  • エラー後のリトライや次の判断

モデルの性能だけでなく、Agent全体の実行品質を評価できるのがHarnessの面白いところです。

モデルを切り替える方法

同じプロバイダー内でモデルを比較する場合は、設定のモデルIDを変更します。

models:
  - id: deepseek-v4-pro
  - id: deepseek-v4-flash

例えば、次のように使い分けられます。

  • 複雑なコード変更や長いタスク:deepseek-v4-pro
  • 反復的な確認や比較的軽いタスク:deepseek-v4-flash

モデルID、料金、対応機能は更新される可能性があるため、実際の運用前にCometAPIのモデルカタログと各モデルのAPIリファレンスを確認してください。

「何でも接続できる」の正確な意味

DeepSeek Harnessのインターフェースが強力なのは、特定のモデルに機能を固定せず、プロバイダーと能力を設定・プラグインとして分離している点です。

ただし、「何でも接続できる」という意味は、任意のHTTP APIを無条件に接続できるということではありません。少なくとも次のどちらかが必要です。

  1. Harnessが対応するAPIプロトコルを提供している
  2. そのAPIに対応するカスタムプロバイダーまたはプラグインを用意する

OpenAI互換APIであれば、今回のようにベースURLとモデルIDを設定して接続できます。独自形式のAPIの場合は、リクエスト形式、認証、ストリーミング、ツール呼び出し、エラー形式を吸収するアダプターが必要です。

この設計のおかげで、モデルの追加とAgentの実行環境を別々に進化させられます。

互換性でつまずいたとき

401 が返る

  • APIキーが空でないか確認する
  • Authorization: Bearer 形式になっているか確認する
  • COMETAPI_KEY を設定したシェルと、Harnessを起動したシェルが同じか確認する

UNKNOWN_MODEL が出る

  • CometAPIのモデルカタログから正確なモデルIDをコピーする
  • deepseek-v4-proDeepSeek V4 Pro のように、表示名とAPIモデルIDを混同しない
  • settings.yamlmodels にモデルIDを追加する

APIキーとURLは正しいのにリクエストが拒否される

OpenAI互換を掲げていても、developer ロールやトークン上限フィールドなどの細部が異なるゲートウェイがあります。その場合は、Harnessの互換性設定をプロバイダー単位で調整できます。

llm-pi-ai:
  providers:
    cometapi:
      apiKeyEnv: COMETAPI_KEY
      api: openai-completions
      baseURL: https://api.cometapi.com/v1
      compat:
        supportsDeveloperRole: false
        maxTokensField: max_tokens
      models:
        - id: deepseek-v4-pro

この設定は最初から追加するのではなく、実際のエラー内容を確認してから使うのがよいでしょう。互換性スイッチは、接続先の仕様に合わせて設定してください。

画像モデルを使いたい

カスタムプロバイダーで画像入力を使う場合、モデルが実際に画像入力に対応していることを確認したうえで、モデルに入力モダリティを記述します。

models:
  - id: deepseek-v4-flash-vision-exp
    input: [text, image]

これはHarness側の設定が対応可能であることを宣言するだけで、接続先が画像入力を提供しているかを自動保証するものではありません。モデルのAPIリファレンスも合わせて確認してください。

よくある質問

DeepSeekのAPIキーも必要ですか?

CometAPIのカスタムプロバイダーだけを使う場合は、CometAPIで発行したAPIキーを設定します。DeepSeek Harness標準のDeepSeekプロバイダーを併用する場合は、それぞれの認証情報を分けて管理してください。

Harnessのソースコードを変更する必要はありますか?

OpenAI互換エンドポイントを使う構成では、通常は変更不要です。カスタムプロバイダーにURL、プロトコル、認証情報、モデルIDを登録します。独自形式のAPIを接続する場合は、別途プロバイダーやプラグインが必要になります。

CometAPIのすべてのモデルをHarnessで使えますか?

Harnessで利用できるのは、選択したプロトコルとモデルの機能が一致するものです。モデルIDが存在していても、画像入力、ツール呼び出し、ストリーミング、Responses APIなどの対応状況はモデルごとに異なります。まずはChat Completions対応のテキストモデルで動作確認するのが安全です。

モデル一覧を自動取得できない場合は?

モデルIDを手動で追加します。CometAPIのモデルページに表示されるAPIモデルIDと、画面上の表示名は異なる場合があります。今回の例では deepseek-v4-prodeepseek-v4-flash を使います。

まとめ

DeepSeek Harnessの魅力は、モデルそのものではなく、Agentを動かすための実行環境をプラグインとして組み替えられることです。

CometAPIをカスタムプロバイダーとして登録すれば、Harnessのワークスペース、ツール、セッション、実行ログを維持したまま、OpenAI互換API経由でモデルを選択できます。

設定の中心は次の3点です。

Base URL:  https://api.cometapi.com/v1
Protocol:  openai-completions
Model ID:  deepseek-v4-pro または deepseek-v4-flash

Agentの実行環境とモデルAPIを分離しておくと、モデルの比較、コスト調整、将来のモデル追加を小さな設定変更で試せます。DeepSeek Harnessの柔軟なプラグイン設計と、CometAPIのOpenAI互換インターフェースは、このような実験的なAgent開発と相性のよい組み合わせです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?