如果你也心疼过 AI 消耗的 Token,这篇干货就是为你准备的

不知道你有没有这样的经历:看着 Claude Code 这类 AI 编程助手帮你写代码,效率是高了,但账单上的 Token 消耗也蹭蹭往上涨,心都在滴血。

尤其是当你预加载了一堆工具,想让智能体全知全能时,它反而被各种工具描述、参数定义塞满了脑子,反应变慢,成本飙升,体验抓狂。

今天,我分享一个颠覆性的技巧,能让你 Claude Code 设置中的 Token 使用量减少大约 90%。这个方法灵感来自 Anthropic 的使用 MCP 进行代码执行框架,但思路更野。

核心就是:把繁重的工具执行任务,从 LLM 的上下文里“踢出去”,扔给一个轻量级的、通过 bash 运行的 Python 脚本来处理。

告别臃肿,拥抱高效。下面,我就带你看看这是怎么做到的。

一、Token 都去哪儿了?你的 AI 可能“喘不过气”

像 Claude Code 这样的 AI 智能体很强,但它的“脑容量”(上下文窗口)是有限的,而且很贵。

这里要先提一个概念:MCP。这是 Anthropic 提出的,让智能体调用外部工具的方法。

传统的做法是啥?就像搬家,把整个工具箱(比如数据分析库、统计函数、甚至自定义 API 的说明书)一次性全塞进提示词里,让 AI 一开始就“啥都懂”。

这听起来很爽,但问题很大:

  • 上下文爆炸:光一个工具集的描述和参数,可能就占掉几千个 Token。

  • 效率低下:AI 的注意力被大量当前用不到的工具信息分散了,真正用来思考你代码逻辑的“脑力”就少了。

  • 成本杀手:在长时间或复杂的工作流中,Token 的消耗速度会快得惊人。

而我们的新思路是:按需加载,用完即走

让 AI 只负责生成代码指令,具体的执行和计算,交给外部进程。这样,Claude 的上下文始终保持干净、专注。

二、核心秘诀:让 Bash 和 Python 当“跑腿小弟”

这个方法的核心,是建立一条动态流水线:

  1. Claude 专注思考:LLM 不再直接调用复杂的工具,而是为当前任务生成一段完整的 Python 代码(比如一个数据分析脚本)。

  2. Bash 负责传令:一个简单的 shell 脚本被触发,它唯一的工作就是启动上一步生成的 Python 代码。

  3. Python 埋头苦干:代码在独立的 Python 运行时里执行。在这里,才按需加载真正的工具库(如scipy,pandas),处理数据、运行计算,所有脏活累活都在这里完成。

  4. 精简结果返回:Python 脚本将最终结果压缩成一个简洁的 JSON 数据块(例如{"模型A均值": 89.68}),通过 bash 返回给 Claude。

看明白了吗?所有让上下文臃肿的东西(工具描述、库文档),都留在了外部的 Python 环境里。Claude 自始至终只接触干净的代码和精简的结果,Token 自然就省下来了。

三、30分钟动手实战

理论说完,我们来点实际的。下面带你为一个数据分析任务搭建这个高效流水线。

第一步:准备虚拟环境

首先,我们安装一个快速的 Python 包管理工具uv,并创建项目环境。

# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 创建项目目录并进入
mkdir claude-mcp-hack && cd claude-mcp-hack

# 创建并激活虚拟环境
uv venv
source .venv/bin/activate
第二步:打造核心 Bash 脚本

创建一个名为execute_tool.sh的文件,这就是我们的轻量级调度中心。

#!/bin/bash
# execute_tool.sh: 按需运行 Python 脚本,并返回 JSON 格式摘要

SCRIPT_PATH=$1
if [ -z "$SCRIPT_PATH" ]; then
echo'{"error": "未提供脚本文件"}'
exit 1
fi

# 使用 uv 快速运行 Python 脚本,输出重定向到文件
uv run python "$SCRIPT_PATH" > output.json 2>&1

# 将输出压缩成 JSON 块(模拟 MCP 的结果过滤)
python -c "
import json
with open('output.json') as f:
data = json.load(f)
summary = {'result': data.get('summary', '无摘要'), 'tokens_saved': '预计节省90%'}
print(json.dumps(summary))
" > stdout.json

cat stdout.json
# 清理临时文件
rm output.json stdout.json

记得给脚本执行权限:chmod +x execute_tool.sh

这个脚本的作用:接收一个 Python 文件路径,运行它,并把程序的输出整理成干净的 JSON 返回。

第三步:给 Claude 下发工作指引

