小米版 Claude Code 正式發布,這次開源真的夠猛。

大家好,我是二哥呀。

MiMo Code 0.1 版本正式發布,並採用 MIT 授權協議正式開源。支援:

  • MiMo Auto(限時免費),想薅 token 的小夥伴請把握
  • 小米 MiMo 平台 OAuth 登入
  • 從 Claude Code 匯入,一鍵遷移既有驗證資訊
  • 自訂 Provider,可新增任意相容 OpenAI 的 API

安裝方式非常簡單,一行指令搞定:curl -fsSL https://mimo.xiaomi.com/install | bash

這個安裝介面的顏值做得還挺高,不得不說,兄弟姊妹們,小米在外觀設計這方面確實有一套。

內部整合了 https://ai-sdk.dev/ 的 SDK,支援多種模型和平台的無縫對接。還有 https://models.dev/ 的模型庫,提供豐富的預訓練模型選擇。

01、安裝和上手

官方說啟動方式非常簡單,直接 mimo 就行,但實際體驗下來,這一塊做得還不夠好,我這邊直接報錯了。

好在 Warp 提供了預設的 Agent 服務,照著提示修好就好。

也給大家看一下解決方案。

就是重新執行一次 source,讓環境變數生效。或者新開一個終端機。

好傢伙,開屏還有流星劃過。

輸入 /connect 我們連一下服務商。

為了方便,我們就選擇 auto,這樣可以免登入。

順手再配一下 DeepSeek V4 吧,同樣執行 /connect,選擇 DeepSeek 供應商,然後輸入 API Key,再選擇要接入的模型即可。

02、Harness 架構總覽

整體的 Harness 做得還是很全面的,在計算、記憶、進化上下了很大功夫。

主要解決了兩個問題。

第一,由於上下文視窗終將會被耗盡,所以除了要做必要的摘要壓縮,還要能在檢索和儲存方面做得更好,讓 Agent 能夠更智慧地持久化寫入與召回關鍵資訊。

第二,由於模型的指令遵循會隨著輸入長度增加而變差,所以需要透過必要的機制來提升 Agent 的指令遵循能力,確保它在長對話中的表現。

03、替 PaiCLI 做宣傳頁

我們的第一個任務是:

為我們的 PaiCLI 做一個宣傳頁,參考 mimo.xiaomi.com/mimocode

來看看 MiMo Code 的表現。

很可惜,先用了 Web fetch,沒拿到結果,然後又準備用 CDP,結果還是沒拿到。

那我們必須上點家法了。

讓 MiMo Code 先安裝一下 web-access 這個 Skill。

安裝一下 github.com/eze-is/web-… 這個 Skills,然後你就能取得網頁了。

從輸出上能看到,使用了 Claude Code 的預設目錄。

照理說,我之前在 Claude Code 裡安裝過了,但不知道為什麼還需要重新安裝。

不管了。

給權限。

可以看到這次 CDP 代理已經啟動了。

繼續給權限。

這次能取得頁面內容了。

搞清楚了網站的設計風格:淺色暖調背景、極簡排版、PingFang SC 字體、終端機安裝指令。

開始重新設計 PaiCLI 宣傳頁。

等一下,看看 MiMo Code 的表現。

搞定了,我們來打開看看效果,整體風格確實還不錯。

MiMo Code 還支援執行期間新增指令排隊。

完工後我們直接配置個子網域,大家可以直接造訪體驗一下。

paicli.paicoding.com/

04、用算力換可靠性

前面提到了 MiMo Code 圍繞計算、記憶、進化三個主題設計 Harness,接下來逐個拆解。

先看計算。

一個程式設計 Agent 的基本結構,是把語言模型放進一個執行時中循環呼叫,模型負責推理和決策,執行時負責管理工具、持久化狀態、組裝每一輪的輸入。模型本身是無狀態的,每次呼叫都從空白開始,所有連續性都由執行時提供。

對於短任務(10 輪以內),這個結構沒問題,把完整對話歷史傳給模型就行。但當任務規模達到幾十步甚至上百步時,每一步的錯誤率會被累積放大,而 Agent 在長程執行中又缺乏外部糾正訊號。

MiMo Code 的思路,是在不同粒度上投入額外的計算來換取可靠性。

Max Mode

Max Mode 是 MiMo Code 最有意思的一個設計。

每一輪決策時,它會平行生成 N 個候選方案(預設 N=5),每個候選獨立完成推理和工具呼叫規劃,但不實際執行。然後由同一個模型作為 judge,比對所有候選的推理過程和行動計畫,選出最優的一個執行。

預設使用 temperature=1 進行 5 次獨立取樣,幾乎不會產出相同結果。如果多個候選方案恰好指向同一個方向,這本身就表示該方向的置信度高;而當候選之間差異較大時,由低溫度的 judge 從中選出最穩健的方案,比依賴單次取樣更可靠。

在 SWE-Bench Pro 上,Max Mode 相較於單次取樣提升了 10–20%,代價是約 4 到 5 倍的 token 消耗。這個代價不小,但對於那些一步走錯全盤皆輸的長任務來說,值得。

目前 Max Mode 只是實驗性功能,需要手動設定開啟。MiMo Code 的設定檔路徑是專案級 .mimocode/mimocode.json 或全域 ~/.config/mimocode/mimocode.json,在其中把 experimental.maxMode 設為 true 即可。

