当前位置: 首页 > news >正文

LiteLLM实现OpenAI兼容网关:Azure多部署Token智能路由

1. 项目概述:为什么你需要这个“Token中转站”式架构

OpenClaw 是一个面向开发者和AI应用构建者的命令行工具,核心定位是让本地AI工作流像调用系统命令一样简单——你可以直接在终端里敲openclaw chat --model claude-3-haikuopenclaw code --file main.py,它就自动完成模型选择、上下文组装、API调用、流式响应渲染。但它的原生设计高度依赖 OpenAI 官方 API 的接口规范:https://api.openai.com/v1/chat/completions,Header 必须带Authorization: Bearer sk-xxx,请求体必须是标准的messages数组 +model字段。而 Azure OpenAI 的接口长这样:https://YOUR_RESOURCE_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/chat/completions?api-version=2024-06-01,Header 要api-key,还要传api-version查询参数,模型名不是gpt-4o而是部署时你起的gpt4o-prod-v1。这就导致一个现实困境:你手上有 Azure 的企业级额度(比如每月 50 万 token 配额、支持私有 VNET、合规审计日志),OpenClaw 却根本连不上——报错不是401 Unauthorized,就是404 Not Found,或者更隐蔽的{"error": {"message": "The model 'gpt-4o' does not exist."}}。我去年在给一家做医疗文书自动化的客户部署时就卡在这一步,他们 Azure 订阅里配了 3 个 GPT-4 Turbo 部署,但 OpenClaw 死活识别不了,最后硬是写了个 Python 脚本做中间层转发,结果每次升级 OpenClaw 就要同步改脚本,维护成本极高。

LiteLLM 就是这个困局的破局点。它不是简单的 HTTP 代理,而是一个“协议翻译器”+“路由调度器”+“统一认证网关”。它能把所有主流大模型平台(OpenAI、Azure、Anthropic、Cohere、DeepSeek、Ollama、甚至本地 vLLM)的千奇百怪的 API 格式,全部收敛成一套 OpenAI 兼容的 REST 接口。你启动 LiteLLM 后,它会暴露一个本地服务,地址通常是http://localhost:4000/v1,你往这里发标准 OpenAI 请求,LiteLLM 自动根据你配置的后端,把请求“翻译”成对应平台能懂的语言,再转发过去,拿到响应后再“翻译”回标准格式返回给你。这就像给 OpenClaw 配了一个万能适配器——它只认 OpenAI 插头,而 LiteLLM 把 Azure、Claude、DeepSeek 的各种插头都转成了它能插进去的标准规格。更重要的是,LiteLLM 内置了 Token 路由能力:你可以配置多个 Azure 部署作为后端,它能按权重、按成功率、按延迟自动轮询分发请求,相当于把分散在不同订阅、不同区域的 Token 额度,聚合成一个“弹性池子”。你再也不用盯着某个部署的 quota 剩多少,也不用手动切模型名,更不用为api error: the model has reached its context window limit.这种错误反复修改 prompt。我实测过,用 LiteLLM 对接 3 个 Azure 部署(East US, West US, UK South),单个请求的平均延迟只增加 87ms,但整体吞吐量提升了 2.3 倍,因为避免了单点配额耗尽导致的排队等待。这个架构的价值,远不止于“丝滑对接”,它本质是把碎片化的 AI 资源,变成了可编程、可监控、可伸缩的基础设施。

2. 核心技术拆解:LiteLLM 如何实现“无感翻译”与“智能路由”

2.1 协议翻译的底层机制:从 OpenAI 到 Azure 的三重映射

LiteLLM 的翻译能力不是靠字符串替换,而是基于对各平台 API 规范的深度解析和抽象建模。当你配置一个 Azure 后端时,LiteLLM 会建立三个关键映射层:

第一层:Endpoint 映射
OpenAI 的https://api.openai.com/v1/chat/completions被映射为 Azure 的https://<RESOURCE>.openai.azure.com/openai/deployments/<DEPLOYMENT>/chat/completions。这个映射不是静态的,LiteLLM 会动态拼接:<RESOURCE>来自你配置的AZURE_API_BASE<DEPLOYMENT>来自你传入的model参数(比如你调用curl -X POST http://localhost:4000/v1/chat/completions -H "Authorization: Bearer ..." -d '{"model":"gpt-4o","messages":...}',LiteLLM 就会把gpt-4o当作 deployment name 去查配置)。这里有个关键细节:Azure 的 deployment name 和 model name 是解耦的。你在 Azure Portal 创建一个 deployment 时,可以叫它gpt4o-prod-v1,但它背后实际是gpt-4o模型。LiteLLM 的model_list配置里,model_name字段是你对外暴露的“逻辑模型名”,litellm_params.model字段才是它内部映射到 Azure 的“物理部署名”。这种解耦让你可以随时在后台切换物理部署(比如从gpt4o-prod-v1切到gpt4o-staging-v2),而 OpenClaw 完全无感。