在你的 Claude API 调用(或 VS Code 插件)中,使用下面这个系统提示词,明确它的行为模式:

你是 Claude Code,一个专注于编码的智能体。遇到需要工具的任务(如数据分析)时,请按以下流程操作:

工作流程:
1. 分析用户的任务需求。
2. 输出一个完整的、可独立运行的 .py 文件代码块。
3. 在回复中指示用户通过 `./execute_tool.sh` 来运行这个脚本。

示例:
用户说:“任务:对 model_a_scores.csv 和 model_b_scores.csv 进行 t 检验,总结均值和 p 值。”
你应该输出一个名为 `experiment.py` 的代码文件。

当 Claude 收到任务后,它生成的回复将不再是调用某个工具,而是一段像下面这样的完整 Python 代码:

# experiment.py: 用于 MCP 风格执行的脚本
import json
import pandas as pd
from scipy import stats
import numpy as np

# 按需加载数据
a = pd.read_csv('model_a_scores.csv')['scores'].values
b = pd.read_csv('model_b_scores.csv')['scores'].values

# 执行计算
mean_a, std_a = np.mean(a), np.std(a)
mean_b, std_b = np.mean(b), np.std(b)
t_stat, p_val = stats.ttest_ind(a, b)

# 生成紧凑的 JSON 结果
summary = {
'model_a': {'mean': float(mean_a), 'std': float(std_a)},
'model_b': {'mean': float(mean_b), 'std': float(std_b)},
't_test': {'t_stat': float(t_stat), 'p_value': float(p_val)}
}
print(json.dumps(summary))
第四步:组装并运行

现在,将一切串联起来:

  1. Claude 生成experiment.py代码。

  2. 自动化流程保存这段代码为.py文件。

  3. 在终端执行:./execute_tool.sh experiment.py

  4. 脚本会运行并打印出 JSON 结果,例如:

    {"model_a": {"mean": 90.5, "std": 2.1}, ...}
  5. 关键一步:将这个 JSON 结果,作为{"tool_result": <上面的JSON>}的格式,添加到下一轮与 Claude 对话的上下文里。

  6. Claude 接收到精简的结果,基于此进行下一步推理或生成新的代码。

你可以创建两个包含虚拟分数的 CSV 文件(比如模型 A 分数在 85-95,模型 B 在 88-98)来测试一下。亲眼看看 Token 消耗是怎么降下来的。

对于重复性任务,可以在共享目录里缓存 Python 脚本的运行结果,进一步优化效率。

四、效果如何?省下的都是真金白银

在我自己的测试中,一个包含 8 个步骤的统计流程(描述性统计、t 检验等),Token 使用量从原来预加载 MCP 工具时的大约 10K,降到了不足 1K,节省了90%

在一个更复杂的 20 步机器学习评估循环中,也节省了大约85%的成本。

除了省钱,还有更多好处:

  • 速度更快:Bash 调用 Python 是亚秒级执行,远比 LLM 去“理解”和“调用”工具再等待返回要快。

  • AI 更专注:Claude 的“脑子”只用来思考代码逻辑,不再被工具细节干扰。

  • 扩展性极强:即使处理海量数据集,也不用担心上下文窗口被撑爆。

五、还能怎么玩?进阶思路

这个基础框架可以玩出很多花样:

  • 动态脚本生成:让 Claude 根据每次任务的不同,动态生成最适合的 Python 代码。给你的提示词可以更具体:“为 [某具体任务] 生成一段可直接执行、针对 MCP 运行时优化的代码。”

  • 跨智能体协作:你甚至可以在另一个 AI 智能体(比如 Gemini CLI)中运行这个 bash 执行器。让主智能体 Claude 负责规划和分发任务,子智能体负责执行,保持每个智能体的上下文都足够精简。

  • 持续优化:引入缓存机制、为不同的任务复杂度设置不同的执行策略(简单任务走 bash,复杂任务再考虑用回部分 MCP)。

  • 使用Skill:仅在相关任务触发时加载详细指令,极大地节省了Token并允许配置大量技能。

最好的学习就是动手,我建议你先替换工作流中的一个简单工具开始尝试。

先测量一下原来的 Token 消耗,再用新方法跑一遍,对比一下数据。Claude 的 API 返回信息里通常会有 Token 使用量,这是最直接的证明。

这个技巧的核心思想是“卸载”——把计算密集型、描述密集型的任务从昂贵的 LLM 上下文中卸载到廉价的外部运行时。

它可能不是所有场景的银弹,但对于大量依赖工具调用的编码、数据分析工作流来说,无疑是一剂省钱的良药。