Google發(fā)布的這個Code Wiki項目可以在代碼倉庫之上構(gòu)建動態(tài)知識層的工具,或者說可以"自動生成文檔"。
![]()
第一層是結(jié)構(gòu)解析:Code Wiki使用Tree-sitter對代碼進(jìn)行語法樹分析,將源碼拆解成類、函數(shù)、方法、導(dǎo)入語句和依賴項。Tree-sitter是一個增量解析庫支持多種編程語言,能夠生成抽象語法樹(AST)。這比純文本處理要精確得多,因為系統(tǒng)真正"看懂"了代碼的語法結(jié)構(gòu)而不是把代碼當(dāng)成字符串來處理。
第二層是知識圖譜構(gòu)建:解析出的代碼組件被轉(zhuǎn)換成圖結(jié)構(gòu):函數(shù)、模塊、服務(wù)作為節(jié)點,調(diào)用關(guān)系、繼承關(guān)系、依賴關(guān)系作為邊。這樣圖譜可以捕捉代碼庫中各部分之間的連接和上下文,類似的技術(shù)在Neo4j和Memgraph等圖數(shù)據(jù)庫中已經(jīng)有成熟應(yīng)用。
第三層是代理式RAG檢索:這是整個系統(tǒng)的關(guān)鍵所在。傳統(tǒng)的RAG(檢索增強生成)通常只做語義向量搜索,但Code Wiki采用了混合策略,當(dāng)問題涉及概念理解時使用語義檢索;當(dāng)問題涉及依賴關(guān)系時則遍歷知識圖譜。比如問"用戶認(rèn)證是怎么實現(xiàn)的"就會觸發(fā)語義搜索;而問"哪些服務(wù)依賴用戶數(shù)據(jù)庫"則會激活圖遍歷。這種動態(tài)選擇讓回答更加精準(zhǔn)。
Gemini驅(qū)動的問答
每個Code Wiki頁面都集成了一個對話式AI助手,這肯定是基于Gemini模型的。用戶可以直接用自然語言提問:速率限制在哪里實現(xiàn)的?這個API失敗時會發(fā)生什么?身份驗證流程是怎樣的?
與通用AI助手不同,這個問答系統(tǒng)的回復(fù)基于當(dāng)前代碼庫的實際結(jié)構(gòu)。答案會附帶代碼引用和文件鏈接,指向具體的實現(xiàn)位置。這避免了大模型常見的"一本正經(jīng)胡說八道"問題,所有回答都有代碼事實作為支撐。
對于需要快速熟悉陌生代碼庫的場景,這種交互方式比傳統(tǒng)的grep+閱讀源碼要高效不少。
可視化與導(dǎo)航
Code Wiki生成的不只是文字說明。系統(tǒng)會自動創(chuàng)建架構(gòu)圖、類圖、序列圖等可視化元素,并且這些圖表會隨著代碼變化而更新。
導(dǎo)航設(shè)計也很有意思,可以從高層的模塊概覽一路點擊到具體的函數(shù)實現(xiàn),在不同抽象層級之間自由切換。這和傳統(tǒng)文檔那種線性閱讀體驗完全不同,這個方式更像是在地圖上探索一座城市,而不是翻閱一本按章節(jié)組織的手冊。
總結(jié)
目前Code Wiki的公開預(yù)覽版只支持GitHub上的公開倉庫,這對于學(xué)習(xí)和研究開源項目來說已經(jīng)足夠有價值。
不過它對于結(jié)構(gòu)混亂的代碼庫,生成的圖表可能難以閱讀不過換個角度看這也算是代碼質(zhì)量的一個側(cè)面指標(biāo):如果Code Wiki生成的架構(gòu)圖都看不懂,說明代碼本身可能需要重構(gòu)了。
Code Wiki的發(fā)布釋放了一個明確信號:代碼理解正在成為AI技術(shù)的核心應(yīng)用場景之一,隨著這類工具的成熟未來的開發(fā)團(tuán)隊可能會像依賴版本控制一樣依賴智能文檔系統(tǒng)。
地址:https://avoid.overfit.cn/post/6a2e85c6def145eeb674a9114c7af4e5
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.