0

作者丨Rhea
編輯丨馬曉寧 李娜
在漫長的動漫歷史中,除了櫻桃小丸子,還有一顆聞名世界的大丸子:螺旋丸。
這是一個混亂與秩序極限對抗并形成最佳平衡的存在,也是這個效果美感的根本來源。換成工程師們經常提到的第一性原理來說:約束才是威力的本源。能量的破壞力不取決于總量,而是取決于密度。而密度就來自于約束。
我在試用 Kimi K3 的整個過程中做了不少好玩的東西,也深度體驗了 K3 的各項能力并為之感嘆,但最想拿出來和你分享的還是這顆丸子,因為不管是前端的效果還是代碼層的深度,以及日志分析中看到的亮點,我都可以毫無保留的說:K3 就是一顆不靠血脈,純靠控制精度,硬生生搓到世界第一梯隊的螺旋丸。

01
凝聚:“氣流在分散狀態只會是輕撫的微風,只有把力量集中在單點才能完成質的轉變。”
Moonshot 目前估值約 200 億美元,半年融資 39 億美元,有報道稱核心團隊約 80 人量級。這個體量放在國內是明星創業公司,但面對諸如 OpenAI、Anthropic、Google的時候,在資金和算力上卻是另一個量級的存在。并且在 K3 的官方 benchmark 里,有幾項測試用的是英偉達被刻意限制過性能的 H20。
卡更少,錢更少,人更少。但是他們做出了第一個開源的 2.8T 級模型。
在此之前,這個體量的模型只有幾家公司內部的人見過。 閉源那邊的巨無霸從來不公開權重,開源陣營最大的一直停在 1T 那一檔(上一個紀錄還是他們自己的 K2 那代)。K3 把閉源級別的體量第一次擺到了公開桌面上——研究者可以拆開看,其他開發者可以拿去蒸餾、微調、做產品,不用申請也不用交錢。這是給整個行業省下的錢和時間,不是給 Moonshot 自己的榮譽。
但開源不意味著人人都能用,反而 K3 有著非常不低的使用門檻。官方給的部署建議是 64 張以上加速卡組成的 supernode。API 定價是輸入 3 美元、輸出 15 美元每百萬 token,這相比前作 K2.7 的 0.95 和 4 美元,輸出漲了將近四倍。
在資源不占優的情況下,它選擇把有限的資源全部押在能力上限上,然后誠實的說明了跑滿血版的成本和代價。

02
“當資源被聚集,團隊變專注之后,讓一切可以永動的資源以合理的方式高速轉動起來就是進一步提升力量的秘訣。而且轉法決定一切。”
K3 被討論最多的數字是 2.8 萬億參數。但它真正的技術內核,恰恰不在這個數字上。它的兩個核心創新方向都是改變組織方式,而不是增加規模。
▎第一個是 KDA(Kimi Delta Attention)
傳統注意力機制的問題是:每一層都要看全部內容,上下文越長,成本漲得越離譜。想象你在讀一本很厚的書,但你有個怪毛病:每翻到新的一頁,都要把前面讀過的所有頁重新掃一遍,才敢往下讀。讀到第 10 頁,你其實已經讀了 55 頁;讀到第 1000 頁,你讀了 50 萬頁。上下文越長成本漲得越離譜,就是這么漲的。
KDA 的做法反而是主動做限制:大部分時候不回頭翻原文,只看自己手寫的那一頁摘要。關鍵在于這頁摘要永遠只有一頁——不管已經讀了 10 頁還是 100 萬字,它都是一頁,讀完一段就往上改幾行,所以成本不再跟著長度漲。只有每隔三層,才允許真正回頭翻一次完整原文。這就是架構里三層用線性注意力、一層用全注意力的 3:1 混合。
代價是大部分層的能力被削弱了。換來的是什么?在 48B 規模的驗證模型上,KV cache 最多降 75%,100 萬 token 長度下解碼速度快 6 倍。

