one-key-single-config-multi-tool-clients · ZH · 2026-10-05

一个 key 一份配置:用同一个接口同时驱动 Claude Code、Cursor 和脚本

本文介绍如何让 Claude Code、Cursor 和普通 Python/Node 脚本等不同客户端,统一使用同一个 LLM API 聚合站的 base_url 和 API key。内容涵盖环境变量冲突的成因与解决方案,并提供具体的配置步骤和最佳实践,帮助你在多工具间无缝切换,无需反复修改密钥。

当你同时使用多个 AI 工具——比如命令行里的 Claude Code、IDE 中的 Cursor、以及自己写的 Python 或 Node 脚本——最头疼的往往是每个工具都需要单独配置 API 密钥和接口地址。如果每个工具都去申请一套密钥,不仅管理麻烦,还可能因为混淆而调用错误。更合理的方式是:所有客户端都指向同一个 LLM API 聚合站,使用同一个 base_url 和 key。这样你只需要维护一份配置,就能让所有工具共享同一个额度池,并且随时切换模型。

为什么会出现环境变量冲突

大多数客户端都通过环境变量来读取 API 配置。常见的变量名包括:

  • OPENAIAPIKEY 和 OPENAIBASEURL
  • ANTHROPICAPIKEY 和 ANTHROPICBASEURL
  • 某些工具自定义的变量,如 CLAUDECODEUSE_BEDROCK 等

问题在于,不同工具可能使用相同的变量名,但期望不同的值。例如,Claude Code 默认会读取 ANTHROPICAPIKEY,而 Cursor 可能也读取同样的变量。如果你在 shell 里全局设置了这些变量,那么所有工具都会用同一个值——这看起来是好事,但如果你同时想用官方 API 和聚合站,或者不同项目需要不同配置,就会互相覆盖。

更隐蔽的冲突是:某些工具会读取 OPENAIAPIKEY 来调用 OpenAI 兼容接口,而另一些工具则读取 ANTHROPICAPIKEY 来调用 Anthropic 兼容接口。如果你的聚合站同时提供这两种兼容接口,那么你可能会不小心让某个工具用了错误的变量,导致认证失败或调用了非预期的模型。

统一配置的核心思路

要让多个客户端共用同一套配置,关键在于两点:

  1. 统一 base_url 和 key 的值:确保所有工具最终使用的接口地址和密钥是同一个。
  2. 隔离环境变量的作用域:避免不同工具之间因为变量名相同而互相干扰。

具体来说,你可以为每个工具创建独立的启动脚本或配置文件,在启动时动态设置环境变量,而不是在全局 shell 配置中写死。这样,每个工具都能拿到正确的值,同时不会影响其他工具。

具体配置步骤

1. 获取聚合站的 base_url 和 key

假设你的聚合站提供了 OpenAI 兼容接口和 Anthropic 兼容接口,通常会有两个 base_url:

  • OpenAI 兼容:https://api.example.com/v1
  • Anthropic 兼容:https://api.example.com

你需要在聚合站后台生成一个 API key。这个 key 通常对两种接口都有效(具体以聚合站文档为准)。

2. 为 Claude Code 配置

Claude Code 是一个命令行工具,通常通过环境变量读取配置。你可以在启动 Claude Code 的脚本中这样写:

export ANTHROPIC_BASE_URL="https://api.example.com"
export ANTHROPIC_API_KEY="sk-your-aggregator-key"
claude-code

注意:不要把这些 export 语句放在你的 ~/.bashrc 或 ~/.zshrc 中,否则它们会全局生效,可能影响其他工具。建议写在一个单独的脚本里,每次需要时运行。

3. 为 Cursor 配置

Cursor 的配置方式可能因版本而异。通常你可以在 Cursor 的设置中填入自定义的 API base_url 和 key。如果 Cursor 支持通过环境变量覆盖,你可以在启动 Cursor 时临时设置:

ANTHROPIC_BASE_URL="https://api.example.com" ANTHROPIC_API_KEY="sk-your-aggregator-key" cursor

如果 Cursor 只支持在图形界面中配置,那么直接在设置里填入聚合站的地址和 key 即可。注意检查 Cursor 使用的是哪个变量名,避免与其他工具冲突。

4. 为 Python/Node 脚本配置

对于自己写的脚本,推荐使用 .env 文件或直接在代码中读取环境变量。例如,Python 中可以使用 python-dotenv:

from openai import OpenAI
import os
from dotenv import load_dotenv

load_dotenv()  # 从 .env 文件加载

client = OpenAI(
    base_url=os.getenv("OPENAI_BASE_URL"),
    api_key=os.getenv("OPENAI_API_KEY")
)

然后在项目根目录创建 .env 文件:

OPENAI_BASE_URL=https://api.example.com/v1
OPENAI_API_KEY=sk-your-aggregator-key

这样每个项目可以有独立的 .env,互不干扰。Node.js 中可以使用 dotenv 包达到类似效果。

5. 避免环境变量冲突的实用技巧

  • 使用 direnv:direnv 可以在进入目录时自动加载 .envrc 文件,离开时卸载。这样不同项目可以有不同的环境变量,且不会污染全局。
  • 为每个工具创建别名:在 shell 中定义函数或别名,在启动工具前设置特定的环境变量。例如:
  • ```bash
    alias claude-code-aggregator='ANTHROPICBASEURL="https://api.example.com" ANTHROPICAPIKEY="sk-xxx" claude-code'
    ```

  • 避免在全局配置中设置 API 密钥:除非你确定所有工具都使用同一个聚合站,否则不要在 ~/.bashrc 中 export 这些变量。
  • 检查工具文档:不同工具读取的变量名可能不同,务必确认。例如,有些工具可能读取 OPENAIAPIBASE 而不是 OPENAIBASEURL。

验证配置是否生效

配置完成后,你可以用简单的方法验证:

  • 对于 Claude Code,运行一个简单命令,看是否返回结果。
  • 对于 Cursor,在聊天窗口中提问,观察是否使用了聚合站的模型。
  • 对于脚本,打印出实际使用的 base_url 和 key(注意不要泄露 key),或者发送一个测试请求。

如果遇到认证错误,首先检查环境变量是否被正确设置,以及是否被其他工具覆盖。

总结

通过统一 base_url 和 key,并利用环境变量的作用域隔离,你可以让 Claude Code、Cursor 和自定义脚本共享同一个 LLM API 聚合站。关键点在于:不要全局写死环境变量,而是为每个工具或项目单独配置。这样既能享受聚合站带来的便利(一个 key 调用多个模型、按官方价 ×1.3 扣费、USDC 充值无 KYC),又能避免工具间的配置冲突。