我做了一个实验: 把冒泡排序的代码压缩到只剩45个Token,然后扔给 DeepSeek,它竟然完整还原了。
我又试了下业务代码,模型还是能还原。那一刻我意识到一件事情:我们平时写的代码,可能有60%是写给人看的。AI真正需要的是另一套东西,一种它自己的编程语言。
不是Python、Go、Java。而是一种人类看着像天书、AI一秒就能读懂的东西。
一、把代码压缩8倍,AI还是读懂了
先看个例子,这是一段Java写的冒泡排序,压缩后只剩45个Token:
Java: void bubble(int[] a){int n=a.length;if(n<2)return;for i=0..n-2{bool sw=false;for j=0..n-2-i if a[j]>a[j+1]{swap(a,j,j+1);sw=true} if(!sw)break}}你觉得AI能还原吗?DeepSeek还原出了完整的冒泡排序。不过,这个压缩后和java的语法还是有点像,而且冒泡排序等是通用算法,AI见得多当然能猜。那业务代码呢?公司特有的CRUD逻辑,AI也能懂吗?
我们再来换个场景:计算订单折扣。压缩后长这样,只有35 Token:
Java: calc(lvl,amt,usePts):lvl:1?0.95:2?0.88:3?0.80:>=4?0.75amt*disc - (usePts?min(pts/100, amt*disc*0.3):0) + (amt<99?6:0)扔给DeepSeek它还是完整地还原了,并做了解读:这是典型的会员折扣 + 积分抵扣 + 运费计算逻辑。
按会员等级打对应折扣(1 级 95 折 → 4 级 75 折); 可选择用积分抵扣,每 100 积分抵 1 元,**最多抵折扣价的 30%**; 原价未满 99 元需付 6 元运费,满 99 免邮。
再来一个订单状态流转的例子,压缩后65 Token:
Java: OrderService.getNextStatus(cur,act):cur:PEND_PAY -> act:PAY?PAID : act:CANCEL?CANCELLEDcur:PAID -> act:SHIP?SHIPPED : act:REFUND?REFUNDINGcur:SHIPPED -> act:CONFIRM?COMPLETEDcur:REFUNDING -> act:APPROVE?REFUNDED : act:REJECT?PAIDdefault: throw IllegalStateDeepSeek还原后不仅补全了所有switch-case,还把PEND_PAY自动展开为PENDING_PAYMENT,甚至在驳回退款那行加上了注释。
AI能够读懂还原,不是因为它记住了某段代码,而是因为它捕捉到了压缩代码里的语义骨架:循环边界、比较逻辑、交换操作。这些才是AI真正需要的信息。
这些压缩代码,其实就是AI编程语言的"方言样本"。它还没有语法规范,但语义骨架已经成型了。
还原后的代码我就不贴了,你可以自己把上面的压缩代码扔给DeepSeek试试。注意:让它不要管语法是否正确,只需要还原代码并添加注释。
二、AI读的不是语法,是语义指纹
我们人类读代码主要靠三样东西:换行、缩进、命名。但是AI读代码主要靠的是语义指纹。
对人类来说,for i=0..n-2看起来像数学符号。但对AI来说,这个字符串就像指纹,它在训练数据中见过数百万个冒泡排序的循环头,能瞬间匹配到这个模式,然后自动补全剩下的99%。
以下信息对AI来说,全是冗余的:
空白字符:空格、换行、缩进对AI毫无意义,省掉约15% Token。 完整单词拼写: function→fn,swapped→sw,AI靠上下文推断,省约20% Token。多余语法: switch-case可简化为cur:状态->act:操作?结果, 省15% Token注释和Javadoc:语义已在骨架中,注释是噪声,省约10-20% Token。
我们写的代码,60% 是写给人看的包装,40% 才是真正写给 AI 的逻辑。
换句话说,每次和 AI 对话,我们都在为"人类包装"付钱。
三、AI的编程语言,已经长什么样了?
既然AI对人类语法这么无所谓,那它自己的"语言"到底是什么样的?
上一段列出的那些冗余:删空白、缩写命名、压控制结构、省注释等,反过来就是AI偏好的四条表达规则。当我顺着这个方向深挖,发现行业里已经有人在系统性地定义AI的语法规则了。
Kotlin语言之父Andrey Breslav在2026年初推出了一个新项目叫CodeSpeak。它不再让开发者用自然语言写Prompt,而是写一套形式化规约:用严谨的类型约束和逻辑条件来描述“程序必须满足什么”。变量命名被弱化,类型定义成为核心。这和“缩写命名”、“省注释”背后的逻辑一模一样:AI不需要人类可读的修饰,它需要的是无歧义的约束条件。
MIT CSAIL实验室则从另一个角度切入。他们提出了一种叫“概念与同步”的软件模型,把系统拆成独立的“概念”块,每个块有自己的内部逻辑,块与块之间通过同步规则通信。AI在修改一个概念时,只需要读那个概念的代码和它的同步契约,不需要理解整个系统。这本质上是把“删空白”和“表达式替代控制结构”上升到了架构层面,减少AI需要处理的上下文噪声,把逻辑压缩到最小可理解单元。
还有一个更底层的趋势:Ecma国际正在标准化一套叫NLIP的协议,专门给AI Agent之间通信用。它的消息格式长这样:
{agent:A, type:BUG, pos:42, err:OOB, fix:bound-1, confidence:0.97}这其实就是AI之间对话的“语法”。它不关心Java还是Python,它只关心动作类型、位置、错误码、修复方案、置信度。这是AI原生表达的最简形态。
所以,回到开头那个问题:AI的编程语言长什么样?
它不是一种新的Java或Python,而是三种表达方式的组合:CodeSpeak用类型约束描述边界,MIT的模型用状态转换描述逻辑,NLIP用结构化消息描述通信。加在一起,就是AI理解代码的"母语"。
我们写的代码,将来可能不再直接喂给AI。工具会先翻译成这种"母语"——人类看着像结构化的JSON或DSL,AI却能零损耗理解。
而这三种表达的共同点,就是"只说约束,不说做法"——告诉AI边界在哪、规则是什么、和谁交互,剩下的,AI自己填。
四、你的AI编程工具是如何进行Token压缩的
当然,以上只是我的实验。常规的AI编程工具如Claude Code、Copilot CLI、Cursor等处理Token压缩,遵循的是工程化、分层级的自动化管理策略,和我的实验方法截然不同。
| 工具结果裁剪 | 实时/会话中 | |
| 微压缩 | 接近Token上限时 | |
| 自动压缩(含会话记忆压缩) | 上下文使用量达95%时(约190K Token) |
Claude Code和Copilot CLI在对话快撑爆上下文窗口时,会自动触发"Auto-Compact":把几小时的聊天记录,浓缩成一份只保留"完成了什么、卡在哪里、下一步做什么"的结构化摘要。
但压缩是有代价的,Auto-Compact可能会丢掉关键信息:某个文件路径、某条报错堆栈、某个临时决定的上下文。
Claude Code的补救方式是:压缩完成后,重新从磁盘加载 CLAUDE.md 配置文件,确保项目的核心指令不会丢。
Cursor的策略更"激进":不把信息塞进上下文,而是告诉AI去哪找。 比如你跑出一条超长命令结果,Cursor会把它写进一个临时文件,只把文件路径传给AI,让AI自己按需去读。官方数据显示,这一招平均能减少 46.9% 的Token消耗。
这个思路给了我一个很大的启发:最高级的压缩,不是把东西压小,而是根本不放进包里。
五、给程序员的建议
在日常使用中,我们可以更聪明地配合这些编程工具。
手动触发压缩:如果你用 Copilot CLI,在完成一个功能点后输入
/compact,主动压缩。这比等系统自动触发更可控:你知道当前状态是干净的,压缩后的摘要会更精准。把关键信息写进配置文件:不管是 Claude Code 的
CLAUDE.md,还是 Cursor 的.cursorrules,把项目的核心约束、技术栈、命名规范写进去。压缩后这些文件会被重新加载,AI不会忘记你的底线。别在对话里贴大段输出:命令行返回了超长结果?自己先扫一眼,只把关键信息告诉AI,而不是把整个输出扔进去。能用文件路径就别贴文件内容,能用一句话描述就别贴整段日志。
如果你想更进一步,可以试试开源社区的一些极简压缩工具,比如如squeez,它们能将代码自动压缩成AI友好格式,省去手动精简的麻烦。
记住:你每次和AI对话,都在花Token。写给人看的包装越少,AI的效率越高。
AI的编程语言不是未来,而是现在。它就藏在你下次按下 Ctrl+Enter 时,发给它的那行"乱码"里。
夜雨聆风