Zilliz 09月25日
Claude Code吐槽与Claude Context解决方案
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

近期,开发者们对Claude Code的吐槽主要集中在账号封禁和Token消耗过快问题上。为了解决Token消耗问题,开源项目Claude Context通过MCP模式,实现代码上下文检索,可减少约40%的Token消耗。本文通过实验对比了Claude Context与纯grep方法的效率、成本和精度,结果表明Claude Context在各方面均表现更优。

🔧 Claude Context通过MCP模式,实现代码上下文检索,可减少约40%的Token消耗,有效解决Claude Code Token消耗过快的问题。

📊 实验对比表明,Claude Context在效率、成本和精度上均优于纯grep方法。Token消耗大幅降低,工具调用更高效,检索精度更优。

🧐 通过分析纯grep方法的案例,揭示了其信息过载、语义盲目和上下文失忆三大缺陷,而Claude Context通过智能过滤、概念理解和上下文召回能力,有效克服了这些问题。

🌐 Claude Context不仅适用于Claude Code,同样适用于Codex、Gemini CLI、Cline等AI coding产品,具有广泛的适用性。

原创 张晨 2025-09-11 18:43 上海

一半人在吐槽Claude Code,另一半打算改完手里的bug再吐槽

最近,无论国内海外开发者,一半都在吐槽Claude Code,另一半则打算改完手里的bug再吐槽Claude Code。

国内用户的不满集中在无端账号封禁上,而海外用户则对Code 功能的 Token 消耗过快怨声载道。

更关键的是,从技术层面来看,降低 Token 消耗对 Claude 并非难事,但它却选择单一的 grep 方案做代码检索,由此产生了大量不必要的 Token 浪费

为此,我们前段时间开源了Claude Context—— 通过 MCP模式,让 Claude Code 等 AI IDE 具备一键搞定代码上下文检索的能力,可直接减少约 40% 的 Token 消耗。

https://github.com/zilliztech/claude-context

但这个方案,也在各大技术论坛引发了激烈讨论。

有人认为grep足够用,引入向量数据库和embedding,会导致过度工程化!

也有人认为,grep 只能字面匹配,根本理解不了代码语义,Claude Context 能大幅提升检索精度和效率。

双方观点看似各有道理,不如用实测数据一较高下

01 

实验设计思路

对比双方:

评估指标:

实验条件(控制变量)

为排除无关变量干扰,两种方法使用完全一致的实验环境:

相同 LLM:GPT-4o-mini

相同数据集:Princeton NLP 的 SWE-bench Verified 数据集(含 500 个经专业审查的高质量样本,专为评估 AI 解决真实软件工程问题设计)

相同框架:ReAct Agent 框架

相同任务:30 个难度适中(15-60 分钟)、标准化(每个任务需修改 2 个文件)的任务实例

每种方法均运行 3 轮独立实验,取平均值后进行对比,总计完成 6 次完整测试。

02 

实验结果

实验结果直接验证了我们的初始设想 ——Claude Context 的增强方法在效率、成本、精度上全面优于纯 grep 的 Baseline 方法。核心结论有三

    Token 消耗大幅降低:相比 Baseline,增强方法 Token 消耗减少近 40%,单个任务平均节省 28,924 个 Token;重度 AI 编程用户每月可节省几十到几百美元 API 费用;

    工具调用更高效、响应更快:工具调用次数减少超过 1/3,避免了无效操作的资源浪费;原本 5 分钟的代码定位任务,现在 3 分钟即可完成;

    检索精度更优:精准定位核心代码上下文,让后续的AI生成更精准

03 

案例解读,纯 grep 的缺陷是什么?

这里选择了两个案例,分析他们的日志,来说明为什么纯 grep 方法效率低下。

案例一:Django YearLookup Bug

Issue 地址为 https://github.com/django/django/pull/14170

问题描述:Django 框架中,YearLookup 查询优化破坏了 __iso_year 过滤功能。当使用 __iso_year 过滤器时,YearLookup 类错误地应用了标准的 BETWEEN 优化,这对日历年有效,但对 ISO 周编号年无效。

# 这应该使用 EXTRACT('isoyear' FROM ...) 但错误地使用了 BETWEENDTModel.objects.filter(start_date__iso_year=2020)

# 生成: WHERE "start_date" BETWEEN 2020-01-01 AND 2020-12-31

# 应该是: WHERE EXTRACT('isoyear' FROM "start_date") = 2020

