一行「觀察、推斷、未知」先被寫進了規範:rea 把「模型別瞎編」做成了協議
從掘金一篇拆解 27 萬 Star 逆向工程 MCP 專案 rea 的長文看起,觀察「模型不準瞎編」如何從提示詞被設計成協議層的硬契約。
科技 設計評論 約 5 分鐘閱讀
回顧 2026 年 10 月 16 日,掘金作者王若風發布了一篇長文,拆解當時在 GitHub 趨勢榜上持續霸榜的開源專案 rea(npm 套件名 rea-agents)。文章給出的數字相當驚人:從一個月前的四千五百多 Star,到四天破兩萬,再到近二十八萬 Star、Fork 破七萬、npm 週下載量突破二十三萬。一個逆向工程工具能長到這個規模,理由不只在功能,而在它處理了一件多數同類專案迴避的事:把模型幻覺從口頭勸說,變成介面上可核對的結構。
先看那個讓人吐血的畫面
文章開頭給了一個具體場景。你想弄清楚 macOS 備忘錄的本地全文搜尋怎麼實作,把任務丟給 Agent。幾十秒後它交回幾百行反編譯偽代碼,函數名工整、控制流清晰,連錯誤處理分支都補得頭頭是道。等你把二進制拖進 Hopper 或 Ghidra,照著它給的記憶體位址逐條對照組合語言,會發現最關鍵的幾個解密跳轉和偏移量在真實檔案裡根本不存在。
這是逆向工程與一般寫代碼場景的根本差異。寫代碼時模型胡說,代價是編譯報錯或單測變紅;逆向時一個偏移量錯了、一條交叉引用是編造的,後面幾個小時順藤摸瓜的推導全部作廢。錯誤不會被工具鏈接住,只會被你的時間吸收掉。
它不做反編譯,做的是排版
rea 用 TypeScript 寫成,是一個 MCP(Model Context Protocol)伺服器兼 CLI。依文章所述,它自己完全不做反編譯:原生二進制交給 Hopper、Ghidra、IDA Pro,安卓 APK 交給 JADX,ELF 記憶體布局交給 pwntools,固件解包交給 Binwalk 與 Unblob,抓包交給 mitmproxy。rea 站在這十幾種異構引擎之上,做調度編排、格式歸一化與證據封裝三件事,再把帶著證據鏈的結果交給 Claude Code、Cursor 或 Codex。
這個定位本身就是一種設計取捨。拿開源反編譯引擎套一層 MCP 殼的專案不少,多數停在「調一下 CLI、把大段文本吐給模型」的階段。rea 的差別在於它把「吐什麼、怎麼吐、吐的東西可信到什麼程度」當成介面問題來處理,這與我們先前討論過的上下文長度是一套被設計出來的介面屬於同一類思路:模型能用多少、能信什麼,是由工程師排好版的,不是模型自己決定的。
最值得看的細節:AGENTS.md 裡的分類條款
文章拆到倉庫結構時,指出了兩個頗有設計感的細節。
第一是根目錄那份長篇 AGENTS.md。乍看像 Contributor 指南,細讀才發現是專供 AI 編碼 Agent 閱讀的工程規範,條款寫得相當苛刻,其中兩條被文章直接引用:「工具執行結果必須顯式區分觀察(Observation)、推斷(Inference)與未知(Unknown)」;「Provider 專有協定與髒邏輯嚴禁洩露至 Domain 與 Application 層」。
前者是把知識的來源強制標籤化。一段輸出裡,哪些是引擎真的讀到的、哪些是模型推的、哪些根本沒答案,三者不得混在同一種語氣裡呈現。這件事對人類分析師是職業素養,對模型則必須變成格式約束,因為模型最擅長的恰恰是用同一種自信的語氣把三種東西縫在一起。
第二是 src/evaluation/ 目錄裡的 CodexAgentEval.ts 與 KnownAnswerEvaluation.ts,拿真實驗證集與會話轉錄,專門評測模型在使用 rea 自身工具時是否產生幻覺。把「防幻覺」做成可重複執行的測項,而不是寫在 README 裡的承諾,這是從文案層升級到工程層的差別。文章據此推測,這個專案本身與 AI 深度結對開發,作者對模型「一本正經胡說八道」有切身之痛。
十三類輸入,一種輸出
官方 README 列出的開箱支援多達十三類:Mach-O 與 PE 原生二進制、離線 ELF、EVM 字節碼、崩潰轉儲、JavaScript 與 Electron 打包應用、HAR 抓包、.NET 程式集、安卓 APK、硬體固件映像、安裝包資源、執行時行程行為,甚至涵蓋 Ghidra 的十六位 DOS 實模式分析。
支援面這麼寬,真正的設計難題在歸一化:Hopper 的輸出、JADX 的輸出、mitmproxy 的輸出,原生格式各不相同,髒資料程度也不同。rea 的解法是洋蔥式分層加異構 Bridge,讓引擎專屬的協議細節止步於外層,進到 Domain 層的東西已經是統一格式、帶證據標記的結構化結果。對上層模型來說,它看到的介面只有一種。
收束
這篇文章的價值不在教會讀者逆向,而在提供一份架構樣本:當一個領域容不下任何編造(一位址、一引用都不能錯),「誠實」就必須被設計成協議的形狀。rea 的做法是把知識分級標籤、把證據隨結果封裝、把幻覺防制作成測項。多數 Agent 工具還在比誰的指令包更花俏,rea 示範的是另一條路:把「我不知道」變成介面上合法且顯眼的一種輸出。對任何要為專業領域設計 Agent 工具的人,這份樣本值得排在閱讀清單的前面。
主題 介面與互動設計
標籤 #reamcp設計、#證據協議介面、#agent工具架構