第二层:Header 与 Query Parameter 映射
OpenAI 只需要Authorization: Bearer <key>,而 Azure 需要api-key: <key>+api-version=2024-06-01。LiteLLM 在转发前会做精准转换:它把AuthorizationHeader 解析出 key,然后删除原 Header,新增api-keyHeader,并在 URL 末尾追加?api-version=2024-06-01。这个过程还包含安全校验——如果Authorization头不是Bearer类型,LiteLLM 会直接拒绝,防止非法请求穿透。更关键的是,它支持AZURE_API_VERSION环境变量覆盖默认版本,这对 Azure 的灰度发布极其重要。比如 Azure 新推了2024-08-01-preview版本,支持新的reasoning_effort参数,你只需改一个环境变量,所有通过 LiteLLM 的请求就自动升级,无需改任何业务代码。

第三层:Request/Response Body 映射
这是最复杂的部分。OpenAI 的messages数组是[{"role":"user","content":"hello"}],Azure 要求完全一样,所以这部分是直通。但其他字段差异巨大:

  • max_tokens:OpenAI 是整数,Azure 也是整数,直通。
  • temperature:OpenAI 是 0~2,Azure 是 0~1,LiteLLM 会做线性压缩(azure_temp = openai_temp / 2),避免因超范围被 Azure 拒绝。
  • response_format:OpenAI 支持{"type":"json_object"},Azure 不支持,LiteLLM 会自动移除该字段并记录 warning 日志,而不是让请求失败。
  • tools:OpenAI 的 function calling 格式和 Azure 的functions字段不兼容,LiteLLM 会做结构转换,把tools数组重构成 Azure 能识别的functions数组,并把tool_choice映射为function_call

我曾用 Wireshark 抓包对比过原始请求和 LiteLLM 转发后的请求,确认了所有字段转换的准确性。这种深度映射,是 LiteLLM 区别于简单反向代理(如 Nginx)的核心——它理解语义,而不仅是语法。

2.2 智能路由的实现原理:不只是轮询,而是带状态的决策引擎

LiteLLM 的路由能力常被简化为“轮询”,但实际远比这复杂。它内置了一个实时状态监控器,每个后端实例都有独立的健康指标:

  • Success Rate(成功率):每分钟统计该后端最近 100 次请求的成功/失败数,计算百分比。如果连续 3 分钟低于 95%,LiteLLM 会自动将其标记为degraded,降低其路由权重。
  • Latency(延迟):记录每次请求的 end-to-end 延迟(从 LiteLLM 接收到响应返回的时间)。它使用指数移动平均(EMA)算法平滑抖动,避免单次网络波动误判。
  • Rate Limit(限速状态):当后端返回429 Too Many Requests时,LiteLLM 会记录该后端进入“限速窗口”,在此期间(默认 60 秒)不再向其发送新请求,并将流量导向其他健康节点。

路由策略是可配置的,默认是least_busy(最少繁忙),即优先选当前并发请求数最少的后端。但更推荐latency_based(延迟优先)或usage_based(用量优先)。usage_based策略下,LiteLLM 会读取 Azure 的 Usage API(需额外配置AZURE_USAGE_API_KEY),实时获取每个 deployment 的当日已用 token 数,然后按剩余配额比例分配流量。比如 deployment A 剩 80%,deployment B 剩 20%,那么 80% 的请求会发给 A。这完美解决了“Token 不够用”的痛点——它不是等你快用完了才报警,而是从一开始就按最优比例分配,让总配额利用率最大化。我在压测中发现,usage_based策略下,3 个 deployment 的配额耗尽时间差被控制在 12 分钟内,而纯轮询模式下,最快的那个 23 分钟就爆了,最慢的还有 47% 剩余,严重浪费。

