【探讨】平时在vibe coding时,各位佬有哪些好方法能够减少API调用次数和Token消耗的?

前言

API调用次数和Token消耗量一直是vibe coding时的大难题,一个小小的修改,AI却总是想要探索更多,然后无情的消耗你的Token。所以,有哪些最佳实践方法来减少API调用次数和Token消耗?

我的案例

我来分享一个我在个人项目和工作项目中遇到的问题和采用的方法,希望对大家有所启发。

vibe coding时,一般都有单元测试,AI会自主去执行单侧,对于编译型语言(比如:C++),AI还会自主去执行编译,但是这两个过程会产出大量的无效信息,我认为有些信息AI完全不需要关注(以C++程序为例):

  • 编译过程无关紧要的警告、进度等信息;
  • 单侧过程中已经通过测试的单侧用例、DEBUG打印等;

通过提示词,让AI自己去生成命令过滤,实际上会不太稳定。所以我在实践中,是让AI编写一个脚本,其核心功能是:

  • 执行固定的单侧流程,程序化的过滤AI不应该关心的信息,AI只需要一条固定的命令即可执行。保证稳定性和上下文不被过多占用。

我以工作中和个人项目为例:

  • 工作项目(基于C++):使用Python脚本实现程序化单测流程,可以编译和执行单侧,它只输出最重要的信息,比如编译错误、单侧失败的用例、单测失败的位置等;AI执行执行固定的命令python gut_runner test_xxx.cpp,稳定性会更高。
  • 个人项目(Godot游戏):gdscript是一个脚本,没有编译流程,所以重心是在过滤无关信息,输出也一样,只有失败的部分。

:face_with_tongue:核心思想是:用稳定的流程或者工具,补齐AI能力上的不足。

:wink:欢迎各位佬一起探讨,我们的目标是:用工程化思想,实现以最少的API请求次数、Token消耗,完成最好的vibe coding效果。

5 个赞

主要是减少轮次和减少每轮的内容。减少轮次的话,在单次输入里面多列几个需求,在能并行操作的时候用并行的subagent,以及换话题的时候直接开新对话。减少内容的话,把不用的skill/mcp/插件都删了,把记忆文件和claude.md用文件名链接精简化,对于失败的输出不是新开一轮对话而是esc回退到上一轮重新输入。还有一些插件也能像贴主说的能过滤无效信息,比如serena可以在读文件的时候缩短输出,还有一个叫airis的mcp可以不用一开始加载那么多用不上的插件。

2 个赞

:rofl:看了一下,好像还得订阅。那我觉得,不如用脚本做程序化过滤~

使用自己的脑子(立省100%)

:+1:这两天我又萌生一个想法,现在主要的AI编码应该是:调研、规划、编码。调研、规划两个阶段AI可以基本识别出哪些是必读文件(没有也没关系),哪些是可读文件。生成子Agent时,只给任务ID,并要求子Agent通过任务ID+脚本获取自己的任务详情,脚本会识别必须文件,然后一起输出。(自己的想法,必须得自卖自夸一下)这样有两个优点:1)主Agent只关注任务摘要和ID等关键信息,所有任务由子Agent完成,主Agent的上下文不会因为这些不重要的信息而造成污染;2)脚本获取任务详细,同时输出必读文件内容,还能减少子Agent的模型调用次数。肯定有缺点, :rofl:但我识别不出来,我得找个时间实践一下才知道有啥缺点~哈哈

1 个赞

其实如果用superpowers走完全流程的话大概就是这个思路和过程了,先根据粗略想法读现有文件做头脑风暴,把结果存成目标计划,之后再根据目标计划文件和现有文件生成分文件的实现细节文档。再之后其实agent就不再需要之前的内容了,可以单开一个session根据实现细节来生成一个依赖关系DAG,根据DAG的拓扑结构fork一堆子agent按顺序实现,最后做代码审查和测试。

:+1: :+1:学到了,我得去看看superpowers :rofl: 有现成的最好,就是消息不够灵通,不知道有这些

1 个赞

不需要订阅,是软件二进制实现的降 token 功能,目前 alma 也是实装了这个功能