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

发布时间:2026/6/23 17:52:14
LiteLLM实现OpenAI兼容网关:Azure多部署Token智能路由
1. 项目概述为什么你需要这个“Token中转站”式架构OpenClaw 是一个面向开发者和AI应用构建者的命令行工具核心定位是让本地AI工作流像调用系统命令一样简单——你可以直接在终端里敲openclaw chat --model claude-3-haiku或openclaw code --file main.py它就自动完成模型选择、上下文组装、API调用、流式响应渲染。但它的原生设计高度依赖 OpenAI 官方 API 的接口规范https://api.openai.com/v1/chat/completionsHeader 必须带Authorization: Bearer sk-xxx请求体必须是标准的messages数组 model字段。而 Azure OpenAI 的接口长这样https://YOUR_RESOURCE_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/chat/completions?api-version2024-06-01Header 要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_BASEDEPLOYMENT来自你传入的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: keyapi-version2024-06-01。LiteLLM 在转发前会做精准转换它把AuthorizationHeader 解析出 key然后删除原 Header新增api-keyHeader并在 URL 末尾追加?api-version2024-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_tokensOpenAI 是整数Azure 也是整数直通。temperatureOpenAI 是 0~2Azure 是 0~1LiteLLM 会做线性压缩azure_temp openai_temp / 2避免因超范围被 Azure 拒绝。response_formatOpenAI 支持{type:json_object}Azure 不支持LiteLLM 会自动移除该字段并记录 warning 日志而不是让请求失败。toolsOpenAI 的 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里然后提交到 GitLabLiteLLM 的 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-identity、azure-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 RPSS1是 50 RPS。免费层Free只有 10K token/月且不支持 GPT-4 Turbo对 OpenClaw 这种高频 CLI 工具毫无意义。Step 2创建 Deployment资源创建成功后进入其 “Manage deployments” 页面。点击 “Create new deployment”填写Model name:gpt-4o这是 Azure 官方支持的模型 IDDeployment name:gpt4o-prod-v1这是你对外暴露的逻辑名必须符合 DNS 子域名规则小写字母、数字、短横线Model version:2024-08-01-preview选最新稳定版支持更多参数点击 “Create”。部署成功后你会看到状态为 “Succeeded”。Step 3获取并配置环境变量在资源页面点击 “Keys and Endpoint”。复制Key 1不是 Key 2Key 2 是备用主用 Key 1和Endpoint形如https://your-resource-name.openai.azure.com/。在你的终端中设置环境变量不要写进.bashrc避免泄露export AZURE_API_BASEhttps://your-resource-name.openai.azure.com/ export AZURE_API_KEYyour-azure-api-key-here export AZURE_API_VERSION2024-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_KEYOpenClaw 调用时必须用这个 key。--port 4000监听端口OpenClaw 会连这里。--host 0.0.0.0允许外部访问如果你在 Docker 或远程服务器上运行。--debug开启调试日志能看到每个请求的完整转发过程排错神器。方式二配置文件启动推荐用于生产创建litellm_config.yamlmodel_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-4o和gpt-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 Providerprovider: name: openai base_url: http://localhost:4000/v1 # 指向你的 LiteLLM api_key: sk-1234567890 # 必须和 LiteLLM 的 master_key 一致注意base_url是http://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: openaiStep 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: input24, output156最后一行tokens: input24, output156就是 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 # 某个后端失败自动重试其他后端tpmTokens Per Minute参数是 LiteLLM 的“软限速器”。它不会硬拦截请求但会在路由决策时把tpm作为权重因子。比如gpt4o-us-east的tpm是 100000gpt4o-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 Forbidden到context window limitAzure 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 是 128KERROR: Model response exceeded max context length. Truncating...在 OpenClaw 调用时加--max-tokens 4096限制输出长度或用--system 请用不超过 200 字回答压缩 prompt。429 Too Many Requests单个 deployment 的 RPS 超限S0 是 10S1 是 50WARNING: 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_optionsenabled在 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命令背后发生了什么。集成步骤安装 Langfuse Python SDKpip install langfuse在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 地址启动 LiteLLMlitellm --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_KEYsk-lf-xxx设置环境变量然后在litellm_config.yaml中用${LANGFUSE_SECRET_KEY}引用。这样 key 不会出现在任何配置文件或 Git 历史中。4.4 生产环境加固Docker 部署与 TLS 终止本地litellm命令适合开发但生产环境必须容器化。以下是一个健壮的docker-compose.ymlversion: 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_URLsqlite:///./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-stoppedTLS 终止是必须的。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 会自动申请 Lets Encrypt 证书openclaw的base_url就改成https://litellm.your-domain.com/v1。这样MASTER_KEY在传输层就被加密了。最后一个避坑点openclaw的api_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 进程没关干净还在后台占着