Baseline grep 方法的过程日志分析:

    🔧 directory_tree()

    ⚙️ 结果: 检索了 3000+ 行目录结构 (~50k tokens)

       问题: 大量信息过载,没有直接相关性

    🔧 search_text('ExtractIsoYear')

    ⚙️ 结果: 在多个文件中找到 21 个匹配项:

       - django/db/models/functions/__init__.py:5 (导入语句)

       - django/db/models/functions/__init__.py:31 (导出列表)  

       - django/db/models/functions/datetime.py:93 (ExtractIsoYear 类)

       问题: 大多数都是无关的导入和注册

    🔧 edit_file('django/db/models/functions/datetime.py')

    ⚙️ 修改了多个注册语句,但这是错误的解决方向


    关键问题: 文本搜索专注于错误的组件(ExtractIsoYear 注册),而不是实际的优化逻辑(YearLookup 类)。

    Claude Context 方法的过程日志分析:

      🔧 search_code('YearLookup')

      ⚙️ 为查询找到 10 个结果: "YearLookup" 在代码库中

         1. 代码片段 (python) [repo__django__django]

            位置: django/db/models/lookups.py:568-577

            上下文: YearExact 类与 get_bound_params 方法

         2. 代码片段 (python) [repo__django__django]  

            位置: django/db/models/lookups.py:538-569

            上下文: YearLookup 基类与 year_lookup_bounds 方法

      🔧 edit_file(django/db/models/lookups.py)

      ⚙️ 成功修改了核心优化逻辑,添加 ISO 年处理


      关键成功:语义搜索立即理解了"YearLookup"作为核心概念,找到了需要修改的确切类。

      效率对比:

      案例二:Xarray swap_dims Bug

      Issue 地址为 https://github.com/pydata/xarray/pull/6938

      问题描述:Xarray 库的 .swap_dims() 方法意外修改了原始对象,违反了不可变性期望。在某些情况下,.swap_dims() 修改原始对象而不是返回新对象。

      import numpy as np

      import xarray as xr

      nz = 11

      ds = xr.Dataset({ 

      "y": ("z", np.random.rand(nz)), 

      "lev": ("z", np.arange(nz) * 10),

      })

      # 这不应该修改 ds,但实际上修改了

      ds2=ds.swap_dims(z="lev").rename_dims(lev="z").reset_index("lev").reset_coords()

      ds2.swap_dims(z='lev')  # 这意外地修改了 ds2['lev']# ds2['lev'] 现在有维度 'lev' 而不是 'z'

      Baseline grep 方法的过程日志分析:

        🔧 list_directory('repo__pydata__xarray')

        ⚙️ 结果: 检索了多个子目录的目录结构

           问题: 基本的目录导航,没有目标搜索

        🔧 search_text('swap_dims')

        ⚙️ 结果: 在核心文件中找到 21 个匹配项:

           - xarray/core/common.py:600 (Dataset.swap_dims 引用)

           - xarray/core/dataarray.py:753 (".rename() or .swap_dims() instead.")

           - xarray/core/dataarray.py:2026 (DataArray.swap_dims 引用)

           - xarray/core/dataarray.py:2044 (def swap_dims 方法)

           问题: 在不同上下文中有许多匹配项

        🔧 read_file('xarray/core/dataarray.py', offset=2000, limit=40)

        ⚙️ 结果: 读取了显示 rename 方法文档的第 2001-2040 行

        🔧 read_file('xarray/core/dataset.py', offset=3600, limit=40) 

        ⚙️ 结果: 读取了显示 rename_dims 方法的第 3601-3640 行


        关键低效:使用了大量的 list_directory 和 read_file 操作,而不是专注于相关方法。

        Claude Context 方法的过程日志分析:

          🔧 search_code('.swap_dims()')

          ⚙️ 为查询找到 10 个结果: ".swap_dims()" 在代码库中

             1. 代码片段 (python) [repo__pydata__xarray]

                位置: xarray/tests/test_formatting_html.py:67-76

             2. 代码片段 (python) [repo__pydata__xarray]

                位置: xarray/tests/test_dataset.py:2926-2979

          🔧 edit_file('xarray/core/dataset.py')

          ⚙️ 成功修改文件,添加了维度处理逻辑

          🔧 edit_file('xarray/core/dataarray.py')

          ⚙️ 成功修改文件,确保不修改原始 DataArray


          关键成功:语义搜索立即定位了实际的 swap_dims() 实现并理解了功能上下文。

          效率对比:

          04

          两种方法的工作流程对比

          我们可以用流程图来直观对比两种方法的差异:

          Baseline grep 方法的工作流程

          Claude Context 语义搜索工作流程

          不难发现,纯grep 的局限性源于其 “字面匹配” 的本质,这带来了三大致命缺陷

            信息过载:现代代码库动辄数万文件,grep 搜索结果中 99% 为无关噪音,AI 易被洪流淹没;

            语义盲目:仅匹配字符组合,无法理解代码功能 —— 例如找不到compute_final_cost()calculate_total_price()的语义关联;

            上下文失忆:仅返回匹配行,缺失函数所属类、依赖关系等关键上下文,AI 难以判断代码作用。

          也是针对这三大局限,Claude Context 针对三大核心能力做了突破

            智能过滤:通过向量相似度排序,将最相关的代码片段置顶,排除无关干扰;

            概念理解:基于 embedding 技术理解代码语义,即使函数名不同,只要功能相似就能精准匹配;

            上下文召回:每个搜索结果均包含完整的代码上下文(类、函数、依赖),让 AI 像人类程序员一样理解代码逻辑。

          尾声

          Claude Context不仅适用于Claude Code,同样适用于 Codex、 Gemini CLI、Cline在内几乎所有AI coding产品,欢迎大家多多体验与反馈。

          项目地址:

          https://github.com/zilliztech/claude-context

          实验详情

          完整的实验数据、代码和复现方法都在项目的 evaluation/ 目录中开放。

          作者介绍

          张晨

          Zilliz Algorithm Engineer

          推荐阅读

          国内首个 LangGraph Agent 模板!Multi-Agent框架最优解

          Embedding无敌?是做文档处理RAG最大的幻觉

          Hugging Face轻量化框架Candle实战|基于Rust,比PyTorch配置简单

          Word2Vec、 BERT、BGE-M3、LLM2Vec,embedding模型选型指南|最全

          阅读原文

          跳转微信打开

          Fish AI Reader

          Fish AI Reader

          AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

          FishAI

          FishAI

          鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

          联系邮箱 441953276@qq.com

          相关标签

          Claude Code Claude Context AI coding Token consumption MCP mode
          相关文章