DeepSeek の推論モデルは無料の Web チャットインターフェース(chat.deepseek.com)として公開されています。一方、公式 API は有料です。この「無料 Web UI は使えるが、SDK からは呼び出せない」というギャップを埋めるのが、GitHub で 3,200 スター・853 フォークを獲得している Go 製 OSS「ds2api」です。
本記事では、公式リポジトリ(CJackHwang/ds2api)のドキュメントをもとに、ds2api の仕組み・アーキテクチャ・セットアップ方法・類似ツールとの違いを整理します。
ds2api とは何か
DeepSeek の「無料 Web 機能」と「公式 API」の非対称性
DeepSeek は、chat.deepseek.com から無料で利用できる Web チャット機能を持っています。ただし、この無料 Web チャット機能は OpenAI SDK などの標準インターフェースから直接呼び出せません。
ds2api は、この DeepSeek Web チャット機能のプロトコルをリバースエンジニアリングし、OpenAI・Claude・Gemini 互換の標準 API として再公開するミドルウェアです。既存の SDK やツールの base URL を ds2api のアドレスに差し替えるだけで、DeepSeek をバックエンドとして利用できるようになります。
README には、ds2api の位置づけが次のように説明されています(README.en.md):
DS2API converts DeepSeek Web chat capability into OpenAI-compatible,
Claude-compatible, and Gemini-compatible APIs.
出典: https://github.com/CJackHwang/ds2api/blob/main/README.en.md
3つの互換 API エンドポイント
ds2api は以下の3つのプロトコル互換性を提供します:
OpenAI 互換 (/v1/*)
エンドポイント | 機能 |
|---|---|
| チャット完了(ストリーム対応) |
| Responses API |
| モデル一覧 |
| 埋め込みベクトル |
| ファイルアップロード |
Claude 互換 (/anthropic/v1/*)
エンドポイント | 機能 |
|---|---|
| メッセージ |
| トークンカウント |
Gemini 互換 (/v1beta/models/*)
エンドポイント | 機能 |
|---|---|
| コンテンツ生成 |
| ストリーム生成 |
また、OpenAI SDK などのクライアントが bare URL(例: http://127.0.0.1:5001)のみを設定している場合を考慮し、/models、/chat/completions、/responses 等のショートカットパスも受け付けます。
ds2api のアーキテクチャ
リクエスト変換の流れ
ds2api のアーキテクチャは、公式の ARCHITECTURE ドキュメント(docs/ARCHITECTURE.en.md)で詳しく解説されています。概略は次のとおりです:
クライアント (OpenAI/Claude/Gemini SDK)
↓
ds2api (chi ルーター + ミドルウェア)
↓
HTTP API サーフェス(プロトコル別に分岐)
↓
PromptCompat(各プロトコルのリクエストを DeepSeek Web 形式に正規化)
↓
CompletionRuntime(セッション/PoW/完了ストリーミング)
↓
DeepSeek Web API(上流)
クライアントが OpenAI 形式・Claude 形式・Gemini 形式のいずれかでリクエストを送ると、ds2api はそれを DeepSeek の Web チャットプロトコルに変換します。レスポンスはクライアントが期待するプロトコル形式に変換されて返されます。
README には、アーキテクチャの要点が次のように示されています(README.en.md):
- Backend: Go (cmd/ds2api/, api/, internal/), no Python runtime
- Frontend: React admin panel (webui/), served as static build at runtime
- Deployment: local run, Docker, Vercel serverless, Linux systemd
出典: https://github.com/CJackHwang/ds2api/blob/main/README.en.md
PromptCompat とマルチアカウントプール
ds2api のコアにあるのが PromptCompat と AccountPool の2つのコンポーネントです。
PromptCompat: OpenAI・Claude・Gemini の各プロトコル固有のリクエスト形式を、DeepSeek の Web チャット形式(プレーンテキストのコンテキスト)に変換します。プロトコル間の「意味的な等価性」を維持しながら変換するのが、このコンポーネントの役割です。
AccountPool + Queue: 複数の DeepSeek アカウントをプールして自動ローテーションします。設定ファイルに複数アカウントを登録すると、リクエストが自動的に分散されます。各アカウントのインフライト(同時処理数)とキューの設定は次のとおりです:
Per-account inflight = DS2API_ACCOUNT_MAX_INFLIGHT (default 2)
Recommended concurrency = account_count × per_account_inflight
Queue limit = DS2API_ACCOUNT_MAX_QUEUE (default = recommended concurrency)
出典: https://github.com/CJackHwang/ds2api/blob/main/README.en.md
インフライトスロットが満杯の場合、リクエストはキューに入ります(即時 429 にはなりません)。インフライト + キューの合計を超えた場合のみ 429 が返されます。
DeepSeek PoW の Go 実装
DeepSeek の Web API は Proof of Work(PoW)チャレンジを用いてリクエストを検証しています。ds2api はこの PoW(DeepSeekHashV1)を Pure Go で実装しており、Python や Node.js のランタイムなしにミリ秒レベルで解決できます。これにより、シングルバイナリで動作する軽量な構成が実現されています。
セットアップ方法
設定ファイルの準備
ds2api は config.json を設定の唯一の真実として管理します。リポジトリルートの config.example.json をコピーして編集するのが推奨されています。
主要な設定フィールド(API.en.md より):
keys/api_keys: クライアント側 API キー(OpenAI SDK 等がAuthorization: Bearer ...で送るキー)accounts: 管理する DeepSeek アカウント(メール/モバイル対応)model_aliases: OpenAI/Claude/Gemini のモデル名を DeepSeek ネイティブ名にマッピングruntime: インフライト数・キュー設定・トークンリフレッシュの挙動
cp config.example.json config.json
# config.json を編集: DeepSeek アカウント情報と API キーを設定
出典: https://github.com/CJackHwang/ds2api/blob/main/README.en.md
4つのデプロイ方法
ds2api は4つのデプロイ方法をサポートしています。詳細は デプロイガイド(DEPLOY.en.md) を参照してください。
方法1: リリースバイナリ(推奨)
GitHub Actions が各 Release で多プラットフォーム向けアーカイブを自動ビルドします:
tar -xzf ds2api_<tag>_linux_amd64.tar.gz
cd ds2api_<tag>_linux_amd64
cp config.example.json config.json
# config.json を編集
./ds2api
出典: https://github.com/CJackHwang/ds2api/blob/main/README.en.md
方法2: Docker / GHCR
docker pull ghcr.io/cjackhwang/ds2api:latest
cp .env.example .env
cp config.example.json config.json
docker-compose up -d
出典: https://github.com/CJackHwang/ds2api/blob/main/README.en.md
方法3: Vercel
リポジトリをフォーク後、Vercel にインポートして環境変数(最低限 DS2API_ADMIN_KEY)を設定してデプロイします。SSE ストリーミングは /v1/chat/completions のみ Node.js ランタイムで処理されます。
方法4: ローカルビルド(開発・デバッグ用)
Go 1.26+ が必要です:
git clone https://github.com/CJackHwang/ds2api.git
cd ds2api
cp config.example.json config.json
# config.json を編集
go run ./cmd/ds2api
出典: https://github.com/CJackHwang/ds2api/blob/main/README.en.md
デフォルト起動 URL は http://127.0.0.1:5001(実際のバインドは 0.0.0.0:5001)です。
Claude Code との接続設定
README には Claude Code との統合方法が記載されています(README.en.md):
# 環境変数として設定
ANTHROPIC_BASE_URL=http://127.0.0.1:5001
ANTHROPIC_API_KEY=your-configured-key
注意点として、ローカル環境でプロキシが設定されている場合は NO_PROXY=127.0.0.1,localhost を合わせて設定する必要があります。Claude Code は /v1/messages?beta=true にリクエストを送信します。
出典: https://github.com/CJackHwang/ds2api/blob/main/README.en.md
類似プロジェクトとの比較
ds-free-api(Rust 製)との違い
NIyueeE/ds-free-api は同様に DeepSeek Web API を OpenAI/Anthropic 互換に変換する Rust 製プロジェクトです。
観点 | ds2api | ds-free-api |
|---|---|---|
実装言語 | Go | Rust |
Gemini 互換 | あり | なし |
マルチアカウント | あり(プール+ローテーション) | なし(1アカウント=1並行) |
WebUI 管理 | あり | なし |
Vercel 対応 | あり | なし |
ds-free-api は Rust 製シングルバイナリの軽量性を優先しており、Gemini 対応・WebUI・マルチアカウント管理が不要なシンプルな用途に向いています。一方、ds2api はマルチアカウント運用・WebUI によるリアルタイム設定変更・3プロトコル互換性を重視した実装です。
deepseek4free(Python 製)との違い
xtekky/deepseek4free は Python パッケージとして提供されており、pip でインストールして SDK として使用します。
観点 | ds2api | deepseek4free |
|---|---|---|
実装言語 | Go | Python |
使用形態 | サーバー(バイナリ/Docker) | Python ライブラリ |
Python 不要 | はい(シングルバイナリ) | Python ランタイム必須 |
管理 WebUI | あり | なし |
Gemini 互換 | あり | なし |
ds2api はサーバーとして動作するため、Python 環境を持たないシステム(Docker コンテナ・サーバーレス)でも動作します。
LiteLLM との違い
LiteLLM は 100 以上の LLM プロバイダーに対応する汎用 AI ゲートウェイです。DeepSeek の公式 API(有料)へのルーティングもサポートしています。
観点 | ds2api | LiteLLM |
|---|---|---|
対象 | DeepSeek 無料 Web API | DeepSeek 公式 API を含む多プロバイダー |
実装言語 | Go | Python |
用途 | DeepSeek 特化 | 100+ LLM プロバイダーの統合 |
高並行 | Go 製で有利 | Python GIL の制約あり |
LiteLLM は多プロバイダー対応の汎用ゲートウェイとして広く使われていますが、DeepSeek の無料 Web API を対象とする機能は持っていません。ds2api は DeepSeek に特化したミドルウェアです。
採用時の判断ポイント
ライセンス(AGPL-3.0)の含意
ds2api は AGPL-3.0 ライセンスで公開されています。AGPL-3.0 は「ネットワーク経由でサービスを提供する場合も、変更されたソースコードの開示が必要」という条件を持ちます。社内ツール・学習・個人実験での利用は一般的に問題ありませんが、商業サービスへの組み込みでは法務確認が推奨されます。
免責事項・利用上の注意
README に重要な免責事項が明記されています(README.en.md):
This repository is provided for learning, research, personal
experimentation, and internal validation only. It does not grant
any commercial authorization and comes with no warranty of
fitness, stability, or results.
出典: https://github.com/CJackHwang/ds2api/blob/main/README.en.md
ds2api は DeepSeek の Web API をリバースエンジニアリングで利用するため、DeepSeek の利用規約の変更によって動作しなくなるリスクがあります。アカウント停止・API 仕様変更・PoW チャレンジの変更等に対してアップデートで対応されていますが(最新リリース: v4.4.1、2026-05-03)、本番サービスへの使用には適していません。
どんなユースケースに向いているか
適しているケース:
- DeepSeek を使った個人開発・学習・プロトタイピング
- Claude Code・OpenWebUI 等の既存ツールのバックエンドを DeepSeek に差し替えた検証
- マルチアカウントの DeepSeek アクセスを一元管理したい場合
- Python 環境を使わずに DeepSeek プロキシを動かしたい場合
注意が必要なケース:
- 商業サービスへの組み込み(AGPL-3.0 と利用規約の確認が必要)
- 本番サービスのコアコンポーネントとしての使用(API 仕様変更リスク)
まとめ
ds2api は、DeepSeek の無料 Web チャット機能を OpenAI・Claude・Gemini 互換の標準 API として公開する Go 製ミドルウェアです。Pure Go による PoW 実装・マルチアカウント自動ローテーション・React WebUI・Vercel 対応を備え、GitHub で 3,200 以上のスターを獲得しています。
プロジェクト固有のアーキテクチャや詳細な設定方法は、公式ドキュメント(README・API リファレンス・デプロイガイド)で詳しく解説されています。採用を検討する際は、AGPL-3.0 ライセンスと公式免責事項を確認した上で判断することをお勧めします。


