滿足個(gè)性化定制需求;提供優(yōu)質(zhì)服務(wù),追求卓越只為持續(xù)提升客戶滿意度與產(chǎn)品價(jià)值。
?從設(shè)計(jì)、編碼到測(cè)試、部署,甚至是運(yùn)維……軟件開發(fā)的整個(gè)流程,可以通通交給AI了!??
一款覆蓋軟件開發(fā)全生命周期的端到端AI智能助手,讓分散的軟件開發(fā)操作變得集成化、智能化。??
這款A(yù)I助手專門針對(duì)開發(fā)領(lǐng)域設(shè)計(jì),避免了通用大模型不可靠、信息不及時(shí)、領(lǐng)域任務(wù)不完善等問題。??
這個(gè)AI助手名為DevOps-ChatBot,由螞蟻Codefuse項(xiàng)目組研發(fā),安裝過程簡(jiǎn)單快速,還可通過docker完成一鍵部署。??
DevOps-ChatBot具體都有哪些功能,表現(xiàn)又是如何,請(qǐng)看作者投稿。??
解決通用大模型缺陷??
隨著ChatGPT等通用大模型以及各類垂直領(lǐng)域大模型的出現(xiàn),各個(gè)領(lǐng)域的產(chǎn)品交互模式、用戶信息獲取模式都在逐步發(fā)生改變。??
但DevOps對(duì)于事實(shí)的準(zhǔn)確性、信息的及時(shí)性、問題的復(fù)雜性、數(shù)據(jù)的安全性要求都比較高,通用大模型生成內(nèi)容不可靠、信息不及時(shí)、領(lǐng)域任務(wù)不完善的問題始終存在。??
于是,Codefuse團(tuán)隊(duì)發(fā)起并開源DevOps-ChatBot端到端AI智能助手,專為軟件開發(fā)的全生命周期而設(shè)計(jì):??
通過DevOps垂類知識(shí)庫(kù)+知識(shí)圖譜增強(qiáng)+SandBox執(zhí)行環(huán)境等技術(shù)來保障生成內(nèi)容的準(zhǔn)確性、及時(shí)性并讓用戶交互修改代碼編譯執(zhí)行,確保答案的可靠性;??
通過靜態(tài)分析技術(shù)+RAG檢索增強(qiáng)生成等技術(shù)來讓大模型感知上下文,實(shí)現(xiàn)代碼庫(kù)級(jí)別的組件理解、倉(cāng)庫(kù)項(xiàng)目級(jí)的代碼文件修改、生成,不單單只是函數(shù)片段級(jí)的代碼補(bǔ)齊;??
通過完善鏈路級(jí)的Multi-Agent調(diào)度設(shè)計(jì)、協(xié)同知識(shí)庫(kù)、代碼庫(kù)、工具庫(kù)、沙盒環(huán)境,來讓大模型可以實(shí)現(xiàn)DevOps領(lǐng)域復(fù)雜多步驟的任務(wù);??
通過DevOps領(lǐng)域?qū)俚念I(lǐng)域模型和評(píng)測(cè)數(shù)據(jù)構(gòu)建支持私有化部署來保障數(shù)據(jù)的安全性,以及特定任務(wù)的高可用性。??
Codefuse團(tuán)隊(duì)期望通過本項(xiàng)目逐步改變?cè)械拈_發(fā)運(yùn)維習(xí)慣,從各處資料查詢、獨(dú)立分散平臺(tái)操作的傳統(tǒng)開發(fā)運(yùn)維模式轉(zhuǎn)變到大模型問答的智能化開發(fā)運(yùn)維模式,讓“天下沒有難做的Coder”。??
五大核心模塊??
DevOps-ChatBot項(xiàng)目整體架構(gòu)簡(jiǎn)圖如下:??
具體來說,它包含了以下9個(gè)功能模塊:??
??MultiSourceWebCrawl:網(wǎng)絡(luò)爬蟲,提供對(duì)指定url爬取相關(guān)信息的能力??
???DataProcess:數(shù)據(jù)處理模塊,提供文檔加載器、數(shù)據(jù)清洗、文本切分的功能,處理和整合多源格式的數(shù)據(jù)文檔??
???TextEmbeddingIndex:文檔分析核心,通過文檔上傳即可實(shí)現(xiàn)文檔檢索??
??VectorDatabase&GraphDatabase:向量數(shù)據(jù)庫(kù)和圖數(shù)據(jù)庫(kù),用于數(shù)據(jù)管理??
??Multi-AgentScheduleCore:多智能體調(diào)度核心,通過簡(jiǎn)易配置即可構(gòu)建所需交互智能體??
??PromptControl:Prompt控制與管理模塊,定義Agent的上下文管理??
??SandBox:沙盒模塊,提供代碼編譯執(zhí)行和動(dòng)作執(zhí)行的環(huán)境??
??LLM:智能體大腦,可支持多種開源模型和LLM接口范圍??
???APIManagement:API管理組件,快速兼容相關(guān)開源組件和運(yùn)維平臺(tái)??
除了上述功能模塊的組裝協(xié)同,DevOps-ChatBot項(xiàng)目還具有以下核心差異技術(shù)和功能點(diǎn):??
智能調(diào)度核心:體系鏈路完善的調(diào)度核心、多模式一鍵配置??
代碼整庫(kù)分析:倉(cāng)庫(kù)級(jí)代碼理解、項(xiàng)目文件級(jí)代碼編寫生成??
文檔分析增強(qiáng):文檔知識(shí)庫(kù)結(jié)合知識(shí)圖譜的檢索、推理增強(qiáng)??
垂類專屬知識(shí):DevOps專屬知識(shí)庫(kù)、垂類知識(shí)庫(kù)自助一鍵構(gòu)建??
垂類模型兼容:DevOps領(lǐng)域小模型、DevOps周邊平臺(tái)兼容??
智能調(diào)度核心??
在處理復(fù)雜問題時(shí),我們可以通過ReAct過程來選擇、調(diào)用和執(zhí)行工具反饋,實(shí)現(xiàn)多輪工具使用和多步驟執(zhí)行。??
但對(duì)于更復(fù)雜的場(chǎng)景,例如復(fù)雜代碼的開發(fā),單一LLMAgent難以勝任。??
研究團(tuán)隊(duì)希望構(gòu)建一個(gè)可擴(kuò)展、易于使用的多智能體(Multi-Agent)框架,通過簡(jiǎn)易的配置即可輔助完成日常辦公、數(shù)據(jù)分析、開發(fā)運(yùn)維等各種通用任務(wù)。??
本項(xiàng)目的多智能體框架汲取兼容了多個(gè)框架的優(yōu)秀設(shè)計(jì),比如metaGPT中的消息池(messagepool)、autogen中的代理選擇器(agentselector)等。??
DevOps-ChatBot中多智能體框架的核心要素包括了以下6個(gè)方面:??
智能體信息交互(AgentCommunication):Agent之間有效的信息交流對(duì)于上下文管理以及問答效率提升至關(guān)重要。包含兩種通信模式:簡(jiǎn)潔直觀易于理解的鏈?zhǔn)綄?duì)話、借鑒metaGPT的消息池框架;??
標(biāo)準(zhǔn)操作過程(StandardOperationProcess,SOP):定義智能體的輸入和輸出范圍和定義SOP標(biāo)識(shí),如Tool、Planning、Coding、Answering、finished等,對(duì)LLM的生成結(jié)果進(jìn)行標(biāo)準(zhǔn)化解析和處理;??
計(jì)劃與執(zhí)行器(PlanandExecutor):增加大模型的工具使用、智能體調(diào)度、代碼的生成;??
長(zhǎng)-短期記憶管理(Long-shorttermmemoryManagement):為了模擬人類團(tuán)隊(duì)協(xié)作過程,增加一個(gè)專門負(fù)責(zé)內(nèi)容總結(jié)(類似于會(huì)議助理)的Agent,對(duì)長(zhǎng)期記憶總結(jié)并提取更有效的信息進(jìn)行傳遞;??
人-智能體交互(Human-agentinteraction):面對(duì)復(fù)雜場(chǎng)景,由人類介入智能體交互過程并提供反饋,使大模型能準(zhǔn)確理解人類的意圖,從而更有效地完成任務(wù);??
Prompt控制與管理(PromptControlandManagement):負(fù)責(zé)協(xié)調(diào)和管理智能體間的Prompt交互,提升系統(tǒng)的復(fù)雜性控制和交互效率。輸入和輸出采用Markdown結(jié)構(gòu)化設(shè)計(jì),實(shí)現(xiàn)清晰規(guī)范的結(jié)果展示,方便閱讀和解析。??
實(shí)際操作過程中,用戶可通過組合多個(gè)智能體來實(shí)現(xiàn)一個(gè)完整且復(fù)雜的項(xiàng)目上線場(chǎng)景(DevPhase),如需求鏈(CEO)、產(chǎn)品論證鏈(CPO、CFO、CTO)、工程組鏈(選擇者、開發(fā)者1~N)、部署鏈(開發(fā)者、部署者)等。??
代碼整庫(kù)分析??
現(xiàn)階段大模型主要用于代碼生成、修復(fù)以及組件理解的任務(wù),面臨以下挑戰(zhàn):??
代碼訓(xùn)練數(shù)據(jù)存在滯后性,頻繁更新的開源/私有倉(cāng)庫(kù)存在數(shù)據(jù)信息的不及時(shí)。??
大模型無法感知代碼上下文和代碼庫(kù)依賴結(jié)構(gòu)。??
研究團(tuán)隊(duì)歸納了開發(fā)中遇到的主要問題,從下圖中可以看到在開發(fā)的過程中,現(xiàn)有代碼庫(kù)、依賴包的理解,代碼檢索、元信息查詢等占用的時(shí)間更長(zhǎng):??
針對(duì)如上問題,團(tuán)隊(duì)通過程序分析獲取代碼的邏輯結(jié)構(gòu)并存入知識(shí)圖譜,然后通過RAG迭代查詢?cè)鰪?qiáng)獲取必要的上下文信息,又結(jié)合多智能體角色扮演,實(shí)現(xiàn)了大模型和代碼庫(kù)的有機(jī)結(jié)合。??
這一部分的整體框架如下:??
代碼結(jié)構(gòu)分析:針對(duì)代碼原文進(jìn)行清洗和去重來保留住有價(jià)值的代碼部分。然后通過靜態(tài)分析的手段,從代碼庫(kù)中挖掘到代碼之間的依賴圖,同時(shí)借助于大模型的理解能力來針對(duì)代碼進(jìn)行解讀,在生成的結(jié)構(gòu)化信息圖譜中作為重要的補(bǔ)充。??
代碼檢索生成:提供三種不同的檢索模式。Cypher檢索生成主要面向用戶對(duì)于代碼庫(kù)結(jié)構(gòu)的理解(比如查詢類的數(shù)量等需求),圖譜檢索主要面向用戶的問題含有具體的類和方法名的時(shí)候來檢索代碼。??
同時(shí),團(tuán)隊(duì)也在探索通過多智能體的模式,迭代搜索代碼倉(cāng)庫(kù)獲取上下文信息,同時(shí)由其他智能體來負(fù)責(zé)階段性提煉總結(jié)信息以及結(jié)果生成等其他任務(wù)。??
文檔分析增強(qiáng)??
大模型在涉及到專業(yè)領(lǐng)域知識(shí)問答(比如醫(yī)療、通訊)、私有知識(shí)問答(私域數(shù)據(jù)),容易出現(xiàn)幻覺導(dǎo)致生成的答案不可信。??
最直觀的解決方案是將特定/私有領(lǐng)域的數(shù)據(jù)進(jìn)行加訓(xùn)來增強(qiáng)模型知識(shí),但訓(xùn)練大模型的開銷巨大。??
于是研究團(tuán)隊(duì)選擇知識(shí)庫(kù)外掛的手段和檢索增強(qiáng)生成的方式,將與問題相關(guān)的數(shù)據(jù)從知識(shí)庫(kù)中檢索出來,作為額外知識(shí)輸入到大模型中,保障結(jié)果的可靠性&實(shí)時(shí)性,同時(shí)避免訓(xùn)練開銷。??
如何更精準(zhǔn)的搜索檢索,是本模塊核心要解決的問題,為此研究團(tuán)隊(duì)提出了這樣的架構(gòu):??
整個(gè)DocSearch含三種檢索鏈路,用戶可自行選擇檢索鏈路,也可以三個(gè)都選擇以獲取不同的結(jié)果。??
傳統(tǒng)的文檔向量數(shù)據(jù)庫(kù)查詢:文檔向量數(shù)據(jù)庫(kù)是當(dāng)前最主流的知識(shí)庫(kù)構(gòu)建方法。使用TextEmbedding模型對(duì)文檔進(jìn)行向量化并在向量數(shù)據(jù)庫(kù)中存儲(chǔ),結(jié)合上下文學(xué)習(xí)的成果,本項(xiàng)目可選擇不同的檢索策略抽取知識(shí)庫(kù)中相應(yīng)知識(shí)。??
知識(shí)圖譜查詢:本項(xiàng)目采用Nebula圖數(shù)據(jù)庫(kù)對(duì)知識(shí)圖譜進(jìn)行存儲(chǔ)和管理,支持導(dǎo)入現(xiàn)有知識(shí)圖譜進(jìn)行知識(shí)檢索;也支持通過大模型自動(dòng)抽取實(shí)體和關(guān)系,挖掘出數(shù)據(jù)中多種復(fù)雜關(guān)系。??
知識(shí)圖譜推理+向量數(shù)據(jù)查詢:本項(xiàng)目也提供兩者的融合搜索。先對(duì)每篇文檔提取標(biāo)簽,同時(shí)結(jié)合用戶提問建設(shè)圖譜中的相關(guān)標(biāo)簽。最后,基于標(biāo)簽集合在文檔向量數(shù)據(jù)庫(kù)中檢索出與原問題相關(guān)的文檔。??
知識(shí)庫(kù)構(gòu)建與DevOps知識(shí)庫(kù)??
如前文介紹,通過知識(shí)庫(kù)外掛和增強(qiáng)檢索生成的手段可以很好的解決專有/私域知識(shí)問答的問題,接下來的核心問題是如何更好的構(gòu)建知識(shí)庫(kù)。??
構(gòu)建知識(shí)庫(kù)時(shí)常常會(huì)面對(duì)以下問題:??
不同的數(shù)據(jù)源之間格式不一致、質(zhì)量參差不齊??
如何自動(dòng)化地識(shí)別和剔除錯(cuò)誤、重復(fù)或無關(guān)緊要的數(shù)據(jù)??
知識(shí)庫(kù)構(gòu)建需要依賴于專業(yè)知識(shí)??
知識(shí)庫(kù)需要定期更新,保持信息的準(zhǔn)確性和時(shí)效性??
基于此,研究團(tuán)隊(duì)提出了這樣的整體架構(gòu):??
爬蟲(Crawler):實(shí)現(xiàn)數(shù)據(jù)的搜集,保障數(shù)據(jù)更新的及時(shí)性;??
文檔加載器(Loader):實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)的導(dǎo)入,靈活應(yīng)對(duì)多樣化的數(shù)據(jù)需求;??
清洗過濾(FilterFunc):實(shí)現(xiàn)數(shù)據(jù)的過濾清洗,確保后續(xù)分析的準(zhǔn)確性和高效性;??
文本分析器(TextAnalyzer):實(shí)現(xiàn)對(duì)數(shù)據(jù)的智能化分析,將復(fù)雜的文本數(shù)據(jù)轉(zhuǎn)化為結(jié)構(gòu)化(包含知識(shí)圖譜)、易于理解的信息;??
管道(Pipeline):串聯(lián)整個(gè)過程,實(shí)現(xiàn)了數(shù)據(jù)輸入到清洗完畢輸出的端到端自動(dòng)化;??
研究團(tuán)隊(duì)接下來會(huì)注重于DevOps領(lǐng)域數(shù)據(jù)的收集和構(gòu)建,同時(shí)也期望為這條標(biāo)準(zhǔn)化的數(shù)據(jù)獲取、清洗能力&智能化處理流程為更多的私有知識(shí)庫(kù)構(gòu)建提供幫助。??
平臺(tái)與模型兼容??
隨著大型語言模型(LLM)的出現(xiàn),我們見證了問題解決方式的變革,比如智能客服系統(tǒng)從依賴小規(guī)模模型微調(diào)和固定規(guī)則轉(zhuǎn)向更為靈活的智能體交互。??
研究團(tuán)隊(duì)期望和周邊開源的DevOps平臺(tái)打通兼容,通過API的注冊(cè)、管理和執(zhí)行能夠?qū)崿F(xiàn)對(duì)話式交互驅(qū)動(dòng)完成各種特定任務(wù)(數(shù)據(jù)查詢、容器操作等)。??
為了能夠讓本項(xiàng)目快速兼容相關(guān)開源組件和運(yùn)維平臺(tái),我們通過python注冊(cè)模板BaseToolModel類,編寫Tool_name、Tool_description、ToolInputArgs、ToolOutputArgs、run等相關(guān)屬性和方法即可實(shí)現(xiàn)工具的快速接入:??
通過FastChat啟動(dòng)私有模型的推理服務(wù)或者其它Restful風(fēng)格的API,如Qwen2.0、文心一言等,即可完成注冊(cè)給到LLM進(jìn)行調(diào)度使用??
也可注冊(cè)螞蟻集團(tuán)相關(guān)開源項(xiàng)目和運(yùn)維平臺(tái)的API,實(shí)現(xiàn)LLM簡(jiǎn)單對(duì)話即可完成相關(guān)運(yùn)維操作??
目前已封裝工具清單如下:k-sgima異常檢測(cè)、代碼檢索、文檔檢索、duckduckgo搜索、百度ocr識(shí)別、股票信息查詢、天氣查詢、時(shí)區(qū)查詢。??
未來展望??
目前DevOps框架還處于初期,還有很多不完善的地方,接下來研究團(tuán)隊(duì)計(jì)劃在如下方面做核心演進(jìn):??
多智能體調(diào)度核心:自動(dòng)化構(gòu)建智能體鏈路??
文檔分析增強(qiáng):提供多種修正方式和知識(shí)圖譜檢索方式??
代碼整庫(kù)分析:細(xì)化代碼解析提取功能,豐富代碼圖譜schema??
知識(shí)庫(kù)構(gòu)建:構(gòu)建面向不同垂直領(lǐng)域的知識(shí)庫(kù)數(shù)據(jù)??
平臺(tái)&模型兼容:與相關(guān)開源項(xiàng)目和運(yùn)維平臺(tái)的API打通??
功能展示??
在這五大核心模塊的驅(qū)動(dòng)下,DevOps-ChatBot具有如下這些功能。??
首先是文本知識(shí)庫(kù)管理:??
文本載入、文本向量化服務(wù)、知識(shí)庫(kù)的向量檢索服務(wù)??
提供多個(gè)知識(shí)庫(kù)的創(chuàng)建、管理、下載等功能??
支持爬蟲進(jìn)行實(shí)時(shí)url內(nèi)容爬取功能??
除了文本知識(shí)庫(kù),DevOps-ChatBot還支持知識(shí)圖譜、代碼知識(shí)庫(kù)文件的上傳和管理。??
此外,研發(fā)團(tuán)隊(duì)還封裝了一些Agent場(chǎng)景,諸如chatPhase、docChatPhase、searchChatPhase、codeChatPhase等,可支撐知識(shí)庫(kù)問答、代碼問答、工具調(diào)用、代碼執(zhí)行等功能。??
除了應(yīng)用在DevOps當(dāng)中,DevOps-ChatBot在其他領(lǐng)域也是適用的!??
在多智能體的調(diào)度下,DevOps-ChatBot可以延伸出很多有意思的玩法。??
以下玩法可以通過本項(xiàng)目的模塊組裝構(gòu)建完成:??
代碼解釋器(CodeInterpreter)??
只要上傳一個(gè)數(shù)據(jù)文件,DevOps-ChatBot就會(huì)自動(dòng)進(jìn)行數(shù)據(jù)分析:??
工具使用??
例如:查詢某個(gè)服務(wù)器的基本時(shí)序,傳入到監(jiān)控工具中,并進(jìn)行分析??
智能股票分析(工具+代碼解釋器)??
用戶通過簡(jiǎn)單的自然語言查詢,就可以獲取特定股票的詳細(xì)信息,包括歷史股價(jià)圖表、市場(chǎng)表現(xiàn)和可能的市場(chǎng)走向。??
生成測(cè)試用例??
DevOps-ChatBot可以針對(duì)代碼庫(kù)中的某個(gè)方法生成測(cè)試用例。??
玩家拯救者(知識(shí)庫(kù)問答)??
除了這些應(yīng)用場(chǎng)景,DevOps-ChatBot還可以回答與具體的網(wǎng)絡(luò)游戲相關(guān)的問題。包含英雄信息、登場(chǎng)時(shí)間、所屬城邦等。??
例如:英雄聯(lián)盟的英雄關(guān)系知識(shí)圖譜??
OneMoreThing??
Codefuse團(tuán)隊(duì)發(fā)布了一個(gè)針對(duì)DevOps領(lǐng)域大模型相關(guān)的開源項(xiàng)目DevOpsGPT,主要分為三個(gè)模塊,本文中的DevOps-ChatBot就是其中之一。??
除此之外,還有DevOps-Model、DevOps-ChatBot兩個(gè)模塊,分別為DevOps領(lǐng)域?qū)俅竽P秃虳evOps領(lǐng)域智能助手。??
團(tuán)隊(duì)的目標(biāo)是在DevOps領(lǐng)域,包含開發(fā)、測(cè)試、運(yùn)維、監(jiān)控等場(chǎng)景,真正地結(jié)合大模型來提升效率、成本節(jié)約。??
團(tuán)隊(duì)期望相關(guān)從業(yè)者一起貢獻(xiàn)自己的才智,來讓“天下沒有難做的coder”,也會(huì)定期分享對(duì)于LLM4DevOps領(lǐng)域的經(jīng)驗(yàn)&嘗試。