(Kimi Delta Attention 論文摘要)
代價也很實在:四分之三的層從此看不到原話,只能靠摘要辦事。但換來的東西剛好對得上,既然只有四分之一的層還需要留著原文,那要背下來的原文就只剩四分之一——這就是 KV cache 最多降 75% 的字面意思。 100 萬 token 長度下解碼快 6 倍,是同一件事的另一面:不用每走一步都重掃一遍全書。(這兩個數字測在 48B 的驗證模型上,不是 2.8T 本體。)
這就是"1M 上下文能真跑起來"的原因。 不是靠硬堆資源,是靠限制。資源永遠是受限的,但思維不是。他們沒有更多的卡,于是去想清楚了哪些層其實根本不需要看全文。
▎第二個是 AttnRes(注意力殘差)
這個更精彩。Transformer 里有個叫殘差連接的東西,標準做法是把每一層的輸出用固定權重 1 累加起來。
我們把它換成一個 30 人的項目群來理解:規定每個人的發言都要原樣貼進最終紀要,一個字不許刪,同時也不許標重點。但這會出兩個問題,也是論文指出的那兩個毛病。一是紀要越來越長、最后沒法用。因為隱狀態的幅度會無限增長;二是第 3 個人那句真正關鍵的話會被后面 27 條無關發言稀釋掉了。因為均勻累加會稀釋每一層的貢獻。放任所有人平權發言,結果是誰也沒說清楚。這就是典型的"沒有約束的亂流"。
AttnRes 的改法是給每一層配一個自己的編輯:它不照抄前面所有人的話,而是自己判斷該從前面哪幾層調什么信息進來。而且這個判斷是訓練出來的,并不是人定的死規則。也就是說連接方式本身從一條死規定,變成了一項可以被學習和進化的本領。
效果也立竿見影,在 1.4T token 的訓練上,它追平了一個多用 1.25 倍算力的基線。這就是官方"訓練效率提升約 25%"的真實原理。同樣的結果,少燒四分之一的算力。

(ATTENTION RESIDUALS 論文片段)
而且這里還有一個很精彩的彩蛋:很多報道都在驚嘆 K3 的2.8 萬億參數,是最大的開源模型。好像 K3 是大力出奇跡,用參數競賽拉上來的質量。但 K3 的技術靈魂恰恰是反參數競賽的。
它的兩個核心創新,一個省推理,一個省訓練,全都是用更聰明的結構換能力,而不是用更多參數換能力。競賽的邏輯其實已經從誰的參數更多轉向了喚醒得更聰明。還有一個細節也值得一提:這兩個創新不是隨 K3 一起出來的。它們在八九個月前就分別開源了——有論文、有代碼、還在一個 48B 的小模型上驗證過效果,時間戳都在 K3 之前。

(hugging face 上 kimi 48B 的驗證模型)
先在小規模上把架構驗證清楚,再放大到旗艦。這里里外外都是對資源的調配能力和戰略定力體現。

03
僅僅是把資源旋轉起來還不夠。還得極度聚焦或者說專注。
開頭我們提到:威力來自密度,密度來自約束,這在物理上成立(能量密度),在工程上成立(壓強),在信息上也成立(壓縮)。仔細研究會發現 K3 的架構里到處是這個邏輯。2.8 萬億參數,但每次只激活 896 個專家中的 16 個;從后訓練階段就開始用 MXFP4 權重、MXFP8 激活做量化感知訓練。它是一開始就在被壓的狀態下訓練。
更具體一點來說,在開發這個前端項目的過程中,一共有 6 個版本是我主動往回刪效果。

球體在長按后會進化成一個更大的形態,這個形態也做了一串微調:體積極限從 2.4 倍提到 2.9 倍,同時改成核心、中層、薄殼的三層結構,然后又把最外那層殼減薄。外部裝飾一直在刪,內部分層一直在加深。

