はじめに
フロントエンドなし、純粋な設定ファイルの設定APIチャネル。ただファイルを書くと、独自のAPIステーションを実行することができ、ドキュメントには、詳細な設定ガイドを持っている、白フレンドリー。
uni-apiは、大規模なモデルのAPIを一元管理するプロジェクトであり、ロードバランシングをサポートしたOpenAIフォーマットへの単一の統一されたAPIインターフェースを通じて、複数のバックエンドサービスを呼び出すことができる。このプロジェクトは、複雑なフロントエンドインターフェースを必要としない個人ユーザーに特に適しており、OpenAI、Anthropic、Gemini、Vertexなどの幅広いモデルとサービスプロバイダをサポートしています。
機能一覧
- 統一APIインターフェース単一の統一されたAPIインターフェイスを通じて、複数のバックエンド・サービスを呼び出します。
- フォーマット変換異なるサービスプロバイダのAPIをOpenAIフォーマットに変換します。
- 負荷分散ポーリング、ウェイトポーリングなど、さまざまなロードバランシング戦略をサポート。
- マルチサービス・サポートOpenAI、Anthropic、Gemini、Vertex、その他多くのサービスプロバイダをサポート。
- 設定ファイルの管理設定ファイルを通してAPIチャンネルとモデルを管理します。
- 自動リトライAPI リクエストが失敗した場合、自動的に次のチャンネルを再試行します。
- 特権制御きめ細かな権限制御とフロー制限設定に対応。
ヘルプの使用
軽量配置
1. ヴェルセル配備
上記のワンクリック・デプロイメント・ボタンをクリックした後、環境変数を設定する。 CONFIG_URL
プロフィールの直接の連鎖のために。 disable_database
をtrueに設定し、Createをクリックしてプロジェクトを作成する。
2.serv00 リモート・デプロイメント
まず、パネルにログインし、Additional servicesのRun your own applicationsのタブをクリックして独自のアプリケーションの実行を許可し、Port reservationのパネルでランダムなポートを開く。
自分のドメイン名を持っていない場合は、WWW websitesパネルに行き、デフォルトで与えられているドメイン名を削除し、削除したドメイン名に新しいドメイン名 Domainを作成し、Advanced settingsをクリックし、Website typeをProxy domain nameに設定し、Proxy port pointingを先ほど開いたポートに設定し、Use HTTPSをチェックしない。
ssh serv00サーバーにログインし、以下のコマンドを実行する:
git clone --depth 1 -b main --quiet https://github.com/yym68686/uni-api.git cd uni-api python -m venv uni-api tmux new -s uni-api source uni-api/bin/activate export CFLAGS="-I/usr/local/include" export CXXFLAGS="-I/usr/local/include" エクスポートCC=gcc export CXX=g++ export MAX_CONCURRENCY=1 export CPUCOUNT=1 export MAKEFLAGS="-j1" CMAKE_BUILD_PARALLEL_LEVEL=1 cpuset -l 0 pip install -vv -r requirements.txt cpuset -l 0 pip install -r -vv requirements.txt
ctrl+b d tmuxを終了する インストールが完了するまで数時間待ち、完了したら以下のコマンドを実行する:
tmux attach -t uni-api ソース uni-api/bin/activate export CONFIG_URL=http://file_url/api.yaml export DISABLE_DATABASE=true # ポートを変更します。xxxがポートで、自分で変更します。ポート予約パネルで開いたポートに対応します。 sed -i '' 's/port=8000/port=xxx/' main.py sed -i '' 's/reload=True/reload=False/' main.py python main.py
ctrl+b dでtmuxを終了し、バックグラウンドで動作しているアプリケーションを残す。この時点で、他のチャットクライアントでuni-apiを使うことができます:
curl -X POST https://xxx.serv00.net/v1/chat/completions \ -H 'Content-Type: application/json' ¦ 認証が必要です。 -H 'Authorization: Bearer sk-xxx -d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "hello"}]}'.
3.Dockerローカルデプロイメント
打ち上げコンテナ
docker run --user root -p 8001:8000 --name uni-api -dit ∕ -e CONFIG_URL= ∕ # -e CONFIG_URL=http://file_url/api.yaml ■ # 既にローカル設定ファイルをマウントしている場合は、CONFIG_URL の設定は不要です。 -v ./api.yaml:/home/api.yaml ■ CONFIG_URL を既に設定している場合は、設定ファイルをマウントする必要はありません。 -v ./uniapi_db:/home/data ¦統計を保存しない場合はフォルダをマウントする必要はありません。 フォルダをマウントする必要はありません。
あるいは、Docker Composeを使いたい場合は、ここにdocker-compose.ymlの例がある:
サービス: uni-api。 uni-api. コンテナ名: uni-api イメージ: yym68686/uni-api:latest 環境: uni-api:latest - CONFIG_URL=http://file_url/api.yaml # すでにローカル設定ファイルをマウントしている場合は、CONFIG_URLを設定する必要はありません。 ポートを設定します。 - 8001:8000 ボリューム。 - ./すでにCONFIG_URL が設定されている場合は、設定ファイルをマウントする必要はありません。 - ./uniapi_db:/home/data # 統計情報を保存しない場合は、このフォルダをマウントする必要はありません。
CONFIG_URLは、リモートの場所から自動的にダウンロードできる設定ファイルです。例えば、特定のプラットフォーム上で設定ファイルを修正する利便性がない場合、設定ファイルを特定のホスティング・サービスに渡すことができ、そのホスティング・サービスはuni-apiがダウンロードするための直接リンクを提供することができ、CONFIG_URLはこの直接リンクです。ローカルにマウントされた設定ファイルを使用する場合、CONFIG_URLを設定する必要はありません。 CONFIG_URLは、設定ファイルをマウントするのが不便な場合に使用されます。
Docker Composeコンテナをバックグラウンドで実行する
docker-compose pull docker-compose up -d
ドッカービルド
docker build --no-cache -t uni-api:latest -f Dockerfile --platform linux/amd64 . docker tag uni-api:latest yym68686/uni-api:latest docker push yym68686/uni-api:latest
ワンクリックでDockerイメージを再起動する
set -eu docker pull yym68686/uni-api:latest docker rm -f uni-api docker run --user root -p 8001:8000 -dit --name uni-api -e CONFIG_URL=http://file_url/api.yaml ୧-͈ᴗ-͈⁎ -v . -v ./api.yaml:/home/api.yaml ╱ -v . -v ./uniapi_db:/home/data ୧-͈ᴗ-͈ yym68686/uni-api:latest docker logs -f uni-api
RESTfulなcurlテスト
curl -X POST http://127.0.0.1:8000/v1/chat/completions \ -H "Content-Type: application/json" -H "Authorization: Bearer ${API}" -d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "Hello"}], "stream": true}'.
設置プロセス
- 設定ファイルの準備という名前のファイルを作成する。
api.yaml
設定ファイルに、サービス・プロバイダー情報、APIアドレス、APIキーを入力する。 - 設定ファイルのアップロード設定ファイルをクラウドドライブにアップロードしてください。
- Dockerコンテナの起動::
- 利用する
CONFIG_URL
環境変数は設定ファイルのURLを設定する。 - セットアップ
disable_database
というのも真の
. - Dockerコマンドを使ってコンテナを起動する:
docker run -d --name uni-api -e CONFIG_URL=http://file_url/api.yaml -e DISABLE_DATABASE=true yym68686/uni-api:latest
- 利用する
- ポートの設定パネルで任意のポートを開き、Dockerコンテナに向ける。
使用プロセス
- APIの呼び出し統一されたAPIインターフェイスを使用してバックエンド・サービスを呼び出し、複数のモデルとサービス・プロバイダーをサポートします。
- 負荷分散コンフィギュレーションファイルのロードバランシングポリシーに基づいて、異なるチャンネルにリクエストを自動的に割り当てます。
- 特権制御: コンフィギュレーションファイルのパーミッション設定に基づき、APIキーの使用範囲とフロー制限を制御する。
- 自動リトライリクエストに失敗した場合、次に利用可能なチャネルを自動的に再試行することで、高い可用性を確保します。
詳細な手順
- 設定ファイルの例::
プロバイダ名 - provider: provider_name #サービスプロバイダ名(openai、anthropic、gemini、openrouter、deepbricksなど)。 base_url: https://api.your.com/v1/chat/completions # バックエンドサービスのAPIアドレス。 api: sk-YgS6GTi0b4bEabc4C # プロバイダのAPIキー、必須。 model: # オプション、モデルが設定されていない場合、利用可能なすべてのモデルが自動的に /v1/models エンドポイントを介して base_url と api を介して取得されます。 - gpt-4o # 使用可能なモデル名、必須。 - claude-3-5-sonnet-20240620: claude-3-5-sonnet # モデル名を変更します。claude-3-5-sonnet-20240620はサービスプロバイダのモデル名で、claude-3-5-sonnetはリネームされた名前です。元の複雑な名前、オプション - dall-e-3 - プロバイダー。 人間的 ベース_url: https://api.anthropic.com/v1/messages api: #は複数のAPIキーをサポートしています。複数のキーは自動的にトレーニングラウンドの負荷分散を可能にします。 - sk-ant-api03-bNnAOJyA-xQw_twAA - sk-ant-api02-bNnxxxx モデル: claude-3-5-sonnet - claude-3-5-sonnet-20240620: claude-3-5-sonnet # モデル名を変更する。claude-3-5-sonnet-20240620 はサービスプロバイダのモデル名で、claude-3-5-sonnet はリネームされた名前で、簡潔な名前に置き換えることができる。元の複合名、オプション tools: true #コードの生成、ドキュメントの生成などのツールをサポートするかどうか、デフォルトはtrue、オプション。 - プロバイダー。 ジェミニ base_url: https://generativelanguage.googleapis.com/v1beta # base_url サポート v1beta/v1、Gemini モデルのみ、必須 api: AIzaSyAN2k6IRdgw api: AIzaSyAN2k6IRdgw - gemini-1.5-pro - gemini-1.5-flash-exp-0827: gemini-1.5-flash # 名前変更後、元のモデル名gemini-1.5-flash-exp-0827は使用できません。元の名前を使用したい場合は、次の行を追加することで元の名前をモデルに追加できます。以下の行を追加することで、オリジナルの名前を使用することができます。 - gemini-1.5-flash-exp-0827 # この行で、gemini-1.5-flash-exp-0827とgemini-1.5-flashの両方をリクエストできます。 ツール: true - プロバイダ: vertex project_id: gen-lang-client-xxxxxxxxxxxxx # 説明: Google CloudプロジェクトID。フォーマット: 文字列で、通常は小文字、数字、ハイフンで構成される。取得方法:プロジェクトIDはGoogle Cloud Consoleのプロジェクトセレクタで確認できます。 private_key: "-----BEGIN PRIVATE KEY-----ENGEND PRIVATE" # DESCRIPTION: Google Cloud Vertex AI サービスアカウントの秘密鍵。形式:サービスアカウントの秘密鍵情報を含むJSON形式の文字列。取得方法:Google Cloud Consoleでサービスアカウントを作成し、JSON形式のキーファイルを生成し、その内容をこの環境変数の値に設定します。 client_email: xxxxxxxxxx@xxxxxxx.gserviceaccount.com # Description: Google Cloud Vertex AI サービスアカウントのメールアドレス。形式:通常は "service-account-name@project-id.iam.gserviceaccount.com "のような文字列。取得方法: サービスアカウント作成時に生成されるか、Google Cloud Console の IAM & Management セクションでサービスアカウントの詳細を見ることで取得できます。 モデルから取得できます。 - gemini-1.5-pro - gemini-1.5-flash - claude-3-5-sonnet@20240620: claude-3-5-sonnet - claude-3-opus@20240229: claude-3-opus - claude-3-sonnet@20240229: クロード3ソネット - claude-3-haiku@20240307: クロード3俳句 ツール: true notes: https://xxxxx.com/ #は、サービスプロバイダのURL、注意事項、公式ドキュメント、オプションで - プロバイダ: cloudflare api: f42b3xxxxxxxxq4aoGAh # Cloudflare API Key、必須 cf_account_id: 8ec0xxxxxxxxxxxxxxe721 # クラウドフレアアカウントID、必須 モデル - '@cf/meta/llama-3.1-8b-instruct': llama-3.1-8b # リネームされたモデル、@cf/meta/llama-3.1-8b-instruct はサービスプロバイダの元のモデル名です。3.1-8bはリネームされた名前です。元の複雑な名前の代わりに簡潔な名前を使うことができます。 - '@cf/meta/llama-3.1-8b-instruct'#は引用符を使ってモデル名をラップしなければなりません。 - プロバイダ: 他のプロバイダ base_url: https://api.xxx.com/v1/messages api: sk-bNnAOJyA-xQw_twAA モデル: sk-bNNAOJyA-xQw_twAA - causallm-35b-beta2ep-q6k: causallm-35b - anthropic/claude-3-5-sonnet ツール: false ツール: false オープンルーター #は、特定のメッセージフォーマットを強制的に使用する。 api_keys: api: sk-KjjI60Yf0JFWW - api: sk-KjjI60Yf0JFWxfgRmXqFWyGtWUd9GZnmi3KlvowmRWpWpQRo # APIキー、ユーザーはこのサービスを使用するためにAPIキーが必要です。 model: # この API Key を使用できるモデル、必須。デフォルトでは、チャネルレベルのポーリングロードバランシングが有効になっており、リクエストごとにモデルによって設定された順序でモデルがリクエストされる。プロバイダにおける元々のチャネルの順番とは関係ありません。そのため、各APIキーが異なる順序でリクエストされるように設定することができます。 - gpt-4o #で使用できるモデル名と、プロバイダが提供するすべてのgpt-4oモデルが使用できます。 - claude-3-5-sonnet # 使用可能なモデル名、全てのプロバイダのclaude-3-5-sonnetモデルを使用可能。 - gemini/* # 使用可能なモデル名、geminiというプロバイダが提供するすべてのモデルのみ使用可能、geminiはプロバイダ名、*はすべてのモデルを表す 役割: admin - api: sk-pkhf60Yf0JGyJxgRmXqFQyTgWUd9GZnmi3KlvowmRWpWqrhy モデル - anthropic/claude-3-5-sonnet # 使用可能なモデル名。anthropic という名前のプロバイダーが提供する claude-3-5-sonnet モデルのみが使用可能です。他のプロバイダのclaude-3-5-sonnetモデルは使用できません。この書き込みは、他のプロバイダーから提供されたanthropic/claude-3-5-sonnetというモデルにはマッチしません。 - # モデル名の両側に角括弧を付けることで、anthropicという名前のチャンネルにclaude-3-5-sonnetモデルを探しに行くのではなく、anthropic/claude-3-5-sonnet全体をモデル名として使用します。という名前を使います。この書き込みは、anthropic/claude-3-5-sonnetという名前のother-providerが提供するモデルにマッチします。anthropic配下のclaude-3-5-sonnetモデルにはマッチしません。 - openai-test/text-moderation-latest # メッセージのモラル検閲がオンになっている場合、openai-test というチャンネルの下にある text-moderation-latest モデルをモラル検閲に使うことができます。 プリファレンスを使用します。 SCHEDULING_ALGORITHM: fixed_priority # SCHEDULING_ALGORITHM が fixed_priority の場合、固定優先度スケジューリングを使用して、要求されたモデルを持つ最初のチャネルを常に実行します。デフォルトで有効になっており、SCHEDULING_ALGORITHMのデフォルトはfixed_priorityです。 SCHEDULING_ALGORITHMのオプション値には、fixed_priority、round_robin、weighted_round_robin、lottery、randomがあります。randomである。 # SCHEDULING_ALGORITHMがrandomの場合、ランダムラウンドロビンロードバランシングが使用され、要求されたモデルを所有するチャネルをランダムに要求します。 # SCHEDULING_ALGORITHMがround_robinの場合、ユーザーが使用するモデルのチャンネルを順番にリクエストするラウンドトレーニング負荷分散を使用します。 AUTO_RETRY: true # 自動リトライを行うかどうか、自動的に次のプロバイダーをリトライするかどうか、自動リトライする場合はtrue、自動リトライしない場合はfalse、デフォルトはtrue RATE_LIMIT: 2/min #はフローの制限をサポートしており、1分あたりの最大リクエスト数を指定します。2/min、2回/分、5/hour、5回/時、10/day、10回/日、10/month、10回/月、10/year、10回/年のように整数で設定できます。デフォルト60/分、オプション ENABLE_MODERATION: true # メッセージのモラル検閲を有効にするかどうか、trueは有効、falseは無効、デフォルトはfalse、有効にすると、ユーザーのメッセージはモラル検閲され、不適切なメッセージが見つかるとエラーメッセージが返されます。 #チャネルレベル重み付きロードバランシング設定例 - api: sk-KjjI60Yd0JFWtxxxxxxxxxxxwmRWpWpQRo モデル: gcp1/*: 5 - gcp1/*: 5 # 重みはコロンの後にあり、正の整数のみがサポートされる。 - gcp2/*: 3 # 数字の大きさは重みを表し、数字が大きいほどリクエストの確率が高い。 - gcp3/*: 2 # この例では、すべてのチャンネルを合わせた重みが10個あり、10個のリクエストのうち、5個のリクエストはgcp1/*モデルをリクエストし、2個のリクエストはgcp2/*モデルをリクエストし、3個のリクエストはgcp3/*モデルをリクエストします。 プリファレンスは SCHEDULING_ALGORITHM: weighted_round_robin # SCHEDULING_ALGORITHMがweighted_round_robinであり、上記のチャンネルに 重みがある場合のみ、リクエストは重み付きで順番に作られる。重み付きラウンドロビンロードバランシングを使用して、要求されたモデルを持つチャンネルを重み付き順序で要求します。SCHEDULING_ALGORITHMがlotteryの場合、lotteryラウンドロビン負荷分散を使用して、要求されたモデルを所有するチャンネルを重みに従ってランダムに要求します。重みが設定されていないチャンネルは自動的に round_robin ラウンドロビン負荷分散にフォールバックします。 AUTO_RETRY: true preferences: #グローバルコンフィギュレーション model_timeout: # モデルのタイムアウト (秒)、デフォルト 100 秒、オプション gpt-4o: 10 #モデルgpt-4oのタイムアウトは10秒です。gpt-4oはモデル名で、gpt-4o-2024-08-06のようなモデルをリクエストする場合もタイムアウトは10秒です。 claude-3-5-sonnet: 10 # モデル claude-3-5-sonnet タイムアウトは 10 秒で、claude-3-5-sonnet-20240620 のようなモデルを要求する場合、タイムアウトも 10 秒です。 default: 10 #のモデルはタイムアウトが設定されていないため、デフォルトのタイムアウト10秒を使用します。model_timeoutにないモデルをリクエストする場合、デフォルトのタイムアウトは10秒です。 o1-mini: 30 # モデルo1-miniのタイムアウトは30秒で、モデル名がo1-miniで始まるモデルをリクエストすると、タイムアウトは30秒になります。 o1-preview: 100 # o1-preview で始まる名前のモデルをリクエストする場合、モデル o1-preview のタイムアウトは 100 秒です。 cooldown_period: 300 # チャンネルのクールダウン時間(秒)。モデルのリクエストが失敗すると、チャンネルは自動的に一定時間クーリングから除外され、チャンネルは再びリクエストされなくなります。クーリングタイムが終了すると、リクエストに再び失敗するまでモデルは自動的に復元され、再びクーリングダウンされます。cooldown_periodを0に設定すると、冷却メカニズムは有効になりません。
- 打ち上げコンテナ::
docker run -d --name uni-api -e CONFIG_URL=http://file_url/api.yaml -e DISABLE_DATABASE=true yym68686/uni-api:latest
- APIの呼び出し::
curl -X POST https://api.your.com/v1/chat/completions -H "Authorisation: Bearer sk-Pkj60Yf8JFWxfgRmXQFWyGtWUddGZnmi3KlvowmRWpWpQxx" -d '{".model": "gpt-4o", "messages": [{"role": "user", "content": "Hello!"}]}''