一、背景

相信不少朋友在使用 Claude Code、Cursor 等 AI 编程工具时,会发现每次对话消耗的 token 数量惊人。比如我只问了一句“你是谁”,输入 token 却显示 42k,这相当于一本短篇小说的长度!这些 token 究竟用在了哪里?工具在背后悄悄添加了哪些提示词(prompt)?

其实,这类工具为了帮助 AI 更好地理解任务,通常会在我们输入的简短问题前面,自动拼接上大量的系统指令、技能描述、工具调用说明等。这些内容虽然我们看不见,但每次请求都会发送给 AI 模型,因此消耗了大量 token。

本文将手把手教你如何通过 Charles Proxy 代理工具,拦截并查看 Claude Code 实际发送给 AI 模型的完整请求内容,让你清楚了解 token 到底消耗在哪些地方。


二、操作步骤(以 Windows 11 为例)

整个操作的核心思想是:用 Charles Proxy 作为中间人,解密 HTTPS 流量,查看 Claude Code 与 AI 服务之间的通信内容。以下是详细步骤。

1. 安装 Charles Proxy 代理工具

Charles Proxy 是一个功能强大的 HTTP/HTTPS 抓包工具,可以监控、修改甚至重发网络请求。它就像在浏览器和服务器之间安装了一个“监控摄像头”,能让我们看到所有传输的数据。

  • 访问 Charles 官方下载页面:https://www.charlesproxy.com/latest-release/download.do

  • 根据你的操作系统选择对应版本(Windows 选择 .exe 安装包)。
    请添加图片描述

    (图片说明:Charles 官网下载页面,提供了 Windows、macOS、Linux 等版本的下载链接)

下载后双击安装,一直点击“下一步”即可完成安装。


2. 配置 Charles Proxy

为了能够解密 HTTPS 流量(因为 Claude Code 发送的是加密的 HTTPS 请求),我们需要进行以下配置。

(1)配置 SSL Proxying Settings

Charles 默认不会解密 HTTPS 流量,需要手动开启 SSL 代理功能。

  • 打开 Charles,点击顶部菜单栏的 ProxySSL Proxying Settings
    请添加图片描述

  • 在弹出的窗口中,勾选 Enable SSL Proxying

  • 点击 Add 按钮,在 Host 和 Port 中分别填入 **,表示对所有域名和端口的 HTTPS 流量进行解密。(也可以根据需求只添加特定域名,例如 api.anthropic.comopenrouter.ai。)

  • 点击 OK 保存。

(2)配置 Proxy Settings

确保 Charles 的代理端口正确,通常默认是 8888。

  • 点击菜单栏 ProxyProxy Settings
    请添加图片描述

  • 在 HTTP Proxy 选项卡中,确认 Port 为 8888,并勾选 Enable transparent HTTP proxying

  • 点击 OK 保存。

(3)安装 Charles 根证书

为了让 Charles 能够解密 HTTPS 流量,我们需要在操作系统中安装 Charles 生成的根证书,并信任它。这样,Charles 就可以用自己的证书“冒充”目标服务器,解密并查看加密数据。

  • 点击菜单栏 HelpSSL ProxyingInstall Charles Root Certificate
    请添加图片描述

  • 系统会弹出证书安装向导,选择“本地计算机” → “将所有证书都放入下列存储”,然后点击“浏览”,选择“受信任的根证书颁发机构”,完成安装。
    请添加图片描述

    请添加图片描述
    请添加图片描述

安装完成后,最好重启 Charles 使配置生效。

为什么需要安装根证书?
因为 HTTPS 是加密的,正常情况下无法直接查看内容。Charles 通过成为中间人,用自己的证书与客户端(Claude Code)建立连接,同时与服务器建立另一个连接。客户端必须信任 Charles 的证书,否则会报安全警告。安装根证书就是告诉系统:“Charles 是可信的,允许它解密我的 HTTPS 流量。”

如果遇到问题,可以参考以下资料:


3. 修改 Claude Code 的配置文件

Claude Code 基于 Node.js 开发,我们可以通过设置环境变量,让它的请求经过 Charles 代理,并允许自签名证书(Charles 的根证书就是自签名的)。

配置文件位于:C:\Users\你的用户名\.claude.json
(如果没有该文件,可以新建一个,或者先运行一次 Claude Code 自动生成。)

用文本编辑器(如记事本、VS Code)打开,内容示例如下:

