uni-api: big model API ligera convertida en interfaz OpenAI, archivo YAML para configurar el canal API
Últimos recursos sobre IAActualizado hace 9 meses Círculo de intercambio de inteligencia artificial 2.7K 00
Introducción general
No front-end , pura configuración de archivos de configuración del canal API. Sólo tienes que escribir un archivo puede ejecutar una estación de API de su propia, el documento tiene una guía de configuración detallada, blanco amigable.
uni-api es un proyecto para unificar la gestión de grandes APIs de modelos, permitiendo invocar múltiples servicios back-end a través de una única interfaz API unificada al formato OpenAI con soporte de balanceo de carga. El proyecto es especialmente adecuado para usuarios individuales que no necesitan una interfaz front-end compleja, y es compatible con una amplia gama de modelos y proveedores de servicios, incluyendo OpenAI, Anthropic, Gemini, Vertex y otros.
Lista de funciones
- Interfaz API unificada: Llame a múltiples servicios back-end a través de una única interfaz API unificada.
- conversión de formatoConvertir APIs de diferentes proveedores de servicios al formato OpenAI.
- equilibrio de cargaAdmite diversas estrategias de equilibrio de carga, como el sondeo, el sondeo ponderado, etc.
- Soporte multiservicioSoporte para OpenAI, Anthropic, Gemini, Vertex y muchos otros proveedores de servicios.
- Gestión de archivos de configuración: Gestiona canales y modelos de API a través de archivos de configuración.
- auto-retry: Reintenta automáticamente el siguiente canal cuando falla una petición API.
- control de privilegios: Admite un control de privilegios detallado y configuraciones de limitación de flujo.
Utilizar la ayuda
Despliegue ligero
Después de hacer clic en el botón de despliegue con un solo clic, establezca las variables de entorno CONFIG_URL
para la cadena directa de perfiles. DISABLE_DATABASE
a verdadero y haga clic en Crear para crear el proyecto.
2.serv00 Despliegue remoto
En primer lugar, acceda al panel, haga clic en la pestaña Ejecutar sus propias aplicaciones en Servicios adicionales para permitir la ejecución de sus propias aplicaciones y, a continuación, vaya al panel Reserva de puerto para abrir un puerto aleatorio.
Si no tiene su propio nombre de dominio, vaya al panel Sitios web WWW y elimine el nombre de dominio dado por defecto, luego cree un nuevo nombre de dominio Dominio para el nombre de dominio que acaba de eliminar, haga clic en Configuración avanzada y establezca el Tipo de sitio web en Nombre de dominio proxy, el Puerto proxy apuntando al puerto que acaba de abrir y no marque Usar HTTPS.
ssh Inicie sesión en el servidor serv00 y ejecute el siguiente comando:
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 Salir de tmux Espere unas horas a que finalice la instalación y, cuando lo haga, ejecute el siguiente comando:
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
Usa ctrl+b d para salir de tmux y dejar la aplicación ejecutándose en segundo plano. En este punto puede utilizar uni-api en otros clientes de chat. script de prueba curl:
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.Despliegue local de Docker
Contenedor de lanzamiento
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
O, si quieres usar Docker Compose, aquí tienes un docker-compose.yml de ejemplo:
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 es el archivo de configuración que puede descargarse automáticamente desde una ubicación remota. Por ejemplo, si no tiene la conveniencia de modificar el archivo de configuración en una determinada plataforma, puede pasar el archivo de configuración a un determinado servicio de alojamiento, que puede proporcionar un enlace directo para que uni-api lo descargue, y CONFIG_URL es este enlace directo. Si utiliza archivos de configuración montados localmente, no necesita establecer CONFIG_URL. CONFIG_URL se utiliza cuando es inconveniente montar archivos de configuración.
Ejecutar el contenedor Docker Compose en segundo plano
docker-compose pull docker-compose up -d
Construcción Docker
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
Reiniciar una imagen Docker con un solo clic
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
Prueba 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}'
Proceso de instalación
- Preparación del archivo de configuraciónCrea un archivo llamado
api.yaml
rellenando la información del proveedor de servicios, la dirección API y la clave API. - Cargar archivos de configuraciónSube el archivo de configuración a una unidad en la nube para obtener un enlace directo al archivo.
- Iniciar un contenedor Docker::
- utilizar
CONFIG_URL
La variable de entorno establece la URL del archivo de configuración. - establecer
DISABLE_DATABASE
debido atrue
. - Inicie el contenedor utilizando el comando Docker:
docker run -d --name uni-api -e CONFIG_URL=http://file_url/api.yaml -e DISABLE_DATABASE=true yym68686/uni-api:latest
- utilizar
- Configurar el puertoAbre un puerto aleatorio en el panel y apúntalo al contenedor Docker.
Proceso de utilización
- Llamada a la API: Llamada a servicios back-end mediante una interfaz API unificada, compatible con múltiples modelos y proveedores de servicios.
- equilibrio de cargaAsigna automáticamente las solicitudes a los distintos canales en función de la política de equilibrio de carga del archivo de configuración.
- control de privilegiosControla el alcance del uso de la clave API y la limitación del flujo en función de la configuración de permisos en el archivo de configuración.
- auto-retry: Garantice una alta disponibilidad reintentando automáticamente el siguiente canal disponible cuando falle una solicitud.
Pasos detallados
- Ejemplo de archivo de configuración::
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 时,不启用冷却机制。
- Contenedor de lanzamiento::
docker run -d --name uni-api -e CONFIG_URL=http://file_url/api.yaml -e DISABLE_DATABASE=true yym68686/uni-api:latest
- Llamada a la 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!"}]}'
© declaración de copyright
Derechos de autor del artículo Círculo de intercambio de inteligencia artificial Todos, por favor no reproducir sin permiso.
Artículos relacionados
Sin comentarios...