<div align="center">

<img src="src/img/logo-mid.webp" alt="logo"  style="width: 128px; height: 128px;margin-bottom: 3px;">

# AIClient-2-API 🚀

**複数のクライアント専用大規模言語モデルAPI（Gemini CLI、Antigravity、Qwen Code、Kiro ...）を模擬リクエストし、ローカルのOpenAI互換インターフェースに統一的にラッピングする強力なプロキシ。**

</div>

<div align="center">

<a href="https://deepwiki.com/justlovemaki/AIClient-2-API"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"  style="width: 134px; height: 23px;margin-bottom: 3px;"></a>

[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![Node.js](https://img.shields.io/badge/Node.js-≥20.0.0-green.svg)](https://nodejs.org/)
[![Docker](https://img.shields.io/badge/docker-≥20.0.0-blue.svg)](https://hub.docker.com/r/justlikemaki/aiclient-2-api)
[![GitHub stars](https://img.shields.io/github/stars/justlovemaki/AIClient-2-API.svg?style=flat&label=Star)](https://github.com/justlovemaki/AIClient-2-API/stargazers)
[![GitHub issues](https://img.shields.io/github/issues/justlovemaki/AIClient-2-API.svg)](https://github.com/justlovemaki/AIClient-2-API/issues)

[中文](./README-ZH.md) | [English](./README.md) | [**👉 日本語**](./README-JA.md) | [**📚 完全ドキュメント**](https://aiproxy.justlikemaki.vip/ja/)

</div>

`AIClient2API` はクライアント制限を突破するAPIプロキシサービスで、Gemini、Antigravity、Qwen Code、Kiroなど、元々クライアント内でのみ使用可能な無料大規模モデルを、あらゆるアプリケーションから呼び出せる標準OpenAI互換インターフェースに変換します。Node.jsをベースに構築され、OpenAI、Claude、Geminiの3大プロトコル間のインテリジェント変換をサポートし、Cherry-Studio、NextChat、Clineなどのツールで、Claude Opus 4.5、Gemini 3.0 Pro、Qwen3 Coder Plusなどの高度なモデルを大規模に無料で使用できるようにします。プロジェクトはストラテジーパターンとアダプターパターンに基づくモジュラーアーキテクチャを採用し、アカウントプール管理、インテリジェントポーリング、自動フェイルオーバー、ヘルスチェック機構を内蔵し、99.9%のサービス可用性を保証します。

> [!NOTE]
> **🎉 重要なマイルストーン**
>
> - Ruan Yifeng先生による[週刊359号](https://www.ruanyifeng.com/blog/2025/08/weekly-issue-359.html)での推薦に感謝します
>
> **📅 バージョン更新ログ**
>
> <details>
> <summary>クリックして詳細なバージョン履歴を展開</summary>
>
> - **2026.01.07** - iFlowプロトコルサポートの追加、OAuth認証方式でQwen、Kimi、DeepSeek、GLMシリーズモデルにアクセス可能、自動トークンリフレッシュ機能をサポート
> - **2026.01.03** - テーマ切替機能を追加し、プロバイダープール初期化を最適化、プロバイダーのデフォルト設定を使用するフォールバック戦略を削除
> - **2025.12.30** - メインプロセス管理と自動更新機能を追加
> - **2025.12.25** - 設定ファイル統一管理：すべての設定を `configs/` ディレクトリに集約。Dockerユーザーはマウントパスを `-v "ローカルパス:/app/configs"` に更新が必要
> - **2025.12.11** - Dockerイメージが自動的にビルドされ、Docker Hubで公開されました: [justlikemaki/aiclient-2-api](https://hub.docker.com/r/justlikemaki/aiclient-2-api)
> - **2025.11.30** - Antigravityプロトコルサポートの追加、Google内部インターフェース経由でGemini 3 Pro、Claude Sonnet 4.5などのモデルへのアクセスをサポート
> - **2025.11.16** - Ollamaプロトコルサポートの追加、統一インターフェースでサポートされるすべてのモデルにアクセス
> - **2025.11.11** - Web UI管理コントロールコンソールの追加、リアルタイム設定管理と健康状態モニタリングをサポート
> - **2025.11.06** - Gemini 3 プレビュー版のサポートを追加、モデル互換性とパフォーマンス最適化を向上
> - **2025.10.18** - Kiroオープン登録、新規アカウントに500クレジット付与、Claude Sonnet 4.5を完全サポート
> - **2025.09.01** - Qwen Code CLIを統合、`qwen3-coder-plus`モデルサポートを追加
> - **2025.08.29** - アカウントプール管理機能をリリース、マルチアカウントポーリング、自動フェイルオーバー、自動ダウングレード戦略をサポート
>   - 設定方法：config.jsonに`PROVIDER_POOLS_FILE_PATH`パラメータを追加
>   - 参考設定：[provider_pools.json](./configs/provider_pools.json.example)
> - **開発済み履歴**
>   - Gemini CLI、Kiroなどのクライアント2APIをサポート
>   - OpenAI、Claude、Geminiの3つのプロトコル相互変換、自動インテリジェント切り替え
> </details>

---

## 💡 コアアドバンテージ

### 🎯 統一アクセス、ワンストップ管理
*   **マルチモデル統一インターフェース**：標準OpenAI互換プロトコルを通じて、一度の設定でGemini、Claude、Qwen Code、Kimi K2、MiniMax M2などの主流大規模モデルにアクセス
*   **柔軟な切り替えメカニズム**：Pathルーティング、起動パラメータ、環境変数の3つの方法で動的にモデルを切り替え、異なるシナリオのニーズに対応
*   **ゼロコスト移行**：OpenAI API仕様と完全互換、Cherry-Studio、NextChat、Clineなどのツールを変更なしで使用可能
*   **マルチプロトコルインテリジェント変換**：OpenAI、Claude、Geminiの3大プロトコル間のインテリジェント変換をサポートし、クロスプロトコルモデル呼び出しを実現

### 🚀 制限を突破、効率を向上
*   **公式制限の回避**：OAuth認証メカニズムを利用して、Gemini、Antigravityなどの無料APIのレート制限と割り当て制限を効果的に突破
*   **無料高度モデル**：Kiro APIモードでClaude Opus 4.5を無料使用、Qwen OAuthモードでQwen3 Coder Plusを使用し、使用コストを削減
*   **インテリジェントアカウントプールスケジューリング**：マルチアカウントポーリング、自動フェイルオーバー、設定ダウングレードをサポートし、99.9%のサービス可用性を保証

### 🛡️ 安全で制御可能、データ透明
*   **フルチェーンログ記録**：すべてのリクエストとレスポンスデータをキャプチャし、監査とデバッグをサポート
*   **プライベートデータセット構築**：ログデータに基づいて専用トレーニングデータセットを迅速に構築
*   **システムプロンプト管理**：オーバーライドと追加の2つのモードをサポートし、統一された基本指示と個別拡張の完璧な組み合わせを実現

### 🔧 開発者フレンドリー、拡張が容易
*   **Web UI管理コントロールコンソール**：リアルタイム設定管理、健全性モニタリング、APIテスト、ログ表示
*   **モジュラーアーキテクチャ**：ストラテジーパターンとアダプターパターンに基づき、新しいモデルプロバイダーの追加はわずか3ステップ
*   **完全なテストカバレッジ**：統合テストと単体テストのカバレッジ90%+、コード品質を保証
*   **コンテナ化デプロイ**：Dockerサポートを提供、ワンクリックデプロイ、クロスプラットフォーム実行

---

## 📑 クイックナビゲーション

- [💡 コアアドバンテージ](#-コアアドバンテージ)
- [🚀 クイックスタート](#-クイックスタート)
  - [🐳 Docker デプロイ](https://hub.docker.com/r/justlikemaki/aiclient-2-api)
  - [📋 コア機能](#-コア機能)
- [🔐 認証設定ガイド](#-認証設定ガイド)
- [📁 認証ファイル保存パス](#-認証ファイル保存パス)
- [🦙 Ollamaプロトコル使用例](#-ollamaプロトコル使用例)
- [⚙️ 高度な設定](#高度な設定)
- [❓ よくある質問](#-よくある質問)
- [📄 オープンソースライセンス](#-オープンソースライセンス)
- [🙏 謝辞](#-謝辞)
- [⚠️ 免責事項](#️-免責事項)

---

## 🔧 使用方法

### 🚀 クイックスタート

AIClient-2-APIを使い始める最も推奨される方法は、自動起動スクリプトを使用し、**Web UIコンソール**で直接ビジュアル設定を行うことです。

#### 🐳 Docker クイックスタート (推奨)

```bash
docker run -d -p 3000:3000 -p 8085-8087:8085-8087 -p 19876-19880:19876-19880 --restart=always -v "指定パス:/app/configs" --name aiclient2api justlikemaki/aiclient-2-api
```

**パラメータ説明**：
- `-d`：バックグラウンドでコンテナを実行
- `-p 3000:3000 ...`：ポートマッピング。3000はWeb UI用、その他はOAuthコールバック用（Gemini: 8085, Antigravity: 8086, Kiro: 19876-19880）
- `--restart=always`：コンテナ自動再起動ポリシー
- `-v "指定パス:/app/configs"`：設定ディレクトリをマウント（「指定パス」を実際のパスに置き換えてください、例：`/home/user/aiclient-configs`）
- `--name aiclient2api`：コンテナ名

#### 🐳 Docker Compose デプロイ

Docker Compose を使用してデプロイすることもできます。まず、`docker` ディレクトリに移動します：

```bash
cd docker
mkdir -p configs
docker compose up -d
```

プリビルドイメージの代わりにソースからビルドする場合は、`docker-compose.yml` を編集してください：
1. `image: justlikemaki/aiclient-2-api:latest` 行をコメントアウト
2. `build:` セクションのコメントを解除
3. `docker compose up -d --build` を実行

#### 1. 起動スクリプトの実行
*   **Linux/macOS**: `chmod +x install-and-run.sh && ./install-and-run.sh`
*   **Windows**: `install-and-run.bat` をダブルクリックして実行

#### 2. コンソールへのアクセス
サーバー起動後、ブラウザで以下にアクセスしてください：
👉 [**http://localhost:3000**](http://localhost:3000)

> **デフォルトパスワード**: `admin123` (ログイン後、コンソールまたは `pwd` ファイルの変更で変更可能)

#### 3. ビジュアル設定 (推奨)
**「設定管理」** ページに入ると、以下を直接行えます：
*   ✅ 各プロバイダーの API Key の入力または OAuth 認証情報のアップロード
*   ✅ デフォルトモデルプロバイダーのリアルタイム切り替え
*   ✅ 健全性ステータスとリアルタイムリクエストログの監視

#### スクリプト実行例
```
========================================
  AI Client 2 API 快速インストール起動スクリプト
========================================

[確認] Node.js がインストールされているかを確認中...
✅ Node.js がインストールされています、バージョン: v20.10.0
✅ package.json ファイルが見つかりました
✅ node_modules ディレクトリが既に存在しています
✅ プロジェクトファイルの確認が完了しました

========================================
  AI Client 2 API サーバーを起動中...
========================================

🌐 サーバーは http://localhost:3000 で起動します
📖 管理インターフェースを表示するには http://localhost:3000 にアクセス
⏹️  サーバーを停止するには Ctrl+C を押してください
```

> **💡 ヒント**：スクリプトは自動的に依存関係をインストールし、サーバーを起動します。問題が発生した場合、スクリプトは明確なエラーメッセージと解決案を提供します。

---

### 📋 コア機能

#### Web UI管理コントロールコンソール

![Web UI](src/img/zh.png)

以下の機能モジュールを備えたWeb管理インターフェース：

**📊 ダッシュボード**：システム概要、インタラクティブなルーティング例、クライアント設定ガイド

**⚙️ 設定管理**：全プロバイダー（Gemini、Antigravity、OpenAI、Claude、Kiro、Qwen）のリアルタイムパラメータ修正、高度設定、ファイルアップロード対応

**🔗 プロバイダープール**：アクティブ接続監視、プロバイダー健全性統計、有効化/無効化管理

**📁 設定ファイル**：OAuth資格情報の集中管理、検索フィルタリング、ファイル操作機能

**📜 リアルタイムログ**：システムログとリクエストログのライブ表示、管理コントロール付き

**🔐 ログイン認証**：デフォルトパスワード `admin123`、`pwd`ファイルで変更可能

アクセス：`http://localhost:3000` → ログイン → サイドバーナビゲーション → 即座有効

#### マルチモーダル入力機能
画像、ドキュメントなど様々なタイプの入力をサポートし、よりリッチなインタラクティブ体験とより強力なアプリケーションシナリオを提供します。

#### 最新モデルサポート
以下の最新大規模モデルをシームレスにサポート、Web UIまたは[`config.json`](./configs/config.json)で対応するエンドポイントを設定するだけで使用可能：
*   **Claude 4.5 Opus** - Anthropic史上最強モデル、Kiro、Antigravity経由でサポート
*   **Gemini 3 Pro** - Google次世代アーキテクチャプレビュー版、Gemini、Antigravity経由でサポート
*   **Qwen3 Coder Plus** - アリババ通義千問の最新コード専用モデル、Qwen Code経由でサポート
*   **Kimi K2 / MiniMax M2** - 国内トップフラッグシップモデルの同期サポート、カスタムOpenAI、Claude経由でサポート

---

### 🔐 認証設定ガイド

<details>
<summary>クリックして各プロバイダーの認証設定詳細手順を展開</summary>

> **💡 ヒント**：最適な体験を得るために、**Web UIコンソール**を通じてビジュアルに認証管理を行うことを推奨します。

#### 🌐 Web UI クイック認証 (推奨)
Web UI管理インターフェースでは、極めて迅速に認証設定を完了できます：
1. **認証の生成**：**「プロバイダープール」** ページまたは **「設定管理」** ページで、対応するプロバイダー（Gemini、Qwenなど）の右上にある **「認証生成」** ボタンをクリックします。
2. **スキャン/ログイン**：認証ダイアログが表示されるので、**「ブラウザで開く」** をクリックしてログイン検証を行います。Qwenの場合はウェブログインを完了するだけ、Gemini、Antigravityの場合はGoogleアカウントの認証を完了させます。
3. **自動保存**：認証成功後、システムは自動的に資格情報を取得し、`configs/` の対応するディレクトリに保存します。**「設定ファイル」** ページで新しく生成された資格情報を確認できます。
4. **ビジュアル管理**：Web UIでいつでも資格情報のアップロードや削除、または **「クイック関連付け」** 機能を使用して既存の資格情報ファイルをワンクリックでプロバイダーにバインドできます。

#### Gemini CLI OAuth設定
1. **OAuth認証情報の取得**：[Google Cloud Console](https://console.cloud.google.com/)にアクセスしてプロジェクトを作成し、Gemini APIを有効化
2. **プロジェクト設定**：有効なGoogle CloudプロジェクトIDを提供する必要があり、起動パラメータ`--project-id`で指定可能
3. **プロジェクトIDの確認**：Web UIで設定する際、入力したプロジェクトIDが Google Cloud Console および Gemini CLI で表示されるプロジェクトIDと一致していることを確認してください。

#### Antigravity OAuth設定
1. **個人アカウント**：個人アカウントは個別に認証が必要ですが、申請チャンネルは閉鎖されています。
2. **Pro会員**：Antigravity は一時的に Pro 会員に開放されています。まず Pro 会員を購入する必要があります。
3. **組織アカウント**：組織アカウントは個別に認証が必要です。管理者に連絡して認証を取得してください。

#### Qwen Code OAuth設定
1. **初回認証**：Qwenサービス設定後、システムが自動的にブラウザで認証ページを開きます
2. **推奨パラメータ**：最良の結果を得るために公式デフォルトパラメータを使用
   ```json
   {
     "temperature": 0,
     "top_p": 1
   }
   ```

#### Kiro API設定
1. **環境準備**：[Kiroクライアントをダウンロードしてインストール](https://kiro.dev/pricing/)
2. **認証完了**：クライアントでアカウントにログインし、`kiro-auth-token.json`認証情報ファイルを生成
3. **ベストプラクティス**：**Claude Code**との併用を推奨、最適な体験を得られる
4. **重要なお知らせ**：Kiroサービス使用ポリシーが更新されました、最新の使用制限と条件については公式ウェブサイトをご確認ください。

#### アカウントプール管理設定
1. **プール設定ファイルの作成**：[provider_pools.json.example](./configs/provider_pools.json.example) を参考に設定ファイルを作成します
2. **プールパラメータの設定**：config.json で `PROVIDER_POOLS_FILE_PATH` を設定し、プール設定ファイルを指定します
3. **起動パラメータ設定**：`--provider-pools-file <path>` パラメータを使用してプール設定ファイルのパスを指定します
4. **ヘルスチェック**：システムは定期的にヘルスチェックを自動実行し、健全でないプロバイダーを使用しません

</details>

### 📁 認証ファイル保存パス

<details>
<summary>クリックして各サービスの認証情報のデフォルト保存場所を展開</summary>

各サービスの認証情報ファイルのデフォルト保存場所：

| サービス | デフォルトパス | 説明 |
|------|---------|------|
| **Gemini** | `~/.gemini/oauth_creds.json` | OAuth認証情報 |
| **Kiro** | `~/.aws/sso/cache/kiro-auth-token.json` | Kiro認証トークン |
| **Qwen** | `~/.qwen/oauth_creds.json` | Qwen OAuth認証情報 |
| **Antigravity** | `~/.antigravity/oauth_creds.json` | Antigravity OAuth認証情報 (Claude 4.5 Opus サポート) |

> **説明**：`~`はユーザーホームディレクトリを表します（Windows: `C:\Users\ユーザー名`、Linux/macOS: `/home/ユーザー名`または`/Users/ユーザー名`）

> **カスタムパス**：設定ファイルの関連パラメータまたは環境変数でカスタム保存場所を指定可能

</details>

---

### 🦙 Ollamaプロトコル使用例

本プロジェクトはOllamaプロトコルをサポートしており、統一インターフェースを通じてすべてのサポートモデルにアクセスできます。Ollamaエンドポイントは`/api/tags`、`/api/chat`、`/api/generate`などの標準インターフェースを提供します。

**Ollama API呼び出し例**：

1. **利用可能なすべてのモデルをリスト表示**：
```bash
curl http://localhost:3000/ollama/api/tags \
  -H "Authorization: Bearer your-api-key"
```

2. **チャットインターフェース**：
```bash
curl http://localhost:3000/ollama/api/chat \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-api-key" \
  -d '{
    "model": "[Claude] claude-sonnet-4.5",
    "messages": [
      {"role": "user", "content": "こんにちは"}
    ]
  }'
```

3. **モデルプレフィックスを使用してプロバイダーを指定**：
- `[Kiro]` - Kiro APIを使用してClaudeモデルにアクセス
- `[Claude]` - 公式Claude APIを使用
- `[Gemini CLI]` - Gemini CLI OAuth経由でアクセス
- `[OpenAI]` - 公式OpenAI APIを使用
- `[Qwen CLI]` - Qwen OAuth経由でアクセス

---

### 高度な設定

<details>
<summary>クリックしてプロキシ設定、モデルフィルタリング、Fallbackなどの高度な設定を展開</summary>

#### 1. プロキシ設定

本プロジェクトは柔軟なプロキシ設定をサポートしており、異なるプロバイダーに統一プロキシを設定したり、プロバイダー独自のプロキシ済みエンドポイントを使用したりできます。

**設定方法**：

1. **Web UI設定**（推奨）：便利な設定管理

  Web UIの「設定管理」ページで、すべてのプロキシオプションを視覚的に設定できます：
  - **統一プロキシ**：「プロキシ設定」エリアにプロキシアドレスを入力し、プロキシを使用するプロバイダーにチェックを入れます
  - **プロバイダーエンドポイント**：各プロバイダーの設定エリアで、Base URLをプロキシ済みエンドポイントに直接変更します
  - **「設定を保存」をクリック**：サービスを再起動せずに即座に有効になります

2. **統一プロキシ設定**：グローバルプロキシを設定し、どのプロバイダーがそれを使用するかを指定します

   - **Web UI設定**：「設定管理」ページの「プロキシ設定」エリアにプロキシアドレスを入力し、プロキシを使用するプロバイダーにチェックを入れます
   - **設定ファイル**：`configs/config.json`で設定
   ```json
   {
     "PROXY_URL": "http://127.0.0.1:7890",
     "PROXY_ENABLED_PROVIDERS": [
       "gemini-cli-oauth",
       "gemini-antigravity",
       "claude-kiro-oauth"
     ]
   }
   ```

3. **プロバイダー独自のプロキシ済みエンドポイント**：一部のプロバイダー（OpenAI、Claudeなど）はプロキシ済みAPIエンドポイントの設定をサポートしています

   - **Web UI設定**：「設定管理」ページの各プロバイダー設定エリアで、対応するBase URLを変更します
   - **設定ファイル**：`configs/config.json`で設定
   ```json
   {
     "OPENAI_BASE_URL": "https://your-proxy-endpoint.com/v1",
     "CLAUDE_BASE_URL": "https://your-proxy-endpoint.com"
   }
   ```

**サポートされるプロキシタイプ**：
- **HTTPプロキシ**：`http://127.0.0.1:7890`
- **HTTPSプロキシ**：`https://127.0.0.1:7890`
- **SOCKS5プロキシ**：`socks5://127.0.0.1:1080`

**使用シナリオ**：
- **ネットワーク制限環境**：Google、OpenAIなどのサービスに直接アクセスできないネットワーク環境で使用
- **ハイブリッド設定**：一部のプロバイダーは統一プロキシを使用し、他はプロバイダー独自のプロキシ済みエンドポイントを使用
- **柔軟な切り替え**：Web UIでいつでも特定のプロバイダーのプロキシを有効化/無効化できます

**注意事項**：
- プロキシ設定の優先順位：統一プロキシ設定 > プロバイダー独自エンドポイント > 直接接続
- プロキシサービスが安定して利用可能であることを確認してください。そうでない場合、サービス品質に影響する可能性があります
- SOCKS5プロキシは通常、HTTPプロキシよりもパフォーマンスが優れています

#### 2. モデルフィルタリング設定

`notSupportedModels` 設定を通じてサポートされていないモデルを除外でき、システムは自動的にこれらのプロバイダーをスキップします。

**設定方法**：`provider_pools.json` でプロバイダーに `notSupportedModels` フィールドを追加：

```json
{
  "gemini-cli-oauth": [
    {
      "uuid": "provider-1",
      "notSupportedModels": ["gemini-3.0-pro", "gemini-3.5-flash"],
      "checkHealth": true
    }
  ]
}
```

**動作原理**：
- 特定のモデルをリクエストする際、システムは自動的にそのモデルをサポートしていないと設定されたプロバイダーをフィルタリングします
- そのモデルをサポートするプロバイダーのみがリクエストを処理するために選択されます

**使用シナリオ**：
- 一部のアカウントは割り当てまたは権限の制限により特定のモデルにアクセスできない
- 異なるアカウントに異なるモデルアクセス権限を割り当てる必要がある

#### 3. クロスタイプフォールバック設定

あるProvider Type（例：`gemini-cli-oauth`）のすべてのアカウントが429割り当て制限により枯渇したり、unhealthyとマークされた場合、システムは直接エラーを返すのではなく、互換性のある別のProvider Type（例：`gemini-antigravity`）に自動的にフォールバックできます。

**設定方法**：`configs/config.json` に `providerFallbackChain` 設定を追加：

```json
{
  "providerFallbackChain": {
    "gemini-cli-oauth": ["gemini-antigravity"],
    "gemini-antigravity": ["gemini-cli-oauth"],
    "claude-kiro-oauth": ["claude-custom"],
    "claude-custom": ["claude-kiro-oauth"]
  }
}
```

**動作原理**：
1. メインのProvider Typeプールからhealthyなアカウントを選択しようとします
2. そのタイプのすべてのアカウントがunhealthyまたは429を返す場合：
   - 設定されたフォールバックタイプを検索
   - フォールバックタイプがリクエストされたモデルをサポートしているか確認（プロトコル互換性チェック）
   - フォールバックタイプのプールからhealthyなアカウントを選択
3. 多段階降格チェーンをサポート：`gemini-cli-oauth → gemini-antigravity → openai-custom`
4. すべてのフォールバックタイプも利用できない場合のみエラーを返します

**使用シナリオ**：
- バッチタスクシナリオでは、単一のProvider Typeの無料RPD割り当てが短時間で簡単に枯渇する可能性があります
- クロスタイプフォールバックを通じて、複数のProviderの独立した割り当てを十分に活用し、全体的な可用性とスループットを向上させることができます

**注意事項**：
- フォールバックはプロトコル互換タイプ間でのみ発生します（例：`gemini-*` 間、`claude-*` 間）
- システムは自動的にターゲットProvider Typeがリクエストされたモデルをサポートしているか確認します

</details>

---

## ❓ よくある質問

<details>
<summary>クリックしてよくある質問と解決策を展開（ポート占有、Docker起動、429エラーなど）</summary>

### 1. OAuth認証失敗

**問題の説明**：「認証生成」をクリックした後、ブラウザで認証ページが開きますが、認証が失敗するか完了できません。

**解決策**：
- **ネットワーク接続を確認**：Google、アリババクラウドなどのサービスに正常にアクセスできることを確認
- **ポート占有を確認**：OAuthコールバックには特定のポートが必要です（Gemini: 8085, Antigravity: 8086, Kiro: 19876-19880）、これらのポートが占有されていないことを確認
- **ブラウザキャッシュをクリア**：シークレットモードを使用するか、ブラウザキャッシュをクリアして再試行
- **ファイアウォール設定を確認**：ファイアウォールがローカルコールバックポートへのアクセスを許可していることを確認
- **Dockerユーザー**：すべてのOAuthコールバックポートが正しくマッピングされていることを確認

### 2. ポートが使用中

**問題の説明**：サービス起動時にポートが既に使用中と表示されます（例：`EADDRINUSE`）。

**解決策**：
```bash
# Windows - ポートを占有しているプロセスを検索
netstat -ano | findstr :3000
# タスクマネージャーで対応するPIDのプロセスを終了

# Linux/macOS - ポートを占有しているプロセスを検索して終了
lsof -i :3000
kill -9 <PID>
```

または `configs/config.json` のポート設定を変更して別のポートを使用します。

### 3. Dockerコンテナが起動しない

**問題の説明**：Dockerコンテナの起動に失敗するか、すぐに終了します。

**解決策**：
- **ログを確認**：`docker logs aiclient2api` でエラーメッセージを確認
- **マウントパスを確認**：`-v` パラメータのローカルパスが存在し、読み書き権限があることを確認
- **ポート競合を確認**：マッピングされたすべてのポートがホストで占有されていないことを確認
- **イメージを再取得**：`docker pull justlikemaki/aiclient-2-api:latest`

### 4. 認証情報ファイルが認識されない

**問題の説明**：認証情報ファイルをアップロードまたは設定した後、システムが認識できないかフォーマットエラーと表示されます。

**解決策**：
- **ファイル形式を確認**：認証情報ファイルが有効なJSON形式であることを確認
- **ファイルパスを確認**：ファイルパスが正しいことを確認、Dockerユーザーはファイルがマウントディレクトリ内にあることを確認
- **ファイル権限を確認**：サービスが認証情報ファイルを読み取る権限があることを確認
- **認証情報を再生成**：認証情報が期限切れの場合、OAuth認証を再度実行

### 5. リクエストが429エラーを返す

**問題の説明**：APIリクエストが頻繁に429 Too Many Requestsエラーを返します。

**解決策**：
- **アカウントプールを設定**：`provider_pools.json` に複数のアカウントを追加し、ポーリングメカニズムを有効化
- **フォールバックを設定**：`config.json` で `providerFallbackChain` を設定し、クロスタイプ降格を実現
- **リクエスト頻度を下げる**：リクエスト間隔を適切に増やし、レート制限のトリガーを回避
- **割り当てリセットを待つ**：無料割り当ては通常、毎日または毎分リセットされます

### 6. モデルが利用できないかエラーを返す

**問題の説明**：特定のモデルをリクエストするとエラーが返されるか、モデルが利用できないと表示されます。

**解決策**：
- **モデル名を確認**：正しいモデル名を使用していることを確認（大文字小文字を区別）
- **プロバイダーサポートを確認**：現在設定されているプロバイダーがそのモデルをサポートしていることを確認
- **アカウント権限を確認**：一部の高度なモデルは特定のアカウント権限が必要な場合があります
- **モデルフィルタリングを設定**：`notSupportedModels` を使用してサポートされていないモデルを除外

### 7. Web UIにアクセスできない

**問題の説明**：ブラウザで `http://localhost:3000` を開けません。

**解決策**：
- **サービス状態を確認**：サービスが正常に起動したことを確認、ターミナル出力を確認
- **ポートマッピングを確認**：Dockerユーザーは `-p 3000:3000` パラメータが正しいことを確認
- **別のアドレスを試す**：`http://127.0.0.1:3000` へのアクセスを試す
- **ファイアウォールを確認**：ファイアウォールがポート3000へのアクセスを許可していることを確認

### 8. ストリーミングレスポンスが中断される

**問題の説明**：ストリーミング出力を使用すると、レスポンスが途中で中断されるか不完全になります。

**解決策**：
- **ネットワーク安定性を確認**：ネットワーク接続が安定していることを確認
- **タイムアウトを増やす**：クライアント設定でリクエストタイムアウトを増やす
- **プロキシ設定を確認**：プロキシを使用している場合、プロキシが長時間接続をサポートしていることを確認
- **サービスログを確認**：エラーメッセージがないか確認

### 9. 設定変更が反映されない

**問題の説明**：Web UIで設定を変更した後、サービスの動作が変わりません。

**解決策**：
- **ページを更新**：変更後にWeb UIページを更新
- **保存状態を確認**：設定が正常に保存されたことを確認（プロンプトメッセージを確認）
- **サービスを再起動**：一部の設定はサービスの再起動が必要な場合があります
- **設定ファイルを確認**：`configs/config.json` を直接確認して変更が書き込まれていることを確認

### 10. APIが404を返す

**問題の説明**：APIエンドポイントを呼び出すと404 Not Foundエラーが返されます。

**解決策**：
- **エンドポイントパスを確認**：`/v1/chat/completions`、`/ollama/api/chat` などの正しいエンドポイントパスを使用していることを確認
- **クライアントの自動補完を確認**：一部のクライアント（Cherry-Studio、NextChatなど）はBase URLの後にパス（`/v1/chat/completions` など）を自動的に追加し、パスの重複を引き起こします。コンソールで実際のリクエストURLを確認し、冗長なパス部分を削除してください
- **サービス状態を確認**：サービスが正常に起動していることを確認、`http://localhost:3000` にアクセスしてWeb UIを確認
- **ポート設定を確認**：リクエストが正しいポート（デフォルト3000）に送信されていることを確認
- **利用可能なルートを確認**：Web UIダッシュボードページの「インタラクティブルーティング例」ですべての利用可能なエンドポイントを確認

### 11. Unauthorized: API key is invalid or missing

**問題の説明**：APIエンドポイントを呼び出すと `Unauthorized: API key is invalid or missing.` エラーが返されます。

**解決策**：
- **API Key設定を確認**：`configs/config.json` またはWeb UIでAPI Keyが正しく設定されていることを確認
- **リクエストヘッダー形式を確認**：リクエストに正しい形式のAuthorizationヘッダーが含まれていることを確認、例：`Authorization: Bearer your-api-key`
- **サービスログを確認**：Web UIの「リアルタイムログ」ページで詳細なエラーメッセージを確認し、具体的な原因を特定

</details>

---

## 📄 オープンソースライセンス

本プロジェクトは [**GNU General Public License v3 (GPLv3)**](https://www.gnu.org/licenses/gpl-3.0) オープンソースライセンスに従います。詳細はルートディレクトリの `LICENSE` ファイルをご覧ください。

## 🙏 謝辞

本プロジェクトの開発は公式Google Gemini CLIから大きなインスピレーションを受け、Cline 3.18.0版 `gemini-cli.ts` の一部のコード実装を参考にしました。ここにGoogle公式チームとCline開発チームの優れた仕事に心より感謝申し上げます！

### 貢献者リスト

AIClient-2-APIプロジェクトに貢献してくれたすべての開発者に感謝します：

[![Contributors](https://contrib.rocks/image?repo=justlovemaki/AIClient-2-API)](https://github.com/justlovemaki/AIClient-2-API/graphs/contributors)

### スポンサーリスト

プロジェクトをサポートしてくださっているスポンサーの皆様に深く感謝いたします：

- [**Cigarliu**](https://github.com/Cigarliu "9.9")
- [**xianengqi**](https://github.com/xianengqi "9.9")
- [**3831143avl**](https://github.com/3831143avl "10")
- [**醉春風**](https://github.com/handsometong "28.8")
- [**crazy**](https://github.com/404 "88")
- [**清宵落了灯花**](https://github.com/Lanternmorning "16")

### 🌟 Star History


[![Star History Chart](https://api.star-history.com/svg?repos=justlovemaki/AIClient-2-API&type=Timeline)](https://www.star-history.com/#justlovemaki/AIClient-2-API&Timeline)

---

## ⚠️ 免責事項

### 使用リスクの注意
本プロジェクト（AIClient-2-API）は学習と研究目的のみです。ユーザーは本プロジェクト使用時、すべてのリスクを自己負担する必要があります。作者は本プロジェクトの使用により生じた直接的、間接的、または結果的な損失について一切の責任を負いません。

### サードパーティサービスの責任説明
本プロジェクトはAPIプロキシツールであり、AIモデルサービスを提供していません。すべてのAIモデルサービスは対応するサードパーティプロバイダー（Google、OpenAI、Anthropicなど）により提供されます。ユーザーが本プロジェクトを通じてこれらのサードパーティサービスにアクセスする際は、各サードパーティサービスの利用規約とポリシーを遵守する必要があります。作者はサードパーティサービスの可用性、品質、セキュリティ、合法性について責任を負いません。

### データプライバシー説明
本プロジェクトはローカルで実行され、ユーザーのデータを収集またはアップロードしません。ただし、ユーザーは本プロジェクト使用時、APIキーやその他の機密情報を保護することに注意する必要があります。定期的にAPIキーを確認・更新し、安全でないネットワーク環境での本プロジェクトの使用を避けることを推奨します。

### 法的コンプライアンスの注意
ユーザーは本プロジェクト使用時、所在国/地域の法律法規を遵守する必要があります。本プロジェクトを違法な目的に使用することは厳禁です。ユーザーが法律法規に違反したことによるいかなる結果も、ユーザー自身がすべての責任を負うものとします。