{
  "numStartups": 55,
  "customApiKeyResponses": {
    "approved": ["“”"],
    "rejected": []
  },
  "env": {
    "IS_SANDBOX": "1",
    "ANTHROPIC_AUTH_TOKEN": "sk-or-v1-XXXX",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
    "HTTPS_PROXY": "http://127.0.0.1:8888",
    "ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "stepfun/step-3.5-flash:free",
    "ANTHROPIC_REASONING_MODEL": "stepfun/step-3.5-flash:free",
    "ANTHROPIC_MODEL": "stepfun/step-3.5-flash:free",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "stepfun/step-3.5-flash:free",
    "ANTHROPIC_API_KEY": "",
    "NODE_TLS_REJECT_UNAUTHORIZED": 0,
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "stepfun/step-3.5-flash:free",
    "ANTHROPIC_SMALL_FAST_MODEL": "stepfun/step-3.5-flash:free"
  }
}

关键字段解释:

  • HTTPS_PROXY:设置 HTTPS 代理地址为 http://127.0.0.1:8888,这正是 Charles 的代理地址。这样 Claude Code 的所有 HTTPS 请求都会经过 Charles。
  • NODE_TLS_REJECT_UNAUTHORIZED:设为 0 表示 Node.js 不会拒绝未授权的 TLS/SSL 连接(即接受自签名证书)。因为我们用的是 Charles 的自签名证书,如果不设置此项,Node.js 会因证书不受信任而报错,导致请求失败。
  • ANTHROPIC_BASE_URL 等字段是你使用的 API 地址和模型名称,可以根据实际情况调整,这里用的是 OpenRouter 的免费模型作为示例。
  • ANTHROPIC_AUTH_TOKEN 是你的 API 密钥,需要换成你自己的。

为什么要修改这些环境变量?
为了让 Claude Code 的网络请求强制走代理(HTTPS_PROXY),并且允许 Charles 的证书(NODE_TLS_REJECT_UNAUTHORIZED=0)。否则,请求会直接发送到服务器,我们就无法拦截查看了。


4. 启动 Charles Proxy

双击桌面图标启动 Charles。启动后,它会在后台运行,并开始监听 8888 端口的代理请求。


5. 启动 Claude Code 并开始对话

打开命令行(CMD 或 PowerShell),输入 claude 启动 Claude Code 交互界面。

然后随便输入一条消息,比如“你是谁”。

在 Claude Code 处理请求的过程中,Charles 会捕获到它和 AI 服务端的所有通信。

请添加图片描述


6. 在 Charles 中查看请求内容

回到 Charles 主界面,你会看到左侧不断有新的请求出现。由于流量很多,我们需要过滤出与 AI 服务相关的请求。

仔细观察,你会发现 Claude Code 在发送一次用户消息时,可能产生了两次请求,而且两次请求的数据量明显不同。
请添加图片描述

选中其中一个请求,点击上方的 Contents 标签,就可以看到完整的请求体(JSON 格式)。请求体中包含了实际发送给 AI 模型的提示词(prompt)。

例如,你可能会看到类似这样的内容:
请添加图片描述

这些额外的提示词包括:

  • 系统指令:定义 AI 的身份、行为准则、任务目标。
  • 技能描述:工具能调用的各种功能(如读文件、执行命令、搜索等)的详细说明。
  • 历史对话摘要:之前的对话记录(如果有)。
  • 工具调用规范:告诉 AI 如何格式化输出以调用本地工具。

正是这些内容,让一条简单的“你是谁”膨胀到了 42k token。

通过对比两次请求,发现第二次请求包含了回复,第一个只有请求请添加图片描述


三、总结与思考

通过以上步骤,我们成功捕获了 Claude Code 与 AI 模型之间的通信,看到了那些隐藏的提示词。原来,工具为了增强 AI 的能力,会在后台默默添加大量系统指令和工具说明,这就是 token 消耗大户。

这种机制是合理的,因为 Claude Code 作为一个编程助手,需要让 AI 知道它可以读写文件、执行命令、理解代码库等。但了解这一点后,我们可以:

  • 更理性地评估 token 消耗,避免对高用量感到意外。
  • 如果使用自己的 API 密钥,可以尝试精简提示词(例如修改工具描述的长度)来降低成本。
  • 理解 AI 工具的工作原理,未来遇到类似问题时能举一反三。

希望本文能帮助你揭开 AI 编程助手的神秘面纱,更好地掌控你的 token 使用!


注意事项:

  • 抓包完成后,记得关闭 Charles,或者从系统代理设置中移除代理,否则可能影响正常上网。
  • 如果你不想每次抓包都修改配置文件,可以设置临时的环境变量,例如在命令行中运行:
    set HTTPS_PROXY=http://127.0.0.1:8888
    set NODE_TLS_REJECT_UNAUTHORIZED=0
    claude
    

闭 Charles,或者从系统代理设置中移除代理,否则可能影响正常上网。

  • 如果你不想每次抓包都修改配置文件,可以设置临时的环境变量,例如在命令行中运行:
    set HTTPS_PROXY=http://127.0.0.1:8888
    set NODE_TLS_REJECT_UNAUTHORIZED=0
    claude
    
  • 如果使用其他 AI 工具,原理类似,只需配置好代理并信任 Charles 证书即可。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