最近GitHub上有个项目特别火,六万多Star,名字叫Caveman——翻译过来就是'原始人'。它干了一件特别有意思的事:让Claude像原始人一样说话,然后就省了65%的Token。我第一次看到这个项目的时候,说实话觉得有点荒诞,但仔细一想,还真挺精妙的。
对,它的Slogan特别有梗,直接致敬了美剧《The Office》里Kevin那句经典台词——'why use many token when few token do trick',为什么用很多token,少token就能搞定嘛。你看这句话本身就是原始人风格,语法都省了,但你完全能理解意思。
哈哈对,这个Slogan本身就是最好的产品演示。不过我们先给听众铺垫一下背景——为什么Token这个事这么重要?很多人可能知道调用AI的API要花钱,但具体怎么个花法,不一定清楚。
嗯,这个得稍微解释一下。Token是大语言模型处理文本的基本单位,但它不等于一个单词。模型用的是一种叫BPE的算法来切分文本,常见的词可能一个Token就搞定,但生僻词或者长词可能被拆成好几个Token。比如'initialization'这个词可能被拆成两个Token,但缩写'init'只要一个。英语里大概一个Token对应0.75个单词,中文的话一个汉字大概是一到两个Token。
而且关键是,输出Token的单价通常是输入Token的三到五倍。所以模型每多说一个废话,都是在以更高的费率烧钱。
没错,这就是问题的核心了。你看大语言模型在训练的时候,经过RLHF阶段——就是基于人类反馈的强化学习——人类标注员倾向于给那些更详细、更礼貌、结构更完整的回答打高分。所以模型就学会了一种'过度服务'的表达模式。你问它'这段代码有bug吗',它可能先来一句'Certainly! I'd be happy to help you review this code',然后'After careful analysis',铺垫半天才告诉你第42行有个变量没初始化。
其实真正有用的信息就是'第42行,count没初始化'这几个词。
对,而Caveman处理之后,同样的回答变成什么样呢?'bug line 42. count no init before loop. fix: add let count equals 0'。信息量完全一样,但Token消耗直接砍掉一大半。而且你注意,它用'init'代替'initialization',这种短词在BPE编码层面效率也更高,等于是双重压缩。
这让我想到信息论。香农在1951年就估算过,英语的冗余度大概在50%到75%之间,也就是说超过一半的字符理论上是可预测的、不携带新信息的。日常交流中这种冗余有助于容错,比如你漏听一个词还能靠上下文猜出来。但在人机交互的技术场景里,这些冗余就是纯粹的成本浪费了。
你这个角度特别好。Caveman本质上就是在保持语义信息量不变的前提下,最大限度地压缩冗余,让每个Token的信息密度逼近理论上限。它的策略其实很直白:去掉所有客套话,省略冠词介词连接词这些语法结构词,用关键词短语代替完整句子,但技术术语、代码片段、关键数据一个不少。
那从技术实现上来说,它是怎么做到的?是重新训练了一个模型吗?
其实不是,这也是它最巧妙的地方。Caveman本质上就是一个精心设计的系统提示词,利用了Claude Code的Skill机制。Claude Code允许开发者在项目目录里放一个Markdown配置文件,定义Claude的行为模式和输出风格。这个文件会在每次对话开始时自动注入到上下文中,持久地影响模型行为。所以Caveman不需要重新训练模型,不需要微调,零成本、即插即用。
这就是提示词工程的威力。你不需要改变模型的推理能力,只需要告诉它'怎么说话'就行了。如果用微调的方式实现类似效果,那成本和复杂度完全不在一个量级——要准备训练数据集、消耗GPU算力,而且模型每次更新都得重新来一遍。
对,所以业界才说提示词工程是ROI最高的AI优化手段之一。不过我得补充一点,Caveman不是万能的。它最适合的是开发者和AI之间的交互场景——代码审查、bug修复、技术问答这些。如果你的AI输出要直接给终端用户看,原始人风格肯定不合适。
还有一个有意思的张力——复杂推理任务。思维链技术是让模型把中间推理步骤写出来,Google在2022年的论文证明了光是加一句'Let's think step by step'就能显著提升数学和逻辑推理的表现。但Caveman是要压缩输出,这两者在某些场景下是矛盾的。
没错,这就是推理准确性和Token效率之间的取舍。你得根据具体任务来判断。不过对于大多数日常的编程交互来说,开发者真的只关心核心信息,不需要模型给你写一篇小作文。
其实Caveman还有一个容易被忽略的好处。每个大语言模型都有固定的上下文窗口,比如Claude 3.5是200K Token。这个窗口要同时装系统提示词、历史对话、当前输入和模型输出。模型回复越冗长,历史对话就越快填满窗口,早期的讨论内容就会被截断,模型就'忘了'之前聊过什么。
你说到点子上了。Caveman通过压缩输出,实际上延长了模型的有效记忆长度。在长对话中模型能保持更好的连贯性,能处理更复杂的任务。所以Token优化不仅仅是省钱的问题,它其实是在提升AI系统的能力上限。
六万Star也说明这个痛点是真实存在的。据行业估算,一个中等规模的AI编程助手服务,月均Token消耗可以达到数十亿,API费用可能高达数十万美元。省65%意味着什么,大家可以自己算。
而且别忘了,输出Token减少还意味着响应速度更快。大语言模型的推理是自回归的,每次只生成一个Token,所以输出Token数量和响应延迟几乎是线性关系。少65%的输出,等待时间也近似缩短65%。省钱、提速、扩容,一举三得。
聊到最后我觉得Caveman这个项目最大的启示,其实不是这个插件本身,而是它揭示了一个结构性问题:大语言模型默认的表达方式并不是最优的。大量Token被浪费在了'看起来专业'而不是'传递信息'上。提示词工程的价值仍然被严重低估,一个好的系统提示词,效果可能等同于数倍的算力投入。
嗯,说到底就是那句话——少即是多。在Token经济的世界里,这不是哲学,是真金白银。原始人的智慧嘛,有时候比我们想象的深刻得多。