2026年10月5日,掘金作者「狼爺」發表了一篇長文,記錄自己用純 Java 從零打造一個名為 JavaManus 的 AI Agent 框架。文章後來被社羣反覆轉討,原因不難理解:大家習慣了拿現成的框架來組裝,而他選擇把最底層的那鍋高湯,自己熬。
這件事放在廚房裡,你一定不陌生。
外食喫久了,總會有人開始想:醬油自己做看看、高湯自己熬看看、麵條自己桿看看。不是因為外面做得不好,而是因為你終於想知道,這碗東西到底是怎麼來的。
為什麼不用別人熬好的湯
原文裡有個很實際的出發點。AI Agent 的生態向來以 Python 為主流,但企業的核心業務系統很多是 Java 寫的。硬把一套 Python 的東西塞進 Java 的廚房,等於隔壁店做好了菜,你還要打包、運送、拆封、加熱,每一趟都是開銷。
於是 JavaManus 的目標很樸素:用純 Java 做一個輕量、可控的 Agent,直接長在 Spring Boot 這套大多數 Java 工程師天天開火的爐臺上,想換哪家的模型、想加什麼工具,都不用砸掉重建。
整個專案不到 30 個 Java 檔案。這個數字讓我想起老家那本薄薄的手抄食譜,頁數不多,但每一頁都是真的會用到的菜。
這和先前那篇聊半成品料理與預留調味位的文章剛好是一體兩面:有人替你把湯熬好,也有人堅持自己來,兩種選擇各有各的道理。
分層備料,一層只管一件事
文章用相當篇幅拆解架構。翻成廚房的話,是這樣的:這間廚房不靠一個全能主廚,而是把工作拆成幾層,每層只做自己那件事。
最底層是純粹的狀態機,管火候、管步數、管有沒有燒乾,不管菜是誰點的。中間那層定義節奏:想一步、做一步,也就是技術圈說的 ReAct 循環。再上面一層才處理工具,等於備料檯上的刀、鍋鏟、量匙。最上面的 ManusAgent 只負責一件事,把今天要用的工具擺上檯面。
原料是 Spring AI 1.1.0 搭配 Spring Boot 3.4,火源預設用火山引擎的 Ark。味道不對想換別家?換。今天不想用 Python 那套工具?換。核心那鍋湯不用動。
這種備料方式,跟中央廚房的權限與火候其實是同一種思路:好喫的關鍵常常不在祕方,在於每個位置的人只管好自己的那一勺鹽。
熬湯時踩到的坑
長文裡最生動的部分,是作者分享的實際踩坑經驗,其中一個是讓超時機制完全失效的隱蔽死鍋。翻成廚房語言大概是:你設了計時器,以為十五分鐘後一定會響,結果爐子上的某個鍋蓋卡住了,湯在裡面靜靜地滾,計時器永遠等不到那一刻。
這種坑最麻煩的地方在於它安靜。不是燒焦的焦味先竄出來,也不是油爆的聲音嚇你一跳,就是沒有動靜。做菜的人多半遇過:一切看起來都在進行中,但其實早就停了。
會把這種細節老老實實寫進文章裡的人,通常是真的站在爐子前面守過的。
回到自己家的爐臺
這篇文章吸引人的地方,或許不是框架本身多厲害,而是那個「從零開始」的姿態。市場上永遠有更快的方式,料理包、中央廚房、外送平臺,但偶爾在某個週末,你還是會想買一副骨頭、拍一塊薑,讓整間廚房慢慢充滿那個需要三四個小時才熬得出來的味道。
JavaManus 告訴你的,就是這件老事:東西是別人做的好用,但親手做過一次之後,你對「好用」兩個字的理解,會完全不一樣。
下次走進廚房,不管是真的爐臺還是你手上的那個專案,可以問自己一句:今天,有沒有哪鍋湯,值得自己熬?