提示:LiteLLM 的路由决策是“请求级”的,不是“连接级”。这意味着每个openclaw命令执行都是一个独立请求,都会触发一次路由计算。所以你不需要担心长连接保持问题,也无需为 OpenClaw 配置特殊连接池。

2.3 安全与认证的加固设计:Master Key 与 Token 中继的边界

标题里提到“给应用配置了 master-key”,这触及了 LiteLLM 最关键的安全设计。LiteLLM 支持两级认证:

  • Client-Level Auth(客户端认证):OpenClaw 调用 LiteLLM 时,必须提供Authorization: Bearer <MASTER_KEY>。这个MASTER_KEY是你启动 LiteLLM 时通过--master-key参数指定的,比如litellm --model azure/gpt-4o --master-key sk-1234567890。LiteLLM 会验证此 key,验证通过才处理请求。
  • Backend-Level Auth(后端认证):LiteLLM 转发到 Azure 时,使用的AZURE_API_KEY是它自己配置的,绝不会把客户端的Authorization头透传给后端。这是严格隔离的。

这种设计彻底杜绝了“Token 中继风险”。有些开发者会误以为 LiteLLM 是个透明代理,想把自己的 Azure key 直接塞给 OpenClaw,这是极度危险的——一旦 OpenClaw 被入侵,你的 Azure key 就泄露了。而 LiteLLM 的模式是:OpenClaw 只知道 LiteLLM 的MASTER_KEY(一个随机字符串),LiteLLM 自己保管 Azure 的AZURE_API_KEY(存在环境变量或密钥管理服务中)。即使 OpenClaw 的配置文件被泄露,攻击者也只能访问 LiteLLM 这个网关,无法触达 Azure 后端。我见过太多团队把 API key 硬编码在openclaw.yaml里,然后提交到 GitLab,LiteLLM 的 master-key 机制,正是为了解决这种“密钥裸奔”问题。

3. 实操全流程:从零部署到 OpenClaw 无缝调用

3.1 环境准备与 LiteLLM 安装:避开 Python 版本陷阱

第一步永远是环境检查。OpenClaw 和 LiteLLM 都是 Python 工具,但它们对 Python 版本有隐性要求。OpenClaw 2.3+ 强制要求 Python 3.10+,而 LiteLLM 1.45+ 推荐 Python 3.10+,但如果你用 Python 3.12,会遇到pydantic兼容性问题——LiteLLM 的某些依赖(如litellm本身)在 3.12 下会报ImportError: cannot import name 'validate_arguments' from 'pydantic'。这不是 bug,而是 pydantic v1 和 v2 的 API 断裂。我的经验是:锁定 Python 3.11.9。这是目前最稳定的组合。

安装步骤如下(以 macOS/Linux 为例,Windows 用户请用 WSL2):

# 1. 创建专用虚拟环境,避免污染全局 Python python3.11 -m venv ~/venv-openclaw-litellm source ~/venv-openclaw-litellm/bin/activate # 2. 升级 pip,确保安装最新依赖 pip install --upgrade pip # 3. 安装 LiteLLM(注意:不要用 pip install litellm,那是旧版) pip install "litellm[azure]" # 显式安装 Azure 支持模块 # 如果你还想支持 Claude,加 [anthropic];支持 Ollama,加 [ollama] # 4. 验证安装 litellm --version # 输出应为类似:litellm v1.45.12

注意:pip install litellm[azure]这条命令至关重要。[azure]是一个“extras”标识,它会自动安装azure-identityazure-mgmt-monitor等 Azure 专用 SDK。如果漏掉,LiteLLM 启动时会报ModuleNotFoundError: No module named 'azure.core',而错误信息非常模糊,只会显示Failed to load model,让人误以为是配置问题。我踩过这个坑,在日志里翻了 2 小时才定位到。

3.2 Azure OpenAI 配置:从 Portal 到环境变量的完整链路

Azure 配置是整个流程的基石,任何一步出错都会导致后续全盘失败。以下是经过生产环境验证的最小可行配置:

Step 1:在 Azure Portal 创建资源

  • 进入 Azure AI Studio ,点击 “Create a resource” → “Azure OpenAI Service”。
  • Resource Group:新建一个,比如rg-ai-prod,不要用默认的DefaultResourceGroup-EastUS,便于权限隔离。
  • Region:选择离你用户最近的区域,比如East US。注意:Azure OpenAI 的模型部署必须和资源在同一区域,跨区域调用会失败。
  • Pricing Tier:生产环境务必选S0或更高(S0是 10 RPS,S1是 50 RPS)。免费层Free只有 10K token/月,且不支持 GPT-4 Turbo,对 OpenClaw 这种高频 CLI 工具毫无意义。

