<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Coding Agent on 拾光集</title>
        <link>https://www.tood.win/tags/coding-agent/</link>
        <description>Recent content in Coding Agent on 拾光集</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Thu, 30 Jul 2026 23:08:52 +0800</lastBuildDate><atom:link href="https://www.tood.win/tags/coding-agent/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>AI 编程如何减少 Token 消耗：覆盖 Agent 工作流的 7 个开源工具</title>
            <link>https://www.tood.win/posts/ai-bian-cheng-jian-shao-token-xiao-hao-fu-gai/</link>
            <pubDate>Thu, 30 Jul 2026 23:03:00 +0800</pubDate>
            <guid>https://www.tood.win/posts/ai-bian-cheng-jian-shao-token-xiao-hao-fu-gai/</guid>
            <description>&lt;p&gt;使用 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/claude/&#34; &gt;Claude&lt;/a&gt; Code、&lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/codex/&#34; &gt;Codex&lt;/a&gt;、&lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/cursor/&#34; &gt;Cursor&lt;/a&gt; 等 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/ai/&#34; &gt;AI&lt;/a&gt; 编程 Agent 时，&lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/token/&#34; &gt;Token&lt;/a&gt; 消耗并不只取决于模型价格。&lt;/p&gt;&#xA;&lt;p&gt;很多成本实际上来自重复扫描代码库、读取完整文件、加载无关上下文、分析冗长日志，以及生成没有实际价值的解释。要降低 AI 编程成本，重点不是单纯更换便宜模型，而是减少进入上下文窗口的无效信息。&lt;/p&gt;&#xA;&lt;p&gt;下面这套方案覆盖代码探索、精准定位、规则管理、语义检索、日志过滤、回复压缩和仓库打包七个环节。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;AI 编程如何减少 Token 消耗：覆盖 Agent 工作流的 7 个开源工具&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://www.tood.win/uploads/2026/07/23_08_01-d99a75e0.jpg&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-使用-codebase-memory-mcp-建立代码库索引&#34;&gt;1. 使用 codebase-memory-&lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/mcp/&#34; &gt;mcp&lt;/a&gt; 建立代码库索引&#xA;&lt;/h2&gt;&lt;h3 id=&#34;常见问题&#34;&gt;常见问题&#xA;&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/ai-agent/&#34; &gt;AI Agent&lt;/a&gt; 每次进入项目后，都可能重新执行以下操作：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;扫描目录结构&lt;/li&gt;&#xA;&lt;li&gt;搜索函数和类&lt;/li&gt;&#xA;&lt;li&gt;分析调用关系&lt;/li&gt;&#xA;&lt;li&gt;判断模块之间的依赖&lt;/li&gt;&#xA;&lt;li&gt;重新理解 API 路由和业务流程&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;大型项目中，这类重复探索会消耗大量输入 Token。&lt;/p&gt;&#xA;&lt;h3 id=&#34;解决方案&#34;&gt;解决方案&#xA;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;codebase-memory-mcp&lt;/code&gt; 会通过 Tree-sitter 分析代码，并将函数、类、调用链、路由和跨服务关系整理成持久化知识图谱。Agent 后续可以直接查询代码结构，而不必反复读取大量文件。&lt;/p&gt;&#xA;&lt;h3 id=&#34;适合场景&#34;&gt;适合场景&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;长期维护的代码仓库&lt;/li&gt;&#xA;&lt;li&gt;多模块或多服务项目&lt;/li&gt;&#xA;&lt;li&gt;经常切换 AI 编程会话&lt;/li&gt;&#xA;&lt;li&gt;需要分析函数调用链的项目&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;它更接近“代码结构记忆”，不能完全代替项目决策记录和开发文档。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-使用-serena-进行符号级代码定位和修改&#34;&gt;2. 使用 Serena 进行符号级代码定位和修改&#xA;&lt;/h2&gt;&lt;h3 id=&#34;常见问题-1&#34;&gt;常见问题&#xA;&lt;/h3&gt;&lt;p&gt;Agent 可能只需要修改一个函数，却先读取整个几千行文件。这样不仅浪费 Token，还容易让无关代码干扰判断。&lt;/p&gt;&#xA;&lt;h3 id=&#34;解决方案-1&#34;&gt;解决方案&#xA;&lt;/h3&gt;&lt;p&gt;Serena 是一个面向 AI 编程 Agent 的 MCP 工具包，可以按照函数、类、方法和引用关系查找代码，并进行符号级编辑、重构和调试。&lt;/p&gt;&#xA;&lt;p&gt;例如，Agent 可以直接执行：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;查找某个函数&lt;/li&gt;&#xA;&lt;li&gt;查找函数的所有调用位置&lt;/li&gt;&#xA;&lt;li&gt;在指定方法后插入代码&lt;/li&gt;&#xA;&lt;li&gt;修改某个类，而不是重写整个文件&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;适合场景-1&#34;&gt;适合场景&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;单个文件代码较长&lt;/li&gt;&#xA;&lt;li&gt;需要跨文件重构&lt;/li&gt;&#xA;&lt;li&gt;希望 Agent 精确修改代码&lt;/li&gt;&#xA;&lt;li&gt;不想让 Agent 大范围读取和重写文件&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;3-使用-agentsmd-固化项目规则&#34;&gt;3. 使用 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/agents-md/&#34; &gt;AGENTS.md&lt;/a&gt; 固化项目规则&#xA;&lt;/h2&gt;&lt;h3 id=&#34;常见问题-2&#34;&gt;常见问题&#xA;&lt;/h3&gt;&lt;p&gt;每次开始新会话时，都需要重复告诉 Agent：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;项目使用什么技术栈&lt;/li&gt;&#xA;&lt;li&gt;哪些目录不能修改&lt;/li&gt;&#xA;&lt;li&gt;应该运行哪些测试&lt;/li&gt;&#xA;&lt;li&gt;代码采用什么命名规范&lt;/li&gt;&#xA;&lt;li&gt;修改完成后如何验证&lt;/li&gt;&#xA;&lt;li&gt;不要生成哪些无关内容&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这些重复提示不仅浪费时间，也会增加输入 Token。&lt;/p&gt;&#xA;&lt;h3 id=&#34;解决方案-2&#34;&gt;解决方案&#xA;&lt;/h3&gt;&lt;p&gt;在项目根目录创建 &lt;code&gt;AGENTS.md&lt;/code&gt;，将长期有效的项目规则统一写进去。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; 不是独立软件，而是一种面向编程 Agent 的开放指令格式，可以理解为“写给 AI Agent 的 README”。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-md&#34; data-lang=&#34;md&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# AGENTS.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 项目技术栈&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Python 3.12&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; FastAPI&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; SQLite&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Playwright&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 修改规则&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 修改前先定位相关函数，不要扫描整个仓库&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 不要修改 &lt;span class=&#34;sb&#34;&gt;`vendor/`&lt;/span&gt; 和生成文件&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 优先复用已有组件和工具函数&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 不要添加需求之外的功能&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 不要输出大段原理说明&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 验证命令&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 运行测试：&lt;span class=&#34;sb&#34;&gt;`pytest`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 运行类型检查：&lt;span class=&#34;sb&#34;&gt;`mypy app`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 修改前端后检查移动端布局&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;建议只写稳定、明确、可以执行的规则。内容过长反而会让每次请求都携带更多上下文。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;4-使用-grepai-搜索任务相关代码&#34;&gt;4. 使用 grepai 搜索任务相关代码&#xA;&lt;/h2&gt;&lt;h3 id=&#34;常见问题-3&#34;&gt;常见问题&#xA;&lt;/h3&gt;&lt;p&gt;传统的 &lt;code&gt;grep&lt;/code&gt; 只能根据关键词搜索。&lt;/p&gt;&#xA;&lt;p&gt;例如搜索“用户登录流程”时，实际函数可能叫 &lt;code&gt;validateCredentials&lt;/code&gt;、&lt;code&gt;createSession&lt;/code&gt; 或 &lt;code&gt;verifyToken&lt;/code&gt;。Agent 为了找到这些代码，可能需要搜索多个关键词并逐个读取文件。&lt;/p&gt;&#xA;&lt;h3 id=&#34;解决方案-3&#34;&gt;解决方案&#xA;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;grepai&lt;/code&gt; 是一个语义代码搜索工具，可以根据代码含义查找相关函数，并支持调用方、被调用方和依赖关系追踪。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepai search &lt;span class=&#34;s2&#34;&gt;&amp;#34;用户登录和身份验证流程&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepai trace callers &lt;span class=&#34;s2&#34;&gt;&amp;#34;Login&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;它不会直接压缩整个上下文，而是帮助 Agent 更快找到与任务真正相关的代码，减少无效文件读取。&lt;/p&gt;&#xA;&lt;h3 id=&#34;适合场景-2&#34;&gt;适合场景&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;不清楚功能代码位于哪个目录&lt;/li&gt;&#xA;&lt;li&gt;项目命名不统一&lt;/li&gt;&#xA;&lt;li&gt;需要理解完整业务流程&lt;/li&gt;&#xA;&lt;li&gt;只想把相关代码交给 AI&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;5-使用-rtk-过滤终端和日志输出&#34;&gt;5. 使用 RTK 过滤终端和日志输出&#xA;&lt;/h2&gt;&lt;h3 id=&#34;常见问题-4&#34;&gt;常见问题&#xA;&lt;/h3&gt;&lt;p&gt;AI Agent 执行测试、Git、Docker 或构建命令时，终端可能返回数千行内容，其中真正有价值的只有：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;一条错误信息&lt;/li&gt;&#xA;&lt;li&gt;一个失败的测试&lt;/li&gt;&#xA;&lt;li&gt;几行调用栈&lt;/li&gt;&#xA;&lt;li&gt;少量警告&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这些原始输出会直接占用上下文窗口，并在后续对话中持续消耗 Token。&lt;/p&gt;&#xA;&lt;h3 id=&#34;解决方案-4&#34;&gt;解决方案&#xA;&lt;/h3&gt;&lt;p&gt;RTK 是一个命令行代理工具，会压缩常见开发命令的输出，隐藏成功日志、进度条和重复信息，只保留错误、摘要和关键结果。&lt;/p&gt;&#xA;&lt;p&gt;项目 README 宣称，在部分常见开发命令中可减少 60%～90% 的输出 Token，但实际效果取决于命令类型和日志内容。&lt;/p&gt;&#xA;&lt;h3 id=&#34;适合场景-3&#34;&gt;适合场景&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;测试输出很长&lt;/li&gt;&#xA;&lt;li&gt;Docker 日志较多&lt;/li&gt;&#xA;&lt;li&gt;Git diff 内容庞大&lt;/li&gt;&#xA;&lt;li&gt;构建工具输出大量成功信息&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;RTK 主要减少的是&lt;strong&gt;工具返回给 Agent 的内容&lt;/strong&gt;，并不能解决代码检索产生的 Token 浪费。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;6-使用-caveman-压缩-agent-最终回复&#34;&gt;6. 使用 Caveman 压缩 Agent 最终回复&#xA;&lt;/h2&gt;&lt;h3 id=&#34;常见问题-5&#34;&gt;常见问题&#xA;&lt;/h3&gt;&lt;p&gt;代码修改完成后，Agent 经常继续输出：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;重复描述用户需求&lt;/li&gt;&#xA;&lt;li&gt;大段修改原理&lt;/li&gt;&#xA;&lt;li&gt;不必要的客套话&lt;/li&gt;&#xA;&lt;li&gt;多种用户没有要求的备选方案&lt;/li&gt;&#xA;&lt;li&gt;冗长的下一步建议&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这些内容通常不会提高代码质量，却会增加输出 Token。&lt;/p&gt;&#xA;&lt;h3 id=&#34;解决方案-5&#34;&gt;解决方案&#xA;&lt;/h3&gt;&lt;p&gt;Caveman 是一个面向 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/claude-code/&#34; &gt;Claude Code&lt;/a&gt;、Codex、Cursor、&lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/gemini/&#34; &gt;Gemini&lt;/a&gt; CLI 等工具的 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/skill/&#34; &gt;Skill&lt;/a&gt; 或插件，用更短的表达保留错误信息、命令和关键结论。&lt;/p&gt;&#xA;&lt;p&gt;普通回复：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;我已经完成了相关修改。主要问题是组件在每次渲染时都会创建新的对象引用，因此建议使用 useMemo 对对象进行缓存。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;压缩后：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;每次渲染都会创建新对象引用。使用 `useMemo` 缓存。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;需要注意，Caveman 主要压缩&lt;strong&gt;输出 Token&lt;/strong&gt;，不会自动减少 Agent 读取的代码和上下文。项目维护者也说明，在原本已经很简短的任务中，额外 Skill 指令可能无法带来明显节省。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;7-使用-repomix-打包和过滤代码仓库&#34;&gt;7. 使用 Repomix 打包和过滤代码仓库&#xA;&lt;/h2&gt;&lt;h3 id=&#34;常见问题-6&#34;&gt;常见问题&#xA;&lt;/h3&gt;&lt;p&gt;直接将整个项目上传给 &lt;a class=&#34;link&#34; href=&#34;https://www.tood.win/tags/chatgpt/&#34; &gt;ChatGPT&lt;/a&gt;、Claude 或其他 AI，通常会同时包含：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;依赖目录&lt;/li&gt;&#xA;&lt;li&gt;构建产物&lt;/li&gt;&#xA;&lt;li&gt;缓存文件&lt;/li&gt;&#xA;&lt;li&gt;测试快照&lt;/li&gt;&#xA;&lt;li&gt;大型日志&lt;/li&gt;&#xA;&lt;li&gt;无关文档&lt;/li&gt;&#xA;&lt;li&gt;可能泄露的配置和密钥&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这些内容既浪费 Token，也会增加信息泄露风险。&lt;/p&gt;&#xA;&lt;h3 id=&#34;解决方案-6&#34;&gt;解决方案&#xA;&lt;/h3&gt;&lt;p&gt;Repomix 可以将代码仓库整理成一个适合 AI 阅读的文件，同时支持：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;按规则排除目录和文件&lt;/li&gt;&#xA;&lt;li&gt;自动遵守 &lt;code&gt;.gitignore&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;统计各文件 Token 数量&lt;/li&gt;&#xA;&lt;li&gt;检查潜在敏感信息&lt;/li&gt;&#xA;&lt;li&gt;使用 Tree-sitter 提取主要代码结构&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx repomix@latest&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;只保留函数、类和关键结构：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx repomix@latest --compress&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Repomix 的 &lt;code&gt;--compress&lt;/code&gt; 模式主要保留函数和类的签名，减少实现细节，因此更适合架构分析和初步定位，不一定适合需要逐行排查的复杂 Bug。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;推荐的低成本组合&#34;&gt;推荐的低成本组合&#xA;&lt;/h2&gt;&lt;p&gt;大多数个人开发者不需要同时安装全部工具。&lt;/p&gt;&#xA;&lt;h3 id=&#34;小型项目&#34;&gt;小型项目&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AGENTS.md + Repomix&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;适合临时把项目交给 AI 分析。&lt;/p&gt;&#xA;&lt;h3 id=&#34;中型项目&#34;&gt;中型项目&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AGENTS.md + Serena 或 grepai + RTK&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;同时减少代码读取、重复提示和终端日志。&lt;/p&gt;&#xA;&lt;h3 id=&#34;长期维护的大型项目&#34;&gt;长期维护的大型项目&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;codebase-memory-mcp + Serena + AGENTS.md + RTK&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;代码结构查询、精准编辑、行为约束和日志过滤可以形成完整工作流。&lt;/p&gt;&#xA;&lt;p&gt;Caveman 属于可选项，主要用于压缩最终回复，不应把它当作输入上下文优化工具。&lt;/p&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&#xA;&lt;/h2&gt;&lt;p&gt;AI 编程中的 Token 优化不能只靠一句“回答简洁一点”。&lt;/p&gt;&#xA;&lt;p&gt;真正有效的方法是分别处理不同来源的浪费：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Token 浪费来源&lt;/th&gt;&#xA;          &lt;th&gt;对应方案&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;重复探索代码结构&lt;/td&gt;&#xA;          &lt;td&gt;codebase-memory-mcp&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;读取和修改完整文件&lt;/td&gt;&#xA;          &lt;td&gt;Serena&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;重复输入项目规则&lt;/td&gt;&#xA;          &lt;td&gt;AGENTS.md&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;搜索大量无关代码&lt;/td&gt;&#xA;          &lt;td&gt;grepai&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;终端和测试日志过长&lt;/td&gt;&#xA;          &lt;td&gt;RTK&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Agent 最终回复冗长&lt;/td&gt;&#xA;          &lt;td&gt;Caveman&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;上传整个代码仓库&lt;/td&gt;&#xA;          &lt;td&gt;Repomix&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;这些工具的功能存在一定重叠，也会带来安装、索引和维护成本。正确做法不是全部堆上，而是先观察 Token 主要浪费在哪个环节，再选择对应工具。&lt;/p&gt;&#xA;&lt;h2 id=&#34;github-项目地址&#34;&gt;GitHub 项目地址&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;codebase-memory-mcp&#xA;&lt;a class=&#34;link&#34; href=&#34;https://github.com/DeusData/codebase-memory-mcp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/DeusData/codebase-memory-mcp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Serena&#xA;&lt;a class=&#34;link&#34; href=&#34;https://github.com/oraios/serena&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/oraios/serena&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;AGENTS.md&#xA;&lt;a class=&#34;link&#34; href=&#34;https://github.com/agentsmd/agents.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/agentsmd/agents.md&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;grepai&#xA;&lt;a class=&#34;link&#34; href=&#34;https://github.com/yoanbernabeu/grepai&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/yoanbernabeu/grepai&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;RTK&#xA;&lt;a class=&#34;link&#34; href=&#34;https://github.com/rtk-ai/rtk&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/rtk-ai/rtk&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Caveman&#xA;&lt;a class=&#34;link&#34; href=&#34;https://github.com/JuliusBrussee/caveman&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/JuliusBrussee/caveman&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Repomix&#xA;&lt;a class=&#34;link&#34; href=&#34;https://github.com/yamadashy/repomix&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/yamadashy/repomix&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
