Claude Code 对非官方 API 的功能限制分析 & Tool Search 的更好启用方法

前言

使用代理/中转访问 Claude Code 的用户可能会注意到一些功能受限,其中最明显的就是 Tool Search 无法启用。之前有大佬分享了通过 sed 修改源码替换域名的方案,非常实用。

在此基础上,通过逆向分析 cli.js 源码(v2.1.81),发现了一个更简单的方法,同时也对 Claude Code 所有涉及非官方 API 的限制做了一次完整总结,分享给大家。

一、启用 Tool Search 的简便方法

Claude Code 官方其实已经预留了环境变量来支持代理用户启用 Tool Search,源码中甚至有这样一行日志提示:

Set ENABLE_TOOL_SEARCH=true (or auto / auto:N) if your proxy forwards tool_reference blocks.
所以只需要一行配置:

export ENABLE_TOOL_SEARCH=true

原理

Tool Search 的启用逻辑(简化):

function isToolSearchEnabled() {
  // 设了 ENABLE_TOOL_SEARCH → 直接跳过域名检查
  if (process.env.ENABLE_TOOL_SEARCH) return true;

  // 没设 → 检查域名是否为 api.anthropic.com
  if (isFirstParty() && !isDomainMatch()) return false;

  return true;
}

相比 sed 方案

相比 sed 修改源码的方式,环境变量方案支持 native 安装,不需要切换到已被官方标记为 Deprecated 的 npm 安装方式,升级后也无需重新执行。当然,不排除 Anthropic 在未来版本中移除这个环境变量的可能性,届时可能需要重新寻找替代方案。

各平台持久化配置

Bash 用户(大多数 Linux 默认):

echo 'export ENABLE_TOOL_SEARCH=true' >> ~/.bashrc && source ~/.bashrc

Zsh 用户(macOS 默认,部分 Linux):

echo 'export ENABLE_TOOL_SEARCH=true' >> ~/.zshrc && source ~/.zshrc

Fish 用户

set -Ux ENABLE_TOOL_SEARCH true

Windows PowerShell

[System.Environment]::SetEnvironmentVariable('ENABLE_TOOL_SEARCH', 'true', 'User')

不确定自己用的什么 shell?运行
echo $SHELL
查看。
ENABLE_TOOL_SEARCH 还支持 autoauto:N(N 为 0-100 阈值百分比)两种模式,一般设 true 即可。

配置完成后,可以直接问 Claude Code "你能用 Tool Search 吗"来确认是否生效:

image

二、非官方 API 功能限制完整审计

通过对 cli.js 源码中所有域名检查(OV() 函数)和 Provider 检查(QA() 函数)的逐一分析,以下是完整的限制清单。

域名检查函数 OV()

Claude Code 内部有一个函数检查 ANTHROPIC_BASE_URL 是否为 api.anthropic.com,共被 6 处调用:

功能
说明
对代理用户的影响

1
Tool Search
减少上下文中工具定义占用的 token
:warning: 有影响 — 已有环境变量绕过

2
eager_input_streaming
工具输入流式传输优化
:down_arrow: 极低 — 受 feature flag 双重限制,默认未开放

3-5
Team Memory(3个函数)
企业团队记忆同步/读写
:down_arrow: 无 — 需 enterprise/team 订阅

6
Tool Search(同#1)
另一处调用点
同上

firstParty 检查(与域名无关)

Claude Code 通过环境变量(如 CLAUDE_CODE_USE_BEDROCK)判断 Provider 类型。使用代理的用户默认就是 firstParty,因此以下功能不受影响:

  • 实验性 Beta headers — 正常
  • Cache editing beta — 正常
  • 模型选择 UI — 正常
  • Fast / Auto mode — 正常

KV Cache(Prompt Caching)

不受域名限制。 enablePromptCaching 只检查 DISABLE_PROMPT_CACHING 相关环境变量,与 API 地址无关。缓存是否命中取决于你的代理是否正确转发了 cache_control 参数。

三、总结

功能
代理受限?
解决方案

Tool Search
:white_check_mark:
export ENABLE_TOOL_SEARCH=true

Prompt Caching / KV Cache
:cross_mark:

实验性 Betas
:cross_mark:

eager_input_streaming
理论上受限
但 feature flag 默认关闭,官方用户也没开,无需处理

Team Memory
理论上受限
需企业订阅,个人用户不涉及

对于绝大多数代理用户,一个环境变量就够了。 不需要改代码,不需要 npm 安装,不需要每次升级后重新执行脚本。

原来这么简单的吗,回去试试

好帖

感谢分享!

ENABLE_TOOL_SEARCH=true 这个有个前提是不能禁用 Beta headers

感谢大佬,刚好我是bun安装的

感谢大佬

!!!!!!!!!!!!!!!

大佬,你怎么知道我一大早就在找你的帖子,我找了好久!!!昨天就看到你的帖子了!!今天想再看看的

你能用 Tool Search 吗
先插个眼

不知道A/下限在哪里

已经不需要补丁了吧,直接设置环境变量就行

很有用啊 大佬

请问大佬安装的 cc 版本是多少?

是的,整个环境变量就行

(¦3[▓▓] 才睡醒?
谁写环境变量里碰到不支持的模型就知道痛了

我的问题,aigc内容没截图,被举报下架了

感谢大佬分享

我out了

toolsearch是什么

感谢大佬

老友知道在opencode中如何处理吗?我接入claude opus到里面,看到带有工具调用的非流请求失败,流式正常,非流显示:为应对 ClaudeCode 风控行为,请手动开启 ToolSearch 功能