Goal

Max Mode 解決的是「做對」,Goal 解決的是「做完」。

長任務中有一種非常常見的失敗模式,Agent 在後續輪次看到之前已有的進展,就傾向於提前宣稱「完成了」,或者反過來向使用者提問。

Goal 的機制是。

使用者先設定一個自然語言描述的停止條件,例如「所有測試通過且程式碼已提交」。Agent 每次嘗試終止時,系統會自動發起一次獨立的模型呼叫來審查完整對話歷史,判斷條件是否真的滿足。如果未滿足,就把具體差距回饋給 Agent,讓它繼續做;如果確認無法完成,則判定為不可能並退出。

這個驗證者不參與實際工作,因此不會對 Agent 已完成的部分產生認同偏差。它每次拿到的上下文都和 Agent 完全相同,包括工具的實際輸出。實際執行中,誤攔比漏放更常見,整體死循環機率小於 0.5%,到達上限後會自動退出。

Max Mode 是平行維度,在同一步花 N 倍算力選最優;Goal 是串行維度,在同一個任務上做更長的自我檢查和執行。

兩者可以同時啟用。

Dynamic Workflow

當任務規模夠大時,比如將整個專案從一種語言遷移到另一種語言,需要同時協調幾十甚至上百個平行工作單元,逐輪的工具呼叫就不夠用了。

傳統的做法是把流程寫進 Skill 檔,用自然語言告訴模型「先做 A,再做 B,如果 C 就做 D」。

這在簡單場景下能用,但在複雜流程中會系統性失效,上下文壓縮可能吞掉步驟、模型可能跳過某些環節、分支和重試邏輯靠模型判斷而非程式碼保證、同一流程兩次執行路徑不同。

問題的本質在於,編排邏輯是以自然語言存在,而自然語言是模糊的、可遺忘的、不可驗證的。

Dynamic Workflow 把編排邏輯變成了程式碼。

主 Agent 會產生一段 JavaScript 腳本,在隔離沙箱中確定性執行。

腳本透過 agent() 派出 Sub-agent,透過 parallel()pipeline() 控制並行。

MiMo Code 的實作相容了 Anthropic Dynamic Workflow 的核心語義,並在此基礎上做了幾項擴充。

  • workflow() 允許腳本呼叫其他腳本,使編排邏輯可以重用與組合;
  • 每個 agent() 呼叫的結果會同步落盤,程序中斷後可從日誌恢復而不是從頭重跑;沙箱內可直接讀寫檔案。

換個角度來看,Skill 是用自然語言寫的 SOP,Workflow 是用程式碼寫的 SOP。

05、讓上下文無限延伸

把會話想像成一串從左到右排列的對話輪次。

視窗是有上限的,輪次會不斷累積,視窗最終會被填滿。如果不介入,會話到達上限時要麼結束,要麼悄悄退化。

MiMo Code 的做法,是在視窗到達上限之前的幾個固定位置介入,這些位置被稱為 checkpoint。

每個 checkpoint 會派出一個獨立的 writer Sub-agent,讀取所有對話,將結構化狀態寫入磁碟。主 Agent 繼續工作,writer 並行執行,互不干擾。

當視窗接近上限時,執行一次 rebuild,切斷目前視窗,開啟新視窗,並用已持久化的檔案作為種子重建上下文。

主 Agent 在新視窗中醒來後可以繼續工作。

一段被 checkpoint 打過點、最後以 rebuild 收尾的對話輪次序列,就是一個 cycle。Cycle 沒有數量上限,每一個 cycle 都受限於物理視窗大小,但邏輯會話是 cycle 的鏈,而那條鏈沒有最大長度。

四層記憶

Writer 不只寫一個檔案,它維護一個分層的記憶體系,每一層有不同的生命週期。

  • Session 記憶(checkpoint.md),只在目前邏輯會話內存活,記錄這次會話的完整工作狀態
  • Project 記憶(MEMORY.md),專案級持久知識庫,保存架構決策、使用者規則、反覆驗證過的技術事實
  • Global 記憶,使用者級偏好,跨專案生效
  • History,每個會話的完整 SQLite 軌跡,每條訊息、每次工具呼叫原文儲存,不做索引。當結構化記憶中找不到某個細節時,Agent 會透過 history 工具回溯到原始紀錄

主 Agent 可以隨時往裡面追加零散發現,writer 則在每次 checkpoint 時讀取它,將內容路由到對應的結構化欄位,然後清空。

相當於給主 Agent 一個「便條本」,主 Agent 不需要操心資訊該放在哪個結構化欄位裡,只管隨手記下來,交給 writer 去分揀。

ending

這裡一定要誇一下 OpenCode。

MiMo Code 正是基於 OpenCode 建構的,保留了幾乎全部核心能力(多 Provider、TUI、LSP、MCP、外掛)。

並在此基礎上建構了持久化記憶、智慧上下文管理、子智能體編排、目標驅動的自主迴圈、Compose 工作流,以及透過 dream/distill 實現的自我進化。

這或許就是開源的意義,站在巨人的肩膀上,做出更有價值的東西來。

我們下期見。


原文出處:https://juejin.cn/post/7650451521307770923


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝12   ❤️1
423
🥈
我愛JS
1
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登