(只改動螺旋丸最外層的發光殼時,agent 整個思考過程)
( 去除火舌時 agent 的思考過程)
▎K3 在這些修改里體現了兩個很厲害的能力:
第一,它執行減法時沒把內核改壞。 刪白閃、刪光圈、減薄殼層,這些都是在動一個已經很復雜的渲染管線,改錯一處就會連帶崩掉別的。六次都干凈。舉個例子。在一間已經裝修好的房子里拆掉一面墻,重點看當初布線的人有沒有想過這面墻將來可能要拆。線路各走各的管,你整面拆掉,別的房間照常有電有水。線路亂竄、還從這面墻里借了過道,你一錘子下去,整層樓跳閘。
刪代碼是同一回事,而且更隱蔽。這個項目所有畫面都畫在同一塊畫布上,而畫布只有一支共享的畫筆——你把它調淡、調成疊加模式,用完不推回去,后面所有元素都跟著錯。像劇場的調光臺:上一個節目把燈壓暗了沒復位,后面每個節目都在暗場里演,而且沒人知道問題出在哪。
所以"刪掉一處裝飾,結果連帶崩掉別處"是這類工作里最常見的事故。它連著刪了六次,一次沒出事。
第二,在放大形態那串微調里,它給出的方案是"加內部層次、減外部厚度"。 那個三層結構是它的實現選擇,不是我在提示詞里寫的。如果要把一個屏幕上的球做成看起來很有威脅,大多數情況會加東西,比如加光、加環、加閃、加粒子。這是最省事的路,也是"AI 生成的東西都很花"這個印象的來源。但 K3 的選擇是讓球在往外漲,核在往里收,殼在變薄。這已經符合人類的審美和感知了。

04
▎前端能力的困境
要理解螺旋丸的這個效果難在哪,可能要看看前端做視覺效果這二十年怎么走的。
Flash 時代:一個封閉插件,有時間軸、有幀,做動畫很順手。代價是它從來不屬于網頁本身,是嵌在網頁里的一塊外星領土。2020 年被徹底埋葬。
CSS 動畫時代:transition、@keyframes、transform,瀏覽器原生支持、GPU 加速。但 CSS 動畫有個根本限制——它只會做插值。 你告訴它從 A 到 B,它把中間補出來。你沒法告訴它"這片葉子要根據它離球心的距離,實時決定自己轉多快"。CSS 不知道什么叫距離,也不知道什么叫球心。
Canvas 和 WebGL:到這一層你終于什么都能做了,代價是什么都得自己做。沒有時間軸,沒有關鍵幀,只有一個每秒調用 60 次的函數和一塊空白畫布。屏幕上出現的每個像素,都得你自己算。
于是這類效果卡在一個尷尬位置:CSS 其實是做不出物理感,Canvas 得手寫整套運動邏輯,現成的粒子庫效果長得都一樣、而且只管粒子不管你的文字和按鈕。而且一致性才是最難的地方。
你可以寫三套代碼,讓粒子轉圈、讓葉子飄、讓文字飛,其實三套各自都能跑,但是放在一起看肉眼就立刻會覺得不對,因為它們不在同一個物理世界里。 一個在自轉,一個在漂移,一個在走貝塞爾曲線,彼此是毫無關系的。要它們像真的一樣就必須讓所有東西受同一個力場支配。這就不再是寫動畫了,而是需要建一個小型物理系統,然后讓畫面上的一切活在里面。
▎交付物

零外部 JavaScript 依賴,所有特效都像是手寫 Canvas 2D。

(網頁完整長圖)
▎最難的前端效果
這是提給研發同學會被百分百拒絕的需求:搓球的時候,頁面上所有文字、按鈕、導航欄,都要被吸進那顆球里。要實現讓文字被吸進去的效果最省事的做法是整塊淡出,然后在球邊放點粒子,大概率能騙過眼睛,但 K3 它沒這么做。
第一步,把頁面上所有目標文本自動拆成單字。

用 TreeWalker 遍歷文本節點,每個字包進獨立的 span。這里有個細節:它特意跳過了 <rt> 標簽——那是日文的注音,注音必須跟著基字走,不能被單獨撕碎。
第二步,把每個字切成隨機碎片。
不是切成方塊,用的是遞歸半平面切割:

(index.html 第 1199–1230 行)
clipHalf 用有向距離判斷多邊形頂點在切割線哪一側,在跨越處插入交點;shardPolys 每次挑當前面積最大的那塊繼續切。結果是一組無縫鋪滿、互不重疊的隨機多邊形,再用 CSS 的 clip-path 落到 DOM 上。這是正統的計算幾何寫法。
第三步,足以全體起立敬禮
看到這里可以全體起立致敬的程度。頁面上有些擬音詞是斜著排的。把這種字切碎、克隆出來單獨飛,字形會歪。它寫了這個:

