はじめに
フロントエンドなし、純粋な設定ファイルの設定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" export 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 source uni-api/bin/activate export CONFIG_URL=http://file_url/api.yaml export DISABLE_DATABASE=true # 修改端口,xxx 为端口,自行修改,对应刚刚在面板 Port reservation 开的端口 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": "你好"}]}'
3.Dockerローカルデプロイメント
打ち上げコンテナ
docker run --user root -p 8001:8000 --name uni-api -dit \ -e CONFIG_URL=http://file_url/api.yaml \ # 如果已经挂载了本地配置文件,不需要设置 CONFIG_URL -v ./api.yaml:/home/api.yaml \ # 如果已经设置 CONFIG_URL,不需要挂载配置文件 -v ./uniapi_db:/home/data \ # 如果不想保存统计数据,不需要挂载该文件夹 yym68686/uni-api:latest
あるいは、Docker Composeを使いたい場合は、ここにdocker-compose.ymlの例がある:
services: uni-api: container_name: uni-api image: yym68686/uni-api:latest environment: - CONFIG_URL=http://file_url/api.yaml # 如果已经挂载了本地配置文件,不需要设置 CONFIG_URL ports: - 8001:8000 volumes: - ./api.yaml:/home/api.yaml # 如果已经设置 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 ./api.yaml:/home/api.yaml \ -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
というのもtrue
. - 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キーの使用範囲とフロー制限を制御する。
- 自動リトライリクエストに失敗した場合、次に利用可能なチャネルを自動的に再試行することで、高い可用性を確保します。
詳細な手順
- 設定ファイルの例::
providers: - provider: provider_name # 服务提供商名称, 如 openai、anthropic、gemini、openrouter、deepbricks,随便取名字,必填 base_url: https://api.your.com/v1/chat/completions # 后端服务的API地址,必填 api: sk-YgS6GTi0b4bEabc4C # 提供商的API Key,必填 model: # 选填,如果不配置 model,会自动通过 base_url 和 api 通过 /v1/models 端点获取可用的所有模型。 - gpt-4o # 可以使用的模型名称,必填 - claude-3-5-sonnet-20240620: claude-3-5-sonnet # 重命名模型,claude-3-5-sonnet-20240620 是服务商的模型名称,claude-3-5-sonnet 是重命名后的名字,可以使用简洁的名字代替原来复杂的名称,选填 - dall-e-3 - provider: anthropic base_url: https://api.anthropic.com/v1/messages api: # 支持多个 API Key,多个 key 自动开启轮训负载均衡,至少一个 key,必填 - sk-ant-api03-bNnAOJyA-xQw_twAA - sk-ant-api02-bNnxxxx model: - claude-3-5-sonnet-20240620: claude-3-5-sonnet # 重命名模型,claude-3-5-sonnet-20240620 是服务商的模型名称,claude-3-5-sonnet 是重命名后的名字,可以使用简洁的名字代替原来复杂的名称,选填 tools: true # 是否支持工具,如生成代码、生成文档等,默认是 true,选填 - provider: gemini base_url: https://generativelanguage.googleapis.com/v1beta # base_url 支持 v1beta/v1, 仅供 Gemini 模型使用,必填 api: AIzaSyAN2k6IRdgw model: - gemini-1.5-pro - gemini-1.5-flash-exp-0827: gemini-1.5-flash # 重命名后,原来的模型名字 gemini-1.5-flash-exp-0827 无法使用,如果要使用原来的名字,可以在 model 中添加原来的名字,只要加上下面一行就可以使用原来的名字了 - gemini-1.5-flash-exp-0827 # 加上这一行,gemini-1.5-flash-exp-0827 和 gemini-1.5-flash 都可以被请求 tools: true - provider: vertex project_id: gen-lang-client-xxxxxxxxxxxxxx # 描述: 您的Google Cloud项目ID。格式: 字符串,通常由小写字母、数字和连字符组成。获取方式: 在Google Cloud Console的项目选择器中可以找到您的项目ID。 private_key: "-----BEGIN PRIVATE KEY-----\nxxxxx\n-----END PRIVATE" # 描述: Google Cloud Vertex AI服务账号的私钥。格式: 一个 JSON 格式的字符串,包含服务账号的私钥信息。获取方式: 在 Google Cloud Console 中创建服务账号,生成JSON格式的密钥文件,然后将其内容设置为此环境变量的值。 client_email: xxxxxxxxxx@xxxxxxx.gserviceaccount.com # 描述: Google Cloud Vertex AI 服务账号的电子邮件地址。格式: 通常是形如 "service-account-name@project-id.iam.gserviceaccount.com" 的字符串。获取方式: 在创建服务账号时生成,也可以在 Google Cloud Console 的"IAM与管理"部分查看服务账号详情获得。 model: - 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: claude-3-sonnet - claude-3-haiku@20240307: claude-3-haiku tools: true notes: https://xxxxx.com/ # 可以放服务商的网址,备注信息,官方文档,选填 - provider: cloudflare api: f42b3xxxxxxxxxxq4aoGAh # Cloudflare API Key,必填 cf_account_id: 8ec0xxxxxxxxxxxxe721 # Cloudflare Account ID,必填 model: - '@cf/meta/llama-3.1-8b-instruct': llama-3.1-8b # 重命名模型,@cf/meta/llama-3.1-8b-instruct 是服务商的原始的模型名称,必须使用引号包裹模型名,否则yaml语法错误,llama-3.1-8b 是重命名后的名字,可以使用简洁的名字代替原来复杂的名称,选填 - '@cf/meta/llama-3.1-8b-instruct' # 必须使用引号包裹模型名,否则yaml语法错误 - provider: other-provider base_url: https://api.xxx.com/v1/messages api: sk-bNnAOJyA-xQw_twAA model: - causallm-35b-beta2ep-q6k: causallm-35b - anthropic/claude-3-5-sonnet tools: false engine: openrouter # 强制使用某个消息格式,目前支持 gpt,claude,gemini,openrouter 原生格式,选填 api_keys: - api: sk-KjjI60Yf0JFWxfgRmXqFWyGtWUd9GZnmi3KlvowmRWpWpQRo # API Key,用户使用本服务需要 API key,必填 model: # 该 API Key 可以使用的模型,必填。默认开启渠道级轮询负载均衡,每次请求模型按照 model 配置的顺序依次请求。与 providers 里面原始的渠道顺序无关。因此你可以设置每个 API key 请求顺序不一样。 - gpt-4o # 可以使用的模型名称,可以使用所有提供商提供的 gpt-4o 模型 - claude-3-5-sonnet # 可以使用的模型名称,可以使用所有提供商提供的 claude-3-5-sonnet 模型 - gemini/* # 可以使用的模型名称,仅可以使用名为 gemini 提供商提供的所有模型,其中 gemini 是 provider 名称,* 代表所有模型 role: admin - api: sk-pkhf60Yf0JGyJxgRmXqFQyTgWUd9GZnmi3KlvowmRWpWqrhy model: - anthropic/claude-3-5-sonnet # 可以使用的模型名称,仅可以使用名为 anthropic 提供商提供的 claude-3-5-sonnet 模型。其他提供商的 claude-3-5-sonnet 模型不可以使用。这种写法不会匹配到other-provider提供的名为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 的模型。但不会匹配到anthropic下面的claude-3-5-sonnet模型。 - openai-test/text-moderation-latest # 当开启消息道德审查后,可以使用名为 openai-test 渠道下的 text-moderation-latest 模型进行道德审查。 preferences: SCHEDULING_ALGORITHM: fixed_priority # 当 SCHEDULING_ALGORITHM 为 fixed_priority 时,使用固定优先级调度,永远执行第一个拥有请求的模型的渠道。默认开启,SCHEDULING_ALGORITHM 缺省值为 fixed_priority。SCHEDULING_ALGORITHM 可选值有:fixed_priority,round_robin,weighted_round_robin, lottery, random。 # 当 SCHEDULING_ALGORITHM 为 random 时,使用随机轮训负载均衡,随机请求拥有请求的模型的渠道。 # 当 SCHEDULING_ALGORITHM 为 round_robin 时,使用轮训负载均衡,按照顺序请求用户使用的模型的渠道。 AUTO_RETRY: true # 是否自动重试,自动重试下一个提供商,true 为自动重试,false 为不自动重试,默认为 true RATE_LIMIT: 2/min # 支持限流,每分钟最多请求次数,可以设置为整数,如 2/min,2 次每分钟、5/hour,5 次每小时、10/day,10 次每天,10/month,10 次每月,10/year,10 次每年。默认60/min,选填 ENABLE_MODERATION: true # 是否开启消息道德审查,true 为开启,false 为不开启,默认为 false,当开启后,会对用户的消息进行道德审查,如果发现不当的消息,会返回错误信息。 # 渠道级加权负载均衡配置示例 - api: sk-KjjI60Yd0JFWtxxxxxxxxxxxxxxwmRWpWpQRo model: - gcp1/*: 5 # 冒号后面就是权重,权重仅支持正整数。 - gcp2/*: 3 # 数字的大小代表权重,数字越大,请求的概率越大。 - gcp3/*: 2 # 在该示例中,所有渠道加起来一共有 10 个权重,及 10 个请求里面有 5 个请求会请求 gcp1/* 模型,2 个请求会请求 gcp2/* 模型,3 个请求会请求 gcp3/* 模型。 preferences: SCHEDULING_ALGORITHM: weighted_round_robin # 仅当 SCHEDULING_ALGORITHM 为 weighted_round_robin 并且上面的渠道如果有权重,会按照加权后的顺序请求。使用加权轮训负载均衡,按照权重顺序请求拥有请求的模型的渠道。当 SCHEDULING_ALGORITHM 为 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 秒,不设置 default,uni-api 会使用 环境变量 TIMEOUT 设置的默认超时时间,默认超时时间是 100 秒 o1-mini: 30 # 模型 o1-mini 的超时时间为 30 秒,当请求名字是 o1-mini 开头的模型时,超时时间是 30 秒 o1-preview: 100 # 模型 o1-preview 的超时时间为 100 秒,当请求名字是 o1-preview 开头的模型时,超时时间是 100 秒 cooldown_period: 300 # 渠道冷却时间,单位为秒,默认 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 "Authorization: Bearer sk-Pkj60Yf8JFWxfgRmXQFWyGtWUddGZnmi3KlvowmRWpWpQxx" -d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "Hello!"}]}'