Step 2:创建 Deployment

  • 资源创建成功后,进入其 “Manage deployments” 页面。
  • 点击 “Create new deployment”,填写:
    • Model name:gpt-4o(这是 Azure 官方支持的模型 ID)
    • Deployment name:gpt4o-prod-v1(这是你对外暴露的逻辑名,必须符合 DNS 子域名规则:小写字母、数字、短横线)
    • Model version:2024-08-01-preview(选最新稳定版,支持更多参数)
  • 点击 “Create”。部署成功后,你会看到状态为 “Succeeded”。

Step 3:获取并配置环境变量

  • 在资源页面,点击 “Keys and Endpoint”。
  • 复制Key 1(不是 Key 2,Key 2 是备用,主用 Key 1)和Endpoint(形如https://your-resource-name.openai.azure.com/)。
  • 在你的终端中,设置环境变量(不要写进.bashrc,避免泄露):
    export AZURE_API_BASE="https://your-resource-name.openai.azure.com/" export AZURE_API_KEY="your-azure-api-key-here" export AZURE_API_VERSION="2024-08-01-preview"
  • 验证环境变量是否生效:
    echo $AZURE_API_BASE # 应输出你的 endpoint

实操心得:Azure 的AZURE_API_BASE必须/结尾,否则 LiteLLM 拼接 URL 时会变成https://.../openai/deployments/...,少了一个/就变成https://...openai/deployments/...,导致 404。这个细节在 Azure 文档里没强调,但 LiteLLM 的日志会明确报错Invalid URL: ...。我建议用echo $AZURE_API_BASE | grep "/$" || echo "Missing trailing slash!"做一键检查。

3.3 启动 LiteLLM 服务:单命令 vs 配置文件的权衡

LiteLLM 提供两种启动方式,各有适用场景:

方式一:单命令启动(适合快速验证)

litellm \ --model azure/gpt-4o \ --api-key sk-1234567890 \ --port 4000 \ --host 0.0.0.0 \ --debug
  • --model azure/gpt-4o:告诉 LiteLLM,所有请求都路由到 Azure 的gpt-4o模型。
  • --api-key sk-1234567890:这是 LiteLLM 的MASTER_KEY,OpenClaw 调用时必须用这个 key。
  • --port 4000:监听端口,OpenClaw 会连这里。
  • --host 0.0.0.0:允许外部访问(如果你在 Docker 或远程服务器上运行)。
  • --debug:开启调试日志,能看到每个请求的完整转发过程,排错神器。

方式二:配置文件启动(推荐用于生产)
创建litellm_config.yaml

model_list: - model_name: gpt-4o litellm_params: model: azure/gpt-4o api_base: ${AZURE_API_BASE} api_key: ${AZURE_API_KEY} api_version: ${AZURE_API_VERSION} - model_name: gpt-35-turbo litellm_params: model: azure/gpt-35-turbo api_base: ${AZURE_API_BASE} api_key: ${AZURE_API_KEY} api_version: ${AZURE_API_VERSION} general_settings: master_key: sk-1234567890 database_url: "sqlite:///./litellm.db" # 启用数据库,用于存储 usage logs

然后启动:

litellm --config litellm_config.yaml --port 4000 --host 0.0.0.0

为什么推荐配置文件?因为model_list支持多模型、多后端。你可以把gpt-4ogpt-35-turbo都列出来,OpenClaw 就能通过--model gpt-4o--model gpt-35-turbo自由切换,而不用重启 LiteLLM。database_url启用后,LiteLLM 会把每次调用的 token 用量、延迟、模型名存进 SQLite,方便你用SELECT * FROM spend_logs;查看历史消耗,这是 Azure Portal 里看不到的细粒度数据。

3.4 OpenClaw 配置与调用:让 CLI 命令“认出”你的新网关

OpenClaw 的配置文件是~/.openclaw/config.yaml。你需要修改两个关键部分:

Step 1:配置 API Provider

provider: name: openai base_url: "http://localhost:4000/v1" # 指向你的 LiteLLM api_key: "sk-1234567890" # 必须和 LiteLLM 的 master_key 一致

注意:base_urlhttp://localhost:4000/v1,不是http://localhost:4000。LiteLLM 的 OpenAI 兼容接口路径是/v1,少这个路径会 404。

Step 2:配置默认模型(可选但强烈推荐)

models: default: gpt-4o # 这个名字必须和 litellm_config.yaml 里的 model_name 一致 available: - name: gpt-4o provider: openai - name: gpt-35-turbo provider: openai

Step 3:测试调用

# 测试基础 chat openclaw chat "解释一下量子纠缠" # 测试指定模型 openclaw chat --model gpt-35-turbo "用 Python 写一个快速排序" # 测试 code 模式(OpenClaw 的特色功能) openclaw code --file requirements.txt "添加 pandas 依赖"

如果一切正常,你会看到流式输出,和直接调 OpenAI 官方 API 一模一样。此时,打开 LiteLLM 的终端,你会看到类似日志:

INFO: 127.0.0.1:54321 - "POST /v1/chat/completions HTTP/1.1" 200 OK DEBUG: Forwarding request to azure/gpt-4o (https://your-resource-name.openai.azure.com/) DEBUG: Azure response status: 200, tokens: input=24, output=156

最后一行tokens: input=24, output=156就是 LiteLLM 从 Azure 响应头里解析出的实际 token 消耗,它会自动计入数据库。

常见错误排查:如果openclaw chat报错openclaw : 无法将“openclaw”项识别为 cmdlet、函数、脚本文件或可运行程序的名,这不是 LiteLLM 的问题,而是 Windows PowerShell 的执行策略限制。解决方案:以管理员身份运行 PowerShell,执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,然后关闭重启终端。这是 Windows 系统级问题,和本项目无关,但新手极易卡在这里。

4. 进阶实战与避坑指南:从“能用”到“好用”的关键跃迁

4.1 多 Azure 部署的负载均衡:告别单点配额焦虑

标题说“再也不用为 Token 不够而发愁”,真正的实现靠的是多部署路由。假设你有 3 个 Azure 订阅,每个都部署了gpt-4o,分别叫gpt4o-us-east,gpt4o-us-west,gpt4o-uk-south。你需要在litellm_config.yaml中这样配置:

model_list: - model_name: gpt-4o litellm_params: model: azure/gpt-4o api_base: "https://us-east-resource.openai.azure.com/" api_key: "${AZURE_API_KEY_US_EAST}" api_version: "2024-08-01-preview" tpm: 100000 # tokens per minute, 设置每个后端的理论吞吐上限 - model_name: gpt-4o litellm_params: model: azure/gpt-4o api_base: "https://us-west-resource.openai.azure.com/" api_key: "${AZURE_API_KEY_US_WEST}" api_version: "2024-08-01-preview" tpm: 100000 - model_name: gpt-4o litellm_params: model: azure/gpt-4o api_base: "https://uk-south-resource.openai.azure.com/" api_key: "${AZURE_API_KEY_UK_SOUTH}" api_version: "2024-08-01-preview" tpm: 100000 router_settings: routing_strategy: "usage_based" # 关键!启用用量感知路由 num_retries: 3 # 某个后端失败,自动重试其他后端

tpm(Tokens Per Minute)参数是 LiteLLM 的“软限速器”。它不会硬拦截请求,但会在路由决策时,把tpm作为权重因子。比如gpt4o-us-easttpm是 100000,gpt4o-uk-south是 50000,那么前者被选中的概率是后者的 2 倍。routing_strategy: "usage_based"则更进一步,它会调用 Azure 的 Usage API(需提前在 Azure Portal 为每个资源启用 “Monitor” 权限),实时读取每个 deployment 的当日已用 token 数,然后按剩余配额比例分配。这才是真正意义上的“Token 不够用”终结者。

实操心得:Azure Usage API 的调用频率有限制(每小时 100 次),LiteLLM 默认每 5 分钟拉一次,刚好是 12 次/小时,留有余量。如果你配置了 10 个 deployment,建议把litellm_config.yaml里的usage_cache_time改为300(秒),避免超限。这个参数在 LiteLLM 文档里藏得很深,只有在 GitHub Issues 里才能找到。

4.2 处理常见 Azure 错误:从403 Forbiddencontext window limit

Azure OpenAI 的错误码比 OpenAI 更“诚实”,但也更难懂。LiteLLM 会捕获并美化这些错误,但你需要知道根源:

Azure Error原因LiteLLM 日志表现解决方案
403 Forbidden: country你的 IP 出口国家不在 Azure 允许列表(如中国内地)DEBUG: Azure response status: 403, error: {"error": {"code": "Forbidden", "message": "country..."}}不能解决。Azure OpenAI 服务在中国内地不可用,必须用国际版 Azure(如 East US)或切换到其他支持中国内地的模型(如 DeepSeek)。
400 The model has reached its context window limit.Prompt + Response 总 token 超过模型最大上下文(GPT-4 Turbo 是 128K)ERROR: Model response exceeded max context length. Truncating...在 OpenClaw 调用时加--max-tokens 4096限制输出长度,或用--system "请用不超过 200 字回答"压缩 prompt。
429 Too Many Requests单个 deployment 的 RPS 超限(S0 是 10,S1 是 50)WARNING: Backend gpt4o-us-east is rate limited. Skipping for 60s.启用多部署路由,或升级 Azure 订阅到更高 tier。
400 thinking options type cannot be disabled when reasoning_effort你用了reasoning_effort参数,但thinking_options没设为enabledERROR: Invalid parameter: reasoning_effort requires thinking_options=enabled在 OpenClaw 的--options里加上{"thinking_options": "enabled"}

重点提醒:sign-in could not be completed token exchange failed: token endpoint returned status 403 forbidden: country这个错误,100% 是 Azure 地域限制问题,和 LiteLLM、OpenClaw 都无关。它发生在 Azure 的 OAuth2 认证环节,意味着你的浏览器或设备 IP 所在国家,Azure 不允许登录。解决方案只有两个:换一个允许的国家的网络(如美国 VPS),或放弃 Azure OpenAI,改用 Anthropic 或 DeepSeek 的 API。网上流传的“修改 User-Agent”、“伪造 Referer” 等方法,对 Azure 的风控无效。

4.3 监控与可观测性:用 Langfuse 实现无侵入 Agent 追踪

标题里提到litellm + langfuse 实现 agent 无侵入性集成,这是提升工程化水平的关键。Langfuse 是一个开源的 LLM 应用可观测平台,它可以自动捕获 LiteLLM 的所有请求/响应,生成 trace 图,让你看清每个openclaw命令背后发生了什么。

集成步骤:

  1. 安装 Langfuse Python SDK:pip install langfuse
  2. litellm_config.yaml中添加:
    general_settings: langfuse_public_key: "pk-lf-xxxxxx" # Langfuse 项目 Public Key langfuse_secret_key: "sk-lf-xxxxxx" # Langfuse 项目 Secret Key langfuse_host: "https://cloud.langfuse.com" # 或你的自建 Langfuse 地址
  3. 启动 LiteLLM:litellm --config litellm_config.yaml

之后,每次openclaw调用,Langfuse 都会自动生成一个 trace,包含:

  • 完整的 prompt 和 completion
  • 每个 token 的耗时(可分析瓶颈)
  • 模型名、输入/输出 token 数
  • 错误堆栈(如果失败)

你可以在 Langfuse UI 里搜索openclaw,看到所有命令的执行历史。这对于调试openclaw code这种复杂 workflow 极其有用——你能看到它调用了几次模型,每次的 prompt 是什么,哪一次出错了。

实操心得:Langfuse 的langfuse_secret_key是敏感信息,绝对不要硬编码在配置文件里。正确做法是:在启动 LiteLLM 的 shell 脚本中,用export LANGFUSE_SECRET_KEY="sk-lf-xxx"设置环境变量,然后在litellm_config.yaml中用${LANGFUSE_SECRET_KEY}引用。这样 key 不会出现在任何配置文件或 Git 历史中。

4.4 生产环境加固:Docker 部署与 TLS 终止

本地litellm命令适合开发,但生产环境必须容器化。以下是一个健壮的docker-compose.yml

version: '3.8' services: litellm: image: ghcr.io/berriai/litellm:latest ports: - "4000:4000" environment: - AZURE_API_BASE=${AZURE_API_BASE} - AZURE_API_KEY=${AZURE_API_KEY} - AZURE_API_VERSION=${AZURE_API_VERSION} - LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY} - DATABASE_URL=sqlite:///./litellm.db - LANGFUSE_PUBLIC_KEY=${LANGFUSE_PUBLIC_KEY} - LANGFUSE_SECRET_KEY=${LANGFUSE_SECRET_KEY} volumes: - ./litellm.db:/app/litellm.db - ./litellm_config.yaml:/app/litellm_config.yaml command: > --config /app/litellm_config.yaml --port 4000 --host 0.0.0.0 --debug restart: unless-stopped

TLS 终止是必须的。LiteLLM 默认 HTTP,但 OpenClaw 会把MASTER_KEY明文发过去。如果中间有代理或公网访问,必须加 HTTPS。最简单的方式是用 Caddy 作为反向代理:

# Caddyfile https://litellm.your-domain.com { reverse_proxy http://litellm:4000 { header_up Authorization {http.request.header.Authorization} } }

Caddy 会自动申请 Let's Encrypt 证书,openclawbase_url就改成https://litellm.your-domain.com/v1。这样,MASTER_KEY在传输层就被加密了。

最后一个避坑点:openclawapi_key配置,永远不要sk-开头的字符串。虽然它接受,但这是一个巨大的安全反模式。你应该用一个完全随机的、无意义的字符串,比如openssl rand -hex 16生成的a1b2c3d4e5f678901234567890abcdef。因为sk-前缀会让任何看到配置的人,下意识认为这是 OpenAI key,从而放松警惕。安全的第一步,是消除所有认知偏差。

5. 常见问题速查表与独家排错技巧

问题现象根本原因快速诊断命令终极解决方案我的排错心得
openclaw chat报错Connection refusedLiteLLM 服务未启动,或端口被占用lsof -i :4000(macOS/Linux) 或netstat -ano | findstr :4000(Windows)kill -9 $(lsof -t -i :4000)杀掉占用进程,再启动 LiteLLM永远先查端口。我有 70% 的“连不上”问题,都是因为之前启动的 LiteLLM 进程没关干净,还在后台占着
http://www.jsqmd.com/news/1068518/

相关文章:

  • Claude Code深度实战:VS Code中构建可编程的AI代码搭档
  • OpticsGPT:大语言模型如何革新光学设计流程
  • AI驱动下的网络安全新范式:攻防博弈、攻击面扩张与红队进化
  • OpenStack容器化部署实战:基于kolla-ansible的生产级私有云搭建指南
  • 大华DSS平台user_edit.action接口信息泄露漏洞复现与深度分析
  • Mac系统Python+Selenium自动化环境部署全攻略与避坑指南
  • 逆向工程实战:从AES/RSA算法到iBox应用解密的技术解析
  • 从CVE-2022-37969漏洞剖析现代恶意软件攻击链与防御实践
  • SRS流媒体服务器HTTP API安全漏洞扫描与加固实战指南
  • OrientDB plocal备份原理与backup.sh实战指南
  • Claude Code深度解析:基于Bash/Git/工具链的上下文感知编程协作者
  • 手写SKILL.md:EDA中契约驱动的接口文档实践
  • Ubuntu 14.04 Salt Master/Minion 部署实战:兼容性、安全与幂等性
  • Ubuntu 18.04 部署 Discourse 的 Docker 化实践与故障排查
  • 用Node.js构建Discord机器人:从环境配置到Slash Command实战
  • 如何合法稳定接入Claude模型提升编程效率
  • 对称加密与非对称加密:原理、差异与混合应用实战
  • Python文件加密器:基于AES与Fernet实现本地安全传输解决方案
  • Claude Code Skills 源码深度解析:AI原生工作流的契约式执行架构
  • 从XSS到蠕虫:剖析Samy攻击原理与DVWA靶场复现
  • Jekyll静态站Canonical标签配置指南:解决重复内容SEO问题
  • XMEGA RTC软件校准:从原理到实践,提升嵌入式时钟精度
  • Claude Opus 4.7 Adaptive Thinking 原理与工程实践指南
  • VS Code 内置 Git 集成:零命令行的可视化版本控制工作流
  • 系统漏洞利用与提权:从攻击链拆解到防御体系构建
  • 网络安全信息收集实战:从CDN绕过到资产测绘的完整攻防体系
  • Rails URL Helpers 深度解析:path 与 url 的本质区别及工程实践
  • React Suspense与lazy:异步渲染契约与代码分割实战
  • 深入解析ColdFire中断控制器:从原理到实战配置
  • GitLab CI/CD在Ubuntu上的Docker+SSH持续部署实践