Appearance
Claude Code 相关问题
Claude Code CLI 接入 AnyDoAPI 时的高频问题、排错与省钱技巧。
本页目录
| 章节 | 你可能在找 |
|---|---|
| 配置与登录 | VS Code 插件、无法连接 Anthropic、401 |
| 费用与 Prompt Cache 优化 | 归因 Header、额度暴涨、模型分工 |
| 常用命令 | CLI / 会话内命令速查 |
| 上下文与使用建议 | 长对话变差、压缩策略 |
配置与登录
如何在 VS Code Claude Code 插件中使用 AnyDoAPI?
Claude Code 2.0 起,VS Code 插件可能强制 OAuth 登录。中转站用户需额外写入 config.json 绕过。
前提:本机 claude CLI 已能正常对话。
bash
# Win + R 打开配置目录
%userprofile%\.claudebash
~/.claude若目录中没有 config.json,请手动创建并写入:
json
{
"primaryApiKey": "AnyDoAPI"
}说明
primaryApiKey 可为任意字符串,只用于跳过强制登录检查。真正的令牌仍在 settings.json 的 env 中配置。
保存后重启 VS Code 即可。
Claude Code 无法连接到 Anthropic 服务?
首次安装后启动 claude 若出现类似报错:
text
Unable to connect to Anthropic services
Failed to connect to api.anthropic.com: ERR BAD REQUEST
Please check your internet connection and network settings.或要求登录 Anthropic 账号,通常是因为尚未跳过官方 onboarding。按系统执行:
powershell
powershell -Command "$f='%USERPROFILE%\.claude.json';$j=Get-Content $f|ConvertFrom-Json;$j|Add-Member -NotePropertyName 'hasCompletedOnboarding' -NotePropertyValue $true -Force;$j|ConvertTo-Json|Set-Content $f"bash
jq '. + {"hasCompletedOnboarding": true}' ~/.claude.json > /tmp/tmp.json && mv /tmp/tmp.json ~/.claude.json提示
macOS 若提示找不到 jq,可先执行 brew install jq。 也可用 CC Switch 开启「跳过 Claude Code 初次安装确认」。
完成后重启 Claude Code CLI。
推荐的 settings.json 基线配置
在 ~/.claude/settings.json(Windows:%userprofile%\.claude\settings.json)写入:
json
{
"env": {
"ANTHROPIC_BASE_URL": "https://anydoapi.com",
"ANTHROPIC_AUTH_TOKEN": "xxx",
"CLAUDE_CODE_DISABLE_1M_CONTEXT": "1",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"CLAUDE_CODE_DISABLE_TERMINAL_TITLE": "1",
"CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
"DISABLE_TELEMETRY": "1",
"DISABLE_ERROR_REPORTING": "1"
}
}无科学上网时,可将 ANTHROPIC_BASE_URL 换成 https://api-edge.anydoapi.com。
注意
ANTHROPIC_BASE_URL 不要加 /v1。令牌请替换 xxx,分组使用 cc-max / cc-max-open。
CLAUDE_CODE_ATTRIBUTION_HEADER=0 是中转站用户最重要的省钱配置,详见下方 费用与 Prompt Cache 优化。
ANTHROPIC_API_KEY 和 ANTHROPIC_AUTH_TOKEN 用哪个?
走 AnyDoAPI 中转时,优先使用 ANTHROPIC_AUTH_TOKEN。不要同时设置两个,以免鉴权行为混乱。
报 401 Invalid bearer token?
- 确认
settings.json里的令牌未过期、复制完整 - 确认分组为 Claude 专用分组
- 若刚用 CC Switch 切换过供应商,重启终端 / VS Code 后再试
- 检查本机是否另有旧的
ANTHROPIC_API_KEY/ANTHROPIC_AUTH_TOKEN环境变量覆盖了配置
费用与 Prompt Cache 优化
单条最重要的配置
接入 AnyDoAPI 时,请务必设置:
bash
CLAUDE_CODE_ATTRIBUTION_HEADER=0社区实测:开启前后单次费用可降约 90%,首包延迟从约 17 秒回到约 2 秒。不设这项,后面的省钱技巧效果都会大打折扣。
为什么必须设置 CLAUDE_CODE_ATTRIBUTION_HEADER=0?
Claude Code 2.1.36 起,会在每次请求的 system prompt 开头注入动态归因标识(x-anthropic-billing-header,内含随机 cch 字段)。
Anthropic 官方能识别并处理它;但第三方中转会把这段文字当成 prompt 前缀的一部分。前缀每次都变,会导致:
- Prompt Cache 无法命中,每次都要完整处理 system prompt
- 费用最高可暴涨数倍到约 10 倍
- 首包延迟明显变长(例如从约 2 秒变成约 17 秒)
关闭方式(写入 settings.json 的 env):
json
{
"env": {
"CLAUDE_CODE_ATTRIBUTION_HEADER": "0"
}
}也可用环境变量:
bash
export CLAUDE_CODE_ATTRIBUTION_HEADER=0为什么额度消耗这么快?只用了 20 分钟就跑完?
额度不按时间线性扣除,主要取决于:
| 因素 | 影响 |
|---|---|
| 模型档位 | Opus ≫ Sonnet ≫ Haiku |
| 上下文长度 | 长对话每轮都会带上历史,费用叠加 |
| Prompt Cache 是否命中 | 未命中时,大段 system / 项目上下文按全价计 |
| 非必要流量 | 遥测、标题更新等多余请求也会耗额度 |
| 任务粒度 | 大而笼统的任务更容易反复读文件、反复试错 |
优先检查清单:
- 是否已设
CLAUDE_CODE_ATTRIBUTION_HEADER=0 - 是否已设
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 - 是否长时间挂着超大上下文会话不
/compact/ 不开新会话 - 是否全程用最高档模型处理简单问题
Prompt Cache 实际怎么用?为什么感觉没省钱?
缓存命中的 token 通常只收正常输入价的约 10%(具体以控制台 / 模型广场计价为准)。
常见「感觉没省钱」原因:
- 没关归因 Header — 前缀每次变化,Cache 永远打不中(见上一题)
- 频繁改 system / CLAUDE.md 前缀 — 前缀一变,旧缓存失效
- 开新会话过勤 — 冷启动要重新写缓存;过频切换会话会削弱收益
- subagent 缓存 TTL 较短 — 长任务里子代理容易丢缓存,需合理拆分
- 上下文无意义膨胀 — 把无关大文件、日志反复塞进对话
建议验证方式:在 Claude Code 内用 /cost、/usage 观察用量;理想情况下连续对话中,缓存读取应明显高于全价输入。
Sonnet / Opus / Haiku 怎么分工最省钱?
| 模型 | 适合场景 | 省钱建议 |
|---|---|---|
| Haiku | 摘要、简单改写、格式整理、快速问答 | 日常杂活优先 |
| Sonnet | 大多数编码、重构、排错(默认主力) | 主力模型 |
| Opus | 复杂架构决策、疑难 bug、多模块联动 | 按需升级,用完切回 |
实操建议:
- 默认用 Sonnet;卡住再临时
/model切 Opus - 简单任务不要用 Opus「杀鸡」
- 可在
settings.json中为不同角色配置默认小模型,避免全程高档位
CLAUDE.md 写多长合适?写了规则也不遵守?
建议:
- 先短后长:先写 20–50 行真正会反复用到的硬约束(语言、目录结构、禁止事项)
- 可执行、可验证:写成「必须 / 禁止 + 例子」,少写空泛口号
- 分层放置:全局规则放用户级;项目特有规则放仓库根目录
CLAUDE.md;子目录只写该模块差异 - 避免前后矛盾:互相冲突的规则会让模型表现不稳定
- 定期修剪:过时规则会占用上下文并干扰 Cache 前缀稳定性
若规则「不生效」,优先检查:是否在错误目录、是否被更长历史对话淹没、是否与权限 / Hooks 冲突。
常用命令
| 命令 | 功能说明 |
|---|---|
claude | 在当前目录启动交互式 REPL |
claude "解释这个项目" | 启动 REPL 并带上初始问题 |
claude -p "解释这个函数" | 一次性问答(print 模式),适合脚本 / CI |
cat logs.txt | claude -p "总结错误" | 管道喂入文件或命令输出做总结 |
claude -c | 继续当前目录最近一次会话 |
claude -c -p "检查类型错误" | 在最近会话上下文中执行一次性请求 |
claude -r "abc123" "把这个 PR 完成" | 通过会话 ID 恢复指定会话 |
claude update | 将 CLI 更新到最新版本 |
claude mcp | 管理 MCP 服务器 |
claude --add-dir ../apps ../lib | 额外添加可访问的代码目录 |
claude --model sonnet | 指定会话使用的模型 |
claude --verbose | 打开详细日志,便于调试 |
claude --append-system-prompt "始终使用 TypeScript" | 追加自定义系统提示 |
claude -p "生成接口文档" --output-format json | JSON 格式输出,便于脚本解析 |
claude --dangerously-skip-permissions | 跳过权限确认(高风险,仅信任环境使用) |
会话内常用:/compact · /clear · /context · /model · /cost · /usage
上下文与使用建议
长对话后回答变差?
上下文过长时模型更容易前后矛盾。建议:
- 把大任务拆成小步骤
- 关键节点开新会话,只携带必要上下文
- 需要压缩时用
/compact,压缩后核对关键约束是否仍在
还有哪些能顺便省钱的配置?
json
{
"env": {
"CLAUDE_CODE_DISABLE_1M_CONTEXT": "1",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"CLAUDE_CODE_DISABLE_TERMINAL_TITLE": "1",
"DISABLE_TELEMETRY": "1",
"DISABLE_ERROR_REPORTING": "1"
}
}| 变量 | 作用 |
|---|---|
CLAUDE_CODE_DISABLE_1M_CONTEXT=1 | 切回更可控的 200K 上下文,降低无意中的超长上下文消耗 |
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 | 关闭非必要后台请求 |
CLAUDE_CODE_DISABLE_TERMINAL_TITLE=1 | 减少终端标题相关额外开销 |
DISABLE_TELEMETRY=1 | 关闭遥测 |
DISABLE_ERROR_REPORTING=1 | 关闭错误上报 |