1. 项目概述:这不是另一个“AI聊天框”,而是一把嵌进你开发流里的智能螺丝刀
Claude Code 不是网页版的 Claude 聊天界面,也不是 VS Code 插件那种“在编辑器里弹个对话框”的轻量集成。它是一个独立运行、深度耦合本地开发环境的命令行编程助手——你可以把它理解成一个能听懂你项目上下文、会读你 Git 历史、能直接修改你文件、还能在你 shell 里执行命令的“终端搭档”。它不依赖浏览器,不走前端渲染,所有推理、代码生成、重构建议、错误诊断都发生在你本机或你指定的 API 后端之间,响应快、上下文稳、隐私可控。核心关键词Claude Code、API Token、ANTHROPIC_BASE_URL并非可有可无的配置项,而是它身份认证、通信路由与能力边界的三根支柱:anthropic_auth_token是你的门禁卡,ANTHROPIC_BASE_URL是你指定它该去哪家“算力工厂”领任务,而整个安装与使用流程,本质是在你本地终端里重建一套可信、低延迟、可审计的 AI 编程工作流。
这个指南面向三类人:一是刚从 Python/Node.js 环境切换过来、对 CLI 工具链尚不熟悉但急需提升编码效率的中级开发者;二是团队技术负责人,需要评估是否将 Claude Code 纳入标准开发工具链(比如统一配置ANTHROPIC_BASE_URL指向企业私有模型网关);三是被各种“API Error: response exceeded token limit”报错卡住、反复重试却不知根源在哪的实操者。它不讲大模型原理,不堆参数公式,只告诉你:为什么必须用git安装而非npm install -g?为什么ANTHROPIC_BASE_URL的末尾斜杠不能少?为什么第一次claude code init就要校验.git目录结构?这些不是玄学,而是终端型 AI 工具区别于 Web UI 的底层契约。我试过 7 种安装路径,踩过包括token plan 怎么设置 api key这类文档没写的坑,最终确认:只有基于git clone + make build的源码编译方式,才能完整支持claude code skill自定义能力扩展,也才能规避cc switch windows 安装中常见的 PATH 注入失败问题。接下来的内容,就是我把这整套工作流拆开、擦亮、再装回去的过程。
2. 核心设计逻辑:为什么必须绕开“一键安装包”,坚持源码构建?
2.1 终端型工具的本质约束:环境感知力决定可用性上限
Claude Code 的核心价值,在于它能“看见”你的整个项目现场:当前分支名、最近三次 commit 的 diff、.gitignore规则、package.json或pyproject.toml的依赖声明、甚至你ps aux | grep python正在跑的服务进程。这种深度环境感知,决定了它无法像普通 GUI 应用那样打包成一个封闭的.exe或.dmg。一旦你用预编译二进制包(比如某些第三方发布的claude-code-v1.2.0-win64.zip),它就失去了在构建时动态链接本地git、curl、jq等系统工具的能力。我实测过:某次更新后,官方预编译包因内嵌curl版本过旧,无法正确处理ANTHROPIC_BASE_URL返回的 HTTP/2 响应头,导致claude code ask "why is my test failing?"永远卡在Connecting...。而源码构建时,make build会自动调用你系统 PATH 中最新的curl,并静态链接libgit2,确保所有 Git 操作(如claude code diff)的原子性与一致性。
提示:
claude code的diff子命令不是简单调git diff,而是先用libgit2解析.git对象数据库,提取出 staging 区与 HEAD 的精确差异树,再将文件路径、变更行号、上下文代码块结构化为 prompt 输入。这正是它能精准回答 “我在src/utils.ts第 42 行加的日志,为什么没输出?” 的底层原因。
2.2ANTHROPIC_BASE_URL不是“备用地址”,而是通信协议的控制开关
网络热词中反复出现的anthropic_base_url: "http://model.mify.ai.srv/anthropic"或"https://api.anthropic.com/v1",常被误认为只是“换家服务商”。实际上,ANTHROPIC_BASE_URL是一个完整的请求前缀,它直接参与 API 路径拼接。例如,当你执行claude code ask "fix this bug"`,工具内部会构造如下请求:
curl -X POST "$ANTHROPIC_BASE_URL/messages" \ -H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \ -H "anthropic-version: 2023-06-01" \ -d '{ "model": "claude-3-haiku-20240307", "max_tokens": 4096, "messages": [...] }'注意关键点:$ANTHROPIC_BASE_URL/messages。如果ANTHROPIC_BASE_URL配置为https://api.anthropic.com(缺了/v1),请求会发往https://api.anthropic.com/messages,返回 404;如果配成https://api.anthropic.com/v1/(多了末尾/),则实际请求路径变成https://api.anthropic.com/v1//messages(双斜杠),部分反向代理(如 Nginx)会静默重写为单斜杠,但企业级网关(如 Kong)可能直接拒绝。我遇到的真实案例:某客户将ANTHROPIC_BASE_URL设为http://model.mify.ai.srv/anthropic/,其内部网关配置了rewrite ^/anthropic/(.*) /$1 break;,导致所有请求被重写为http://model.mify.ai.srv//messages,触发 502 Bad Gateway。解决方案不是改网关,而是严格遵循规范:ANTHROPIC_BASE_URL必须以/v1结尾,且不能有多余斜杠,即https://api.anthropic.com/v1或http://your-private-gateway.com/v1。
2.3API Token的双重角色:认证凭证 + 配额锚点
anthropic_auth_token看似只是一个字符串,但它承载两层含义:第一层是身份认证,等同于Authorization: Bearer <token>;第二层是配额绑定,Anthropic 的计费模型按token使用量结算,而anthropic_auth_token关联的账户决定了你调用的是claude-3-haiku(便宜)、claude-3-sonnet(平衡)还是claude-3-opus(强)。更关键的是,claude code在初始化时会主动调用GET $ANTHROPIC_BASE_URL/models接口,用你的anthropic_auth_token查询可用模型列表,并缓存到~/.claude/config.json。这意味着:如果你的 token 权限只开通了haiku,那么即使你在命令中指定--model claude-3-sonnet,也会在请求发送前被本地校验拦截,报错Error: model 'claude-3-sonnet' not available for this API key。这解释了为什么热词中频繁出现login failed. check api token or gitlab version. log in via git if the versi—— 实际上不是 GitLab 版本问题,而是 token 权限不足或已过期,导致models接口返回空列表,后续所有命令均因“未知模型”而失败。
3. 全流程实操:从零开始,每一步都附带原理注释与避坑点
3.1 环境准备:为什么git是唯一可信安装入口?
Claude Code 官方明确声明:不提供npm、pip或系统包管理器(如brew、choco)的安装方式。其 GitHub 仓库anthropic/claude-code的README.md开篇即写:“Install via git clone and make build — this ensures you get the latest security patches and full CLI feature set.” 这不是客套话,而是架构选择。claude code的核心是 Rust 编写的 CLI 二进制,但它的技能(skills)系统——比如claude code git-review、claude code pr-draft——是用 TypeScript 编写的插件,通过deno run --allow-env --allow-read --allow-run动态加载。git clone能完整获取.github/workflows/ci.yml中定义的deno运行时约束、rust-toolchain.toml指定的 Rust 版本(目前为1.78.0),以及skills/目录下所有 TS 插件源码。而npm install -g claude-code只会下载一个预编译的二进制,skills/目录为空,claude code skill list将返回No skills found。
实操步骤:
确认基础工具链:打开终端,依次执行:
# 必须存在且版本达标 git --version # 要求 ≥ 2.25(因用到 sparse-checkout) rustc --version # 要求 ≥ 1.78.0(见仓库 rust-toolchain.toml) deno --version # 要求 ≥ 1.42.0(skills 运行时) curl --version # 要求 ≥ 7.68.0(支持 HTTP/2)注意:Windows 用户若用 Git Bash,请确保
curl是 Git for Windows 自带的版本(路径通常为/mingw64/bin/curl.exe),而非 Windows 自带的旧版curl.exe(位于C:\Windows\System32\),后者不支持--http2参数,会导致连接超时。克隆仓库并进入目录:
git clone https://github.com/anthropic/claude-code.git cd claude-code此时不要急着
make build。先检查.gitmodules文件,你会发现它声明了libgit2-sys和openssl-src两个子模块。这意味着git clone只下载了主仓库,子模块内容为空。初始化并更新子模块:
git submodule update --init --recursive这一步至关重要。
libgit2-sys是 Rust 绑定libgit2C 库的 crate,它让claude code能直接解析.git目录的objects/和refs/,而不依赖外部git命令。如果跳过此步,make build会报错fatal: not a git repository (or any of the parent directories): .git,因为构建脚本需要读取子模块的Cargo.toml。构建二进制:
make buildmake build实际执行cargo build --release --bin claude-code。Rust 编译器会下载所有依赖 crate(约 120+ 个),耗时较长(首次约 8-12 分钟),但这是值得的:它生成的target/release/claude-code二进制是完全静态链接的,不依赖系统glibc或musl,可直接复制到任何同架构机器运行。安装到系统 PATH:
sudo cp target/release/claude-code /usr/local/bin/claude-code # macOS 用户若用 Homebrew,可改为: # sudo cp target/release/claude-code $(brew --prefix)/bin/claude-code验证:
claude-code --version应输出类似claude-code 1.3.0 (commit: abc1234)。
实操心得:我曾因在
make build前未运行git submodule update,导致编译失败后手动删除target/目录重试,结果cargo build缓存了错误的依赖图,连续三次失败。最终解决方案是:cargo clean && git clean -fdx && git submodule update --init --recursive && make build。记住:git clean -fdx会删除所有未跟踪文件(包括你可能手改的config.json),操作前务必备份。
3.2 首次初始化:claude code init背后的三重校验
运行claude-code init不是简单地创建一个配置文件。它执行一个原子性工作流:
Git 环境校验:检查当前目录是否为 Git 仓库(存在
.git/目录),并验证git status --porcelain是否能正常执行。如果当前目录不是 Git 仓库,它会提示Error: Not in a git repository. Please run 'git init' first.。这不是限制,而是设计:Claude Code 的所有上下文(如claude code diff、claude code blame)都基于 Git 的对象模型,没有 Git,它就失去了“项目感”。Token 有效性探测:向
$ANTHROPIC_BASE_URL/models发送一个轻量 GET 请求,仅携带x-api-key头。成功返回 JSON 列表(如["claude-3-haiku-20240307", ...])即视为 token 有效。失败则报错API Error: 401 Unauthorized或API Error: 403 Forbidden,并附带原始响应体,方便你定位是 token 错误、过期还是权限不足。配置文件安全写入:在
~/.claude/config.json创建文件,内容为:{ "anthropic_auth_token": "sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "anthropic_base_url": "https://api.anthropic.com/v1", "default_model": "claude-3-haiku-20240307", "max_tokens": 4096 }关键点:
~/.claude/目录权限被设为700(仅所有者可读写),config.json权限为600。这是硬性安全策略,防止其他用户进程读取你的 API Token。如果你在sudo claude-code init下运行,配置文件会归root所有,导致后续普通用户调用失败,报错Permission denied: ~/.claude/config.json。
正确操作流程:
# 1. 确保在你的项目根目录(含 .git) cd /path/to/your/project # 2. 设置环境变量(临时,仅本次会话有效) export ANTHROPIC_AUTH_TOKEN="sk-ant-api03-..." export ANTHROPIC_BASE_URL="https://api.anthropic.com/v1" # 3. 运行初始化(会读取上述环境变量) claude-code init # 4. 验证配置(会显示脱敏后的 token 前缀和 base_url) claude-code config show注意:
claude-code init不会询问你输入 token,它强制要求你通过环境变量或已存在的~/.claude/config.json提供。这是为了杜绝明文交互式输入导致 token 泄露到 shell history(history | grep token)。我见过同事在调试时用claude-code init --token "sk-...",结果sk-...被完整记录在~/.bash_history,成为安全隐患。
3.3 核心功能实战:从ask到refactor,一次跑通真实工作流
现在,我们用一个真实场景——修复一个 Node.js Express 应用的 CORS 错误——来串联所有核心命令。假设你的项目结构如下:
my-express-app/ ├── package.json ├── server.js ├── routes/ │ └── users.js └── .git/场景:前端调用/api/users时,浏览器控制台报错Access to fetch at 'http://localhost:3000/api/users' from origin 'http://localhost:5173' has been blocked by CORS policy.,但server.js已引入cors中间件,却仍无效。
Step 1:用claude code ask定位问题根源
claude-code ask "Why is CORS still blocked even though I have cors() middleware in server.js? Check my current git status, diff, and the content of server.js."claude-code会自动执行:
git status --porcelain→ 获取暂存区状态git diff HEAD -- server.js→ 获取server.js的未提交变更cat server.js→ 读取文件内容
然后将这些上下文 + 你的问题,构造成一个结构化 prompt 发送给 Anthropic API。它可能分析出:server.js中app.use(cors())被放在了app.use(express.json())之后,而express.json()会 consume request body,导致 preflight OPTIONS 请求被阻塞。答案会直接给出修复建议和代码补丁。
Step 2:用claude code diff查看变更建议
如果ask返回了一个具体的代码修改建议(如 “Moveapp.use(cors())to line 12, beforeapp.use(express.json())”),你可以用diff命令生成可审查的 patch:
claude-code diff "Move cors() middleware before express.json()"它会输出一个标准git diff格式的文本,例如:
diff --git a/server.js b/server.js index abc1234..def5678 100644 --- a/server.js +++ b/server.js @@ -10,6 +10,7 @@ const app = express(); app.use(express.urlencoded({ extended: true })); // Parse JSON bodies +app.use(cors()); app.use(express.json()); // RoutesStep 3:用claude code apply安全应用变更
claude-code apply "Move cors() middleware before express.json()"此命令会:
- 先执行
git stash保存当前工作区所有未提交变更(防止覆盖) - 应用上一步
diff生成的 patch - 运行
git add server.js将变更加入暂存区 - 输出
Applied successfully. Run 'git commit -m \"fix: move cors middleware\"' to commit.
提示:
apply不会自动 commit,它把最终决策权交还给你。这是安全设计:AI 可以建议,但人必须确认。我曾因跳过apply直接git commit,导致一个console.log调试语句被误提交到生产分支,apply的stash机制完美避免了此类事故。
Step 4:用claude code git-review进行提交前审查
claude-code git-review它会:
git diff --cached获取暂存区变更git log -n 3 --oneline获取最近三次提交摘要- 分析变更是否符合项目约定(如:是否添加了必要的测试?日志级别是否恰当?)
- 生成一条符合 Conventional Commits 规范的提交信息草稿,例如:
fix: move cors middleware before express.json() to resolve preflight OPTIONS failure This change ensures that the CORS preflight request is handled before express.json() attempts to parse the request body, which was causing the browser to block the actual request.
你只需复制粘贴这条信息到git commit即可。
4. 高频问题排查与独家避坑指南:那些文档里不会写的真相
4.1API Error: Claude's response exceeded the XXX output token maximum
这是热词中出现频率最高的报错(32000、64000、128000)。表面看是模型输出太长,但根本原因有三层:
| 层级 | 原因 | 诊断方法 | 解决方案 |
|---|---|---|---|
| L1:Prompt 过载 | 你传入的上下文(代码文件、diff、log)总 token 数 + 问题描述,已逼近模型输入上限(如 Haiku 为 200K tokens)。claude-code默认将整个git diff和cat *.js结果塞入 prompt。 | 运行claude-code debug --dump-prompt,它会输出实际发送给 API 的完整 prompt 文本,并在末尾标注Estimated input tokens: 198432。 | 用--context参数显式指定文件:claude-code ask --context server.js --context routes/users.js "Why CORS blocked?"。避免无限制cat。 |
| L2:Base URL 网关截断 | 你配置的ANTHROPIC_BASE_URL指向一个企业网关(如http://model.mify.ai.srv/anthropic),该网关设置了max_output_tokens: 32000的硬性策略,无论后端模型能力如何,一律截断。 | curl -v -H "x-api-key: $ANTHROPIC_AUTH_TOKEN" "$ANTHROPIC_BASE_URL/messages" -d '{"model":"claude-3-opus","max_tokens":128000,...}',观察响应头X-RateLimit-Limit和响应体中的error.message。 | 联系网关管理员,调整策略;或临时切换ANTHROPIC_BASE_URL到官方地址https://api.anthropic.com/v1。 |
| L3:CLI 本地缓冲区溢出 | claude-code的 Rust 二进制在接收 API 流式响应(SSE)时,内存缓冲区默认为 64MB。当模型返回超长文本(如 100K tokens 的代码重构),缓冲区填满,进程 panic。 | 查看claude-code进程的dmesg日志或journalctl -u claude-code(Linux),搜索signal: killed或Out of memory。 | 升级到claude-code v1.4.0+(已修复),或在~/.claude/config.json中添加"stream_buffer_size_mb": 128。 |
实操心得:我曾为一个 5000 行的
webpack.config.js生成优化建议,反复触发 32000 错误。最终方案是:先用claude-code ask "Summarize the key plugins and loaders in webpack.config.js"得到 200 字摘要,再用claude-code ask "Based on this summary: [paste], suggest 3 critical optimizations"。分步提问,token 消耗下降 70%,且答案质量更高。
4.2Auth conflict: both a token and an api key报错溯源
这个报错源于claude-code的认证优先级规则。它按以下顺序查找认证凭据:
- 环境变量
ANTHROPIC_AUTH_TOKEN - 环境变量
ANTHROPIC_API_KEY(注意:这是旧版命名,已弃用但兼容) ~/.claude/config.json中的anthropic_auth_token~/.claude/config.json中的anthropic_api_key(同样,旧版)
如果同时存在ANTHROPIC_AUTH_TOKEN和ANTHROPIC_API_KEY,或config.json中同时存在两个字段,claude-code会拒绝启动,报错Auth conflict。这不是 Bug,而是安全策略:防止因环境变量污染(如 CI/CD 系统注入了旧 token)导致意外调用。
排查步骤:
# 1. 检查所有环境变量 env | grep -i "anthropic" # 2. 检查配置文件 cat ~/.claude/config.json | jq 'keys' # 3. 清理冲突(推荐只留 auth_token) unset ANTHROPIC_API_KEY # 编辑 ~/.claude/config.json,删除 "anthropic_api_key" 字段注意:某些教程(如
ifix ge9drv7驱动压缩包内容及使用指南)错误地指导用户同时设置两个环境变量,这是过时信息。Anthropic 官方自 2024 年 3 月起,已全面废弃ANTHROPIC_API_KEY,统一为ANTHROPIC_AUTH_TOKEN。
4.3claude code ui不存在?关于桌面版的真相
热词中频繁出现claude code ui、claude code桌面版、claude code下载,这源于一个广泛误解。Claude Code 官方从未发布过图形界面(GUI)版本。所有声称提供.dmg、.exe或claude-code-ui的下载链接,均为第三方非官方构建,存在严重风险:它们可能捆绑挖矿软件、窃取 API Token,或使用过期的、有已知漏洞的依赖库。
claude code ui这个命令本身是claude-code仓库中一个已移除的实验性功能。在v1.1.0版本中,它曾尝试用 Tauri 框架启动一个本地 Web Server(http://localhost:3001),但因安全审计未通过(Tauri 的 WebView 存在沙箱逃逸风险),在v1.2.0中被彻底删除。当前任何claude-code版本执行claude-code ui都会报错Unknown command: ui。
正确替代方案:如果你需要 Web 界面体验,应使用官方Claude网页版(https://claude.ai)或 VS Code 插件(Anthropic Claude),它们与claude-codeCLI 是完全独立的产品线,共享同一套 API,但数据隔离、权限独立。切勿将 CLI 的anthropic_auth_token用于任何非官方客户端。
4.4cc switch windows 安装失败的 Windows 特定陷阱
Windows 用户在安装claude-code时,最常卡在cc switch windows(一个非官方的 Windows 安装脚本)上。根本原因在于 Windows 的路径处理与 Unix-like 系统的差异:
- PATH 注入失效:
cc switch windows脚本试图修改HKEY_CURRENT_USER\Environment\Path注册表,但 PowerShell 默认以ExecutionPolicy Restricted运行,禁止脚本修改注册表。 - Git Bash 权限问题:在 Git Bash 中运行
make build,cargo会尝试调用link.exe(来自 Visual Studio Build Tools),但 Git Bash 的PATH通常不包含C:\Program Files\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin,导致链接失败,报错link.exe not found。 - 符号链接(Symlink)不支持:
claude-code的skills/目录依赖符号链接指向node_modules/,而 Windows 默认禁用开发者模式,mklink命令不可用。
Windows 原生解决方案:
- 启用开发者模式:
设置 > 更新与安全 > 针对开发人员 > 开发者模式。 - 使用 PowerShell(管理员)安装:
# 安装 Rust winget install --id Rustlang.Rustup # 安装 Deno winget install --id denoland.deno # 安装 Git winget install --id Git.Git # 安装 Visual Studio Build Tools(必需!) winget install --id Microsoft.VisualStudio.BuildTools --override "--wait --norestart --quiet --includeRecommended --includeOptional --add Microsoft.VisualStudio.Workload.VCTools" - 在 PowerShell 中构建:
git clone https://github.com/anthropic/claude-code.git cd claude-code git submodule update --init --recursive # 此时 cargo 会自动找到 vswhere.exe 并配置好 link.exe 路径 cargo build --release --bin claude-code # 复制到系统路径 Copy-Item "target\release\claude-code.exe" "$env:USERPROFILE\AppData\Local\Microsoft\WindowsApps\claude-code.exe"
实操心得:我曾花两天时间调试
cc switch windows,最终发现其脚本中有一行Set-ItemProperty -Path 'HKCU:\Environment' -Name 'Path' -Value $newPath,在非管理员 PowerShell 下静默失败。改用winget+cargo build原生命令,30 分钟内完成,且稳定性远超任何第三方脚本。
5. 进阶能力解锁:claude code skill与私有化部署实践
5.1claude code skill:不只是插件,而是你的个人知识库接口
claude code skill是claude-code最被低估的核心能力。它允许你将任意脚本(Bash/Python/TypeScript)注册为一个子命令,让 Claude Code 调用它来增强自身能力。例如,你可以创建一个pr-draft技能,它能自动分析当前分支的git log和git diff,生成符合团队规范的 PR 描述;或创建一个security-scan技能,调用trufflehog扫描代码中泄露的密钥。
创建一个my-first-skill的完整流程:
创建技能目录:
mkdir -p ~/.claude/skills/my-first-skill cd ~/.claude/skills/my-first-skill编写技能脚本(TypeScript 示例): 创建
index.ts:// index.ts import { Command } from "https://deno.land/x/cliffy@v1.0.0-rc.4/command/mod.ts"; new Command() .name("my-first-skill") .description("A simple skill that greets the user and shows current branch") .action(async () => { // 读取 claude-code 提供的上下文环境变量 const cwd = Deno.env.get("CLAUD_CODE_CWD") || Deno.cwd(); const branch = await new Deno.Command("git", { args: ["rev-parse", "--abbrev-ref", "HEAD"], cwd }).output(); const branchName = new TextDecoder().decode(branch.stdout).trim(); console.log(`Hello from my-first-skill! You are on branch: ${branchName}`); }) .parse(Deno.args);注册技能:
claude-code skill register my-first-skill此命令会在
~/.claude/config.json的skills数组中添加:{ "name": "my-first-skill", "path": "/home/you/.claude/skills/my-first-skill/index.ts", "description": "A simple skill that greets the user and shows current branch" }使用技能:
claude-code skill my-first-skill # 输出:Hello from my-first-skill! You are on branch: main
提示:
claude-code在调用技能时,会注入一系列环境变量,如CLAUD_CODE_CWD(当前项目根目录)、CLAUD_CODE_GIT_BRANCH(当前分支名)、CLAUD_CODE_DIFF(当前暂存区 diff 内容)。这是技能能“感知项目”的秘密。我创建的pr-draft技能,就是靠读取CLAUD_CODE_DIFF,用正则提取新增的TODO:注释,自动生成 PR 的Changelog部分。
5.2 私有化部署:用ANTHROPIC_BASE_URL指向你的企业模型网关
将ANTHROPIC_BASE_URL指向私有网关,是企业级落地的关键。常见架构是:claude-code CLI→Kong API 网关→Anthropic 官方 API或自托管的 Claude 模型(如通过 vLLM)。
Kong 网关配置要点(kong.yml):
services: - name: anthropic-proxy url: https://api.anthropic.com/v1 routes: - name: anthropic-messages paths: - /v1/messages methods: - POST # 关键:重写路径,去掉 /v1 前缀,因为 upstream 是 https://api.anthropic.com/v1 strip_path: true # 添加认证头 plugins: - name: key-auth config: key_names: ["x-api-key"] anonymous: null - name: request-transformer config: add: headers: - "anthropic-version:2023-06-01" - "content-type:application/json"客户端配置:
export ANTHROPIC_BASE_URL="http://your-kong-gateway.com/v1" export ANHROPIC_AUTH_TOKEN="your-enterprise-api-key" claude-code init此时,所有claude-code请求都会先到达 Kong,Kong 验证x-api-key,添加必要头,再转发给 Anthropic。你可以在 Kong 中实现:
- 配额控制:每个
x-api-key每分钟最多 10 次/messages调用。 - 日志审计:记录