( index.html 第 1140–1152 行)
沿著這個字的所有祖先元素一路往上,把每一層 CSS matrix 里的旋轉角累乘出來,克隆碎片時反向補償回去。這個問題需求里根本沒提。 它是實現過程中才會暴露的隱性難點,而且是那種"不處理,觀眾也說不出哪里怪,只會覺得別扭"的隱性難點。

(文字撕碎瞬間特寫)
▎所有東西活在同一個力場里
回到前面說的真正難點:一致性。
這個項目里同時飛著四類東西——文字碎片、樹葉、球面甩出的氣流、環境塵埃。它們共用同一套流場公式。

( index.html 第 1355 行(碎片))

(index.html 第 1704 行(樹葉))
一個環量項決定繞球轉多快,一個徑向匯流項決定往里吸多快,都隨距離衰減。離球越近轉得越急、吸得越猛。這和真實渦旋一個道理。更講究的是每個個體都有自己的系數。所以有的葉子會盤旋很久才被吞掉,有的一下就沒了。不是所有東西按同一節奏走,這才像真的。

(index.html 第 1375–1380 行)
碎片飛行時還會沿運動方向拉伸:先轉到速度方向,沿這個方向拉長、垂直方向壓扁,再轉回來。這是專業的運動模糊做法——飛得越快,拉得越長。

(滿蓄力全景,可以看到碎片+樹葉+氣流同屏旋轉,并且在一個立場下面)
▎架構設計的精彩之處
K3 的代碼能力真的非常優秀。
我一開始壓根沒規劃螺旋吸入的效果。在日志里面可以看到 7 月 21 日 20:24,版本 a049a36,我的改動內容是希望球體運動能更真實和有能量感。K3 的選擇是"渦旋氣流物理化重構",就是把渦旋從視覺模擬改成了真正的速度場驅動。
但是文字吸入功能是第二天上午用著用著突然想到的。并且這個改動一次就成。正是因為前一晚先把渦旋改成了真物理場,第二天的碎片、樹葉、氣流才可能共用同一套流場。架構決策在前,視覺效果在后。 這是工程思維的順序,不是特效師的順序。

▎內容區一次成型
前面說的都是首屏那顆丸子。但這個頁面 1938 行里,有 234 行是純內容區,一行 Canvas 都沒有。
這部分的效果依然非常非常棒,幾乎還原了一個 jump 官網的水平。

六個章節都是 K3 自己規劃的,順序是:

以下是逐頁展示:






05
最難的不是搓出來,是不散。那顆球不是造出來就完事,而是一個需要持續供能才能維持的狀態。松手就散。這件事在 K3 身上出現了幾次,每次還不一樣。
▎產品層
官方文檔里有一條明確警告:多輪對話和工具調用時,必須把 API 返回的完整 assistant message 原樣傳回去,包括 reasoning_content。如果不這么做會怎樣?官方原話的意思是:質量可能劇烈波動。中途從別的模型切換到 K3,也可能出現同樣的問題。
K3 不是一個問一句答一句的靜態工具,它是一個需要你持續供能維持的狀態。你一斷供丟掉它的思考歷史它就散了。順著這條,有個現象也許能得到解釋。
Terminal-Bench 2.1 這個測試上,Moonshot 官方報的成績是 88.3,用的是自家的 Kimi Code。而 Artificial Analysis 用統一環境重測,K3 是 85.0。差了三分多。
這里是我的推斷,不是官方說法:這個差距未必是模型能力問題,更可能是 Harness 環境不同,不同的腳手架對思考歷史的處理方式不一樣。換句話說,第三方框架如果沒處理好這件事的話,可能會系統性低估它。
反過來說也成立:Kimi Code 的高分,也不能完全算在底座頭上。所以評估 K3 的時候,"模型能力"和"腳手架適配"應該分開算。 它的產品單位不是一個模型,而是模型加上完整思考歷史加上一整套 Agent 循環。
▎工程層
爆炸容易,收回來難。大部分特效做到"炸開"就結束了。這個項目做了完整的三狀態機——靜止、吸入中、歸位中:

