在 Windows11 下搭建 LiteLLM 的过程
记录在 Windows11 下搭建一套完整的、生产可用的 LiteLLM 代理服务搭建指南。
用Docker部署一个高可用的代理服务,通过 PostgreSQL 统一管理密钥和用量,并为每个员工生成独立的管控密钥。
第一步:环境准备与安装
生产环境推荐使用 Docker 运行,以获得最好的隔离性和稳定性。
- 安装 Docker:确保你的服务器上已安装 Docker 和 Docker Compose。
- 准备 PostgreSQL:LiteLLM 需要使用数据库来持久化存储密钥、用量和日志数据。你可以使用云数据库(如阿里云RDS、AWS RDS),或通过 Docker 启动一个。为了方便测试,下面我们将在
docker-compose.yml中一并启动。 - 选择稳定版本:根据官方建议,生产环境应使用带有
-stable标签的 Docker 镜像,这些镜像经过了严格的负载测试 。当前稳定版本为v1.73.6-stable。
第二步:编写核心配置文件 (config.yaml)
这是整个代理服务的“大脑”,定义了可以访问哪些模型、后端地址、以及全局安全设置。
创建一个名为 config.yaml 的文件,内容如下:
# config.yaml
model_list:
# 定义第一个模型组:OpenAI 的 GPT-4
- model_name: gpt-4-team-a # 给员工看的“友好名称”
litellm_params:
model: openai/gpt-4o # 实际调用的模型
api_key: os.environ/OPENAI_API_KEY # 从环境变量读取,更安全
model_info:
mode: completion
access_groups: ["team-a", "product"] # 用于权限分组
# 定义第二个模型组:接入百炼平台的模型
- model_name: qwen-plus
litellm_params:
model: openai/qwen-plus
api_key: os.environ/BAILIAN_API_KEY
api_base: https://dashscope.aliyuncs.com/compatible-mode/v1 # 关键:指定百炼的base_url
model_info:
supports_vision: true # 支持图片输入
mode: completion
access_groups: ["team-b", "research"]
# 关键设置:让 1 个 Token 的成本显示为 1 块钱
input_cost_per_token: 0.00002
output_cost_per_token: 0.00012
# 通用设置
general_settings:
# 主密钥,用于管理所有子密钥 (必须以 sk- 开头)
master_key: sk-your-strong-master-key-here
# 数据库连接URL,将从环境变量读取
database_url: postgresql://user:password@postgres:5432/litellm
# 允许在请求头中传递自定义密钥字段,增加灵活性
litellm_key_header_name: "Authorization"
# 可选:设置内部用户的自助服务默认预算
litellm_settings:
max_internal_user_budget: 10 # 每个用户默认最多10美元
internal_user_budget_duration: "1mo" # 预算按月重置
核心要点:
model_name是暴露给员工的模型名,你可以起任何名字,比如把gpt-4o命名为gpt-4-team-a,实现模型与消费端的解耦。api_key建议通过os.environ/KEY_NAME从环境变量读取,避免硬编码在配置文件里 。master_key作为管理员的最高权限凭证,务必妥善保管 。
第三步:使用 Docker Compose 一键启动
创建一个 docker-compose.yml 文件,将 LiteLLM 代理和 PostgreSQL 服务一起启动。
# docker-compose.yml
version: '3.8'
services:
postgres:
image: postgres:15
container_name: litellm-db
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: litellm
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d litellm"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
litellm-proxy:
# 使用经过测试的稳定版本
image: ghcr.io/berriai/litellm:v1.73.6-stable
container_name: litellm-proxy
ports:
- "4000:4000" # 代理服务端口
environment:
# 从环境变量或 .env 文件读取真实密钥
BAILIAN_API_KEY: ${BAILIAN_API_KEY}
OPENAI_API_KEY: ${OPENAI_API_KEY}
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
DATABASE_URL: postgresql://user:password@postgres:5432/litellm
LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY} # 与 config.yaml 中的 master_key 一致
LITELLM_SALT_KEY: ${LITELLM_SALT_KEY} # 用于加密数据库中的密钥,随机生成一个长字符串
volumes:
- ./config.yaml:/app/config.yaml # 挂载本地配置文件
command: ["--config", "/app/config.yaml", "--port", "4000"]
depends_on:
postgres:
condition: service_healthy
restart: unless-stopped
volumes:
postgres_data:
在 docker-compose.yml 同级目录下,创建一个 .env 文件存放敏感信息:
# .env
BAILIAN_API_KEY=sk-xxxxxxxxx # 百炼平台的API密钥
OPENAI_API_KEY=sk-xxxxxxxxxxxxx
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxx
LITELLM_MASTER_KEY=sk-your-strong-master-key-here
LITELLM_SALT_KEY=a-very-long-random-string-for-encryption
然后运行 docker-compose up -d 即可启动服务。
第四步:生成员工子密钥 (企业管控核心)
服务启动后,可以使用主密钥来为每个员工生成独立的子密钥,并精细控制其权限和预算 。
- WEB页面:
http://localhost:4000/ui - API文档:
http://localhost:4000
第五步:员工IDE配置与测试
员工拿到自己的子密钥后,只需在 IDE 的 AI 插件中修改三个地方:
- 请求地址 (Base URL):修改为
http://你的代理服务器IP:4000(如果是云端,则使用公网IP或域名)。 - API 密钥:使用你为他生成的那个子密钥。
- 模型名称:根据 config.yaml 中定义的
model_name填写,比如gpt-4-team-a。
VSCode Cline 插件配置如下图
CONTINUE 插件配置如下
# continue.yaml
name: Local Config
version: 1.0.0
schema: v1
models:
# 使用 LiteLLM 代理的模型
- name: Qwen-Plus
provider: openai # 使用 OpenAI 兼容接口
model: qwen-plus # 这是 LiteLLM 中配置的 model_name
apiBase: http://localhost:4000/v1 # LiteLLM 地址
apiKey: sk-sEjuOhsUB5CAJVrw2OWVag # LiteLLM 生成的 API Key
roles:
- chat
- edit
- apply
- autocomplete
- summarize
验证一下: 员工可以使用命令行快速测试连通性 :
curl -X POST 'http://localhost:4000/chat/completions' \
-H 'Authorization: Bearer 员工子密钥' \
-H 'Content-Type: application/json' \
-d '{
"model": "gpt-4-team-a", # 注意:这里用的是 config.yaml 中的 model_name
"messages": [{"role": "user", "content": "Hello, world!"}]
}'
如果一切顺利,你将看到来自大模型的成功响应。