開發者們總有一種近乎偏執的潔癖,認為程式碼應當是輕盈的、優雅的,像是一行行流動的詩。但在 Anthropic 最近揭露的內部工程實踐中,這首詩顯然重得讓人有些喘不過氣。當一個 Monorepo 的主分支歷史紀錄衝破 100 GB,壓縮後的作業副本依然超過 25 GB 時,我們討論的已經不再是傳統意義上的版本控制,而是一場關於資料重力的拉鋸戰。這種體量並非源於程式碼本身的邏輯堆砌,更多的是因為在 Claude 的訓練與部署流程中,模型權重、評測數據集以及那些昂貴的 Prompt 輸出被當作了「源碼」的一部分。
這種做法在老派工程師眼中簡直是異端。Git 本意是為了追蹤文字變動,而不是讓你把整個圖書館搬進去。然而,當我們觀察 Claude 3.5 Sonnet 這種量級的模型迭代時,會發現程式碼與數據的邊界正在模糊。Anthropic 選擇讓 Git 承載這些沈重的資產,本質上是為了追求一種極致的「可追溯性」。如果每一次模型表現的波動都能精確對應到某次 Commit 裡的 Prompt 調整,那麼 100 GB 的代價似乎也就成了某種必要的惡。這讓我想起那些在音樂會上瘋狂錄影的觀眾,每個人都想擁有自己的備份,最終導致了數據的無限增殖,只是 Anthropic 錄下的是神經網路的跳動。
在處理這種規模的儲存與檢索時,ChatGPT 背後的 OpenAI 顯然走了另一條路。雖然他們從不透明揭露內部的版本控制細節,但從其 API 的更新頻率與 Playground 的設計邏輯來看,OpenAI 更傾向於將模型資產與業務邏輯進行解耦。ChatGPT 在處理超長上下文或大規模 Function Calling 時的穩定性,某種程度上反映了後端基礎架構的高效路由。相較於 DeepSeek 4.1 Flash,Claude 在處理大規模單一倉庫時展現出的工程韌性顯得更為激進。當你在 Claude 的介面中感受到那種細膩的邏輯推理時,背後支撐它的是一個連 Shallow Clone 都得小心翼翼的巨大引擎。
這種技術路徑的選擇,也引發了關於「Prompt 即源碼」的深刻討論。有人提議應當只提交 Prompt,而將 AI 生成的程式碼視為一種昂貴的 Build Output。這聽起來很美,但在實際操作中,Gemini 在處理多模態輸入與輸出的一致性上,往往會因為這種分離而產生偏差。Google 的做法是利用其深厚的基礎設施底蘊,將版本控制隱藏在更深層的分散式文件系統之下。Gemini 的優勢在於它能無縫接軌 Google Cloud 的資源,這讓它在面對類似 Anthropic 遇到的 100 GB 難題時,能有更多緩衝空間。
與此同時,Grok 在馬斯克的工程哲學指導下,似乎更崇尚一種原始的、高頻的迭代速度。但在版本控制的嚴謹性上,Grok 目前還沒展現出像 Claude 那樣對「歷史真相」的執著。對於一家志在構建安全 AI 的公司來說,Anthropic 這種看似笨重的做法,其實是在為未來的審計與對齊做準備。相較於 DeepSeek 4.1 Flash,Claude 寧願承受 Git 歷史紀錄爆炸的風險,也要確保每一行生成的邏輯都有跡可循。
這就產生了一個有趣的矛盾:我們正在用最先進的 AI 技術,去填滿最古老的 Git 容器。當 Git 的 Sparse Checkout 與 Promisor Remotes 成為開發者的必修課,而不是選修課時,這是否意味著現有的版本控制工具已經走到了盡頭?當我們習慣了把幾十 GB 的數據當作「一次提交」時,我們是在管理知識,還是在單純地堆砌數位垃圾?
如果有一天,模型生成的代碼量超過了人類手工撰寫的百倍、千倍,而這些代碼又必須被保存在版本控制中以確保安全,我們是否還能依賴這種基於快照的邏輯?或者,我們終將接受一種新的常態:源碼不再是人寫的幾行文字,而是那幾十 GB 永遠無法被人類直觀理解的權重與特徵值。當那一天到來,我們該如何定義「一次優雅的重構」?