(index.html 第 1419 行,配合第 1432 行 stepReturn)
松手之后三件事同時發生:碎掉的碎片沿緩動曲線飛回原位淡出;被拉扯變形但還沒碎的元素彈性回彈;已經被球吞掉的元素在原地重新淡入聚合。
全部結束后狀態歸零,頁面回到最初的樣子——你可以再搓一次,效果完全一樣。這就是"看起來完成"和"真的完成"的區別。前者只要炸得好看;后者要求這個系統能被無限次進入和退出,不留殘渣。
還有一個只有真調試過才會寫的補丁。頁面上那個長按按鈕,自己也會被吸進去。問題是:按鈕碎掉之后如果被隱藏,瀏覽器就收不到你松手的事件了——你松了手,程序還以為你在按著。它的處理是:

(index.html 第 1312 行(定義在第 1183 行))
用透明度歸零,而不是隱藏。看不見但還在那里,而且還能實現鼠標跟隨。其他元素照常隱藏,只有這個按鈕特殊對待。

06
一篇只有優點的測評不值得信。這個項目暴露的東西同樣具體。它并不是一句話就直接生成的效果。 一共迭代了 26 個版本。中間也出過幾個有大問題的版本,比如球體一直在循環尺寸變化,不響應交互指令;比如聲音反饋一直在卡循環等等。

(最開始的提示詞其實很簡單)
1M 上下文被撐滿了兩次。 一次導致會話直接中斷,一次導致早期的對話記錄被壓縮、原話不可考。1M 看起來已經很大了,但在這種多輪加多圖的長程工程里依然不夠用。
它也會犯低級錯誤。 裁一張人物頭像時裁錯了位置,要靠生成一張帶網格坐標的參考圖重新定位才修對。日志里它自己寫下的教訓是目測容易錯,最好讓用戶確認。
內容區里有一處小 bug 。 導航欄一個 tooltip 的文案把一個日文詞寫成了半日半中的混排。全站唯一一處,因為藏在鼠標懸停提示里,從頭到尾沒被看見,后來迭代的時候他自己發現了
貴。K3 的確是貴,項目測到這里沒繼續優化是因為額度用完了,兩天就用完了基礎訂閱的所有額度,也就是說這項目成本一共 19 刀(一瞬間不知道是貴還是便宜)
也就是說這份產物是經過人類協作的結果,并不是一次生成的證據。它證明的是 K3 在有人引導、反復迭代下能達到什么程度。至于同一句提示詞重復提交三次能不能穩定出好東西,那是人類該解決的自我幻覺問題。

07
回到開頭那句:約束才是威力的本源。密度不來自總量,來自被秩序化的程度。
整個 K3 用下來確實非常驚艷,特別是在前端能力上,如果半年之前我想要做出這樣的效果是非常費勁的。中途我用同樣的提示詞給 Fable 5 試了一下,這是僅僅一輪效果的輸出,說實話已經非常棒了:

不管是 K3,還是 Fable 5 ,模型的能力確實越來越強,作品的天花板其實越來越靠近使用它的用戶。
最關鍵的是用戶到底想要什么,如果說作為人類的我們也有屬于自己的注意力模型,那今天的重點肯定不在提示詞寫的多漂亮,而是我能不能想清楚我追求的是什么。
這次僅僅二十多輪的迭代,如果我把所有提示詞整理出來,你可能會非常失望,因為真的沒有在提示詞上花太多功夫,每一輪都是很簡單甚至粗糙的表達,但 K3 確實能理解并且很好的執行,甚至有很多很多驚喜的地方受制于篇幅限制不方便分享了。

(該項目所有我發出去的提示詞合集)
做完這個網頁之后我越發喜歡這顆丸子,也越發喜歡 AI 了。它的威力從來不取決于你手里有多少能量,取決于你到底怎么控制它。這句話對模型的工程思路成立,對用它的人大概也成立。
https://chaos-naruto.kimi.page/index.html 項目鏈接,歡迎體驗。(彩蛋:按數字 123 可以切換螺旋丸狀態)


上車,帶你看遍全球 AI 頂會精華
可獨家暢覽:
專家演講PPT
大會報告全文
熱門論文解讀
學術新星訪談

掃描上方二維碼
或點擊「閱讀原文」關注專區。
雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知。