1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一個開源的輕量級agent框架-Agere

        共 3628字,需瀏覽 8分鐘

         ·

        2024-04-14 23:54

         Datawhale干貨 

        推薦人:happyapplehorse,Datawhale學習者

        簡介

        agere是一個開源的輕量級agent框架,主要特點是通用性和完全的可定制性。它通過將一個復雜流程拆解為一系列獨立的小步驟,來簡化構建具有復雜邏輯的agent的流程。

        agere是agent的拉丁語詞源,常被翻譯為“行動”或“做”,具有“驅動”和“推動某事發(fā)生”的意思。

        agere沒有第三方依賴,使用

        pip install agere

        即可簡單地安裝和使用。

        agere使用 Jobhandler 作為基本的任務節(jié)點類型,通過定義Job(一個類)和handler(函數(shù)或方法),來拆分一個agent的各個部分,這些節(jié)點可以復用,當未來你想更改或者拓展部分功能時,也會更加輕松。

        在一個Job中,你可以提交新的Job,也可以調用handler,在handler中,你也可以調用別的handler,當然也可以提交Job。

        Job和handler都屬于 TaskNode 類型,也就是任務節(jié)點,這些任務節(jié)點構成樹狀結構,用它可以跟蹤任務之間的關系和運行狀態(tài),在這些節(jié)點中,你可以為其添加在不同時刻執(zhí)行的callback,例如在任務開始時,結束時,遇錯時,或者被終止時等。

        agere不像LangGraph那樣將節(jié)點和邊完全分離,而是采用邊節(jié)點的模式。在LangGraph中,任務被拆分為“節(jié)點”和“邊”,節(jié)點和邊是各自獨立的,而在agere中,任務被拆分為“節(jié)點和邊”,為了區(qū)別,可以把它叫做邊節(jié)點,也就是帶邊的節(jié)點,每個節(jié)點與后面的邊被放在了一起。節(jié)點和邊各自獨立的好處是結構更加清晰,而邊節(jié)點的好處是邏輯更加連貫,你在定義一個節(jié)點時就明確了后面的邊,而不用再在連接邊時再去想想我這個節(jié)點是干什么的來著,很可能你都已經忘了,還要去查看節(jié)點中的代碼。

        使用邊節(jié)點的模式帶來的另一個不同體現(xiàn)在傳遞參數(shù)方面。在LangGraph中,你需要構造state object,也就是上下文變量context,你需要讓它與每一個節(jié)點相容,也就是確保每個節(jié)點都可以從該context變量中取出合適的信息并恰當?shù)馗淖兯?,這實際上是一種負擔。

        在agere中,由于節(jié)點和邊是放在一起的,這使得傳輸參數(shù)可以更加直接和靈活。你可以直接在調用中按需傳遞所需的任意形式的參數(shù),而不必使用統(tǒng)一要求的context變量。不光是傳遞參數(shù),在實現(xiàn)條件邊時也更加簡單和直接。

        當然,agere是很靈活的,如果你覺得使用節(jié)點和邊的模式更加清晰,你完全也可以這樣做,你只需要把TaskNode定義為完全的節(jié)點,不連接邊,然后,你可以簡單地自定義實現(xiàn)不同的添加邊的操作,這可以通過使用callback來實現(xiàn)。你可以高度自定義自己的邊類型,例如簡單邊,條件邊等。

        但當你使用node+edge模式時,你可能需要考慮如何傳遞參數(shù),這通常通過使用共享的上下文變量context的形式來實現(xiàn),就像LangGraph中那樣。在agere中,這也可以有多種實現(xiàn)方式,例如你可以通過“祖先節(jié)點鏈”來訪問到共享的上級節(jié)點,比如頂級節(jié)點commander,在該節(jié)點上設置共享參數(shù)來傳遞信息。

        在構建流程時,agere和LangGraph在以下幾個方面 有所不同

        一心多用:agere可以多個任務同時并行

        審時度勢:可以通過callback控制任務的不同時刻的不同狀態(tài)

        節(jié)外生枝:可對節(jié)點的不同狀態(tài)進行連接,例如將邊連接到一個節(jié)點的開始、結束或終止等狀態(tài)。

        量體裁衣:節(jié)點之間傳遞參數(shù)更加靈活,每個節(jié)點都可以定制化傳遞參數(shù)。

        當然,LangGraph是一個很優(yōu)秀的框架,它也有很多優(yōu)點,我就不多說了。

        用agere來構建一個agent的時候,它不會使你少寫很多代碼。agere沒有很多內建的具體功能,它主要用于流程驅動。agere強調的是通用性,它不限制你去使用任何的工具,也不依賴于任何特定的接口或形式,所以它也沒辦法封裝很多具體的功能。

        有一些具體的邏輯需要你去寫,換句話說,就是你自己去調用,這是個很有意思的事情,正因為它不依賴于任何工具,也不依賴于特定的接口或形式,不與任何工具相耦合,使得它可以去調用任何工具,你可以去使用langchain來調用它的connector,也可以使用semantic kernel提供的語義化插件的功能等。

        它的通用性使得它很容易與其它工具協(xié)同與集成,它不依賴于第三方庫也是出于這方面的考慮,現(xiàn)在ai發(fā)展地又這么快,我就遇到openai更新了一個新功能,這邊幾個依賴庫更新不同步,導致我這邊新的功能即使寫完了也沒法用的情況。另一個原因是,每一個工具都不可能面面俱到,我沒有必要非要在我這里寫一個別的工具中已經有的并且可能還更好更成熟的功能,我能寫的比它更好嗎?同樣的,別的具有眾多功能的庫它提供的功能也不見得都是最好的,所以我選擇靈活的接口能力,沒有必要把自己局限于一種框架或者工具中,你喜歡用哪個庫哪個功能你都可以去用,讓它可以組合不同工具的最優(yōu)秀的功能,這是我希望的。

        agere中的基本概念

        我們以下面這張圖來簡單介紹一下agere中的基本概念。

        TaskNode

        任務節(jié)點,上圖中的Commander,Jobhandler都屬于TaskNode節(jié)點。TaskNode節(jié)點用于追蹤各個任務節(jié)點的父子關系和完成狀態(tài),每個節(jié)點都具有一個父節(jié)點,同時可以具有0個或多個子節(jié)點。這些節(jié)點構成一個樹狀結構,通過這個節(jié)點樹,能夠跟蹤任務之間的關系,例如一個任務是誰的子任務,它又開啟了哪些子任務等。當一個節(jié)點自己的工作完成了,并且這個節(jié)點的所有子節(jié)點也完成時,這個節(jié)點才會變成完成狀態(tài)。圖中灰色表示節(jié)點已完成。每一個節(jié)點完成時,他就會告訴自己的父節(jié)點,說我完成了。

        Job

        Job是打包了一個具體任務和執(zhí)行該任務所需資源的對象,它就好像是跟上級匯報說:我有個什么什么工作要做,具體要干這些這些事情,需要的資料給你,我跟你說清楚了吧,這個工作轉交給你了,其它我不管了。就是這么個意思。

        handler

        它是一個函數(shù)或者方法,類似于協(xié)程函數(shù),它返回一個handler對象,這個handler對象可以被其它任務節(jié)點調用,也可以被直接await。它就好像是跟下級說:我有這么件事,你去幫我做了。

        Commander

        它是用來自動調度和執(zhí)行任務的節(jié)點,它通常是所有節(jié)點的根節(jié)點。當你定義好了一些Job和handler時,把初始的入口工作交給它,它就可以幫你自動將這些工作組織起來并執(zhí)行。

        callback

        另外,還有一個重要的元素是callback,在TaskNode節(jié)點的不同狀態(tài)可以觸發(fā)不同的回調函數(shù),例如一個節(jié)點的任務開始執(zhí)行時,結束時,遇錯時,終止時我們都可以為其添加相應的回調函數(shù)。

        示例

        假如我們想構建一個最常用的使用OpenAI的GPT模型并具有工具調用能力的聊天agent,另外,在這個agent中,我們想讓GPT可以在調用工具的同時也可以給用戶發(fā)送消息(目前GPT本身只能選擇給用戶發(fā)送消息或者選擇調用工具,兩者不能同時進行)。

        我們可以這樣做:定義兩個Job,一個ChatJob,用來發(fā)起一個新的對話,一個ResponseJob,用來接收GPT回復的內容,三個handler,一個response_handler,用來解析GPT的回復消息,一個user_handler用來顯示發(fā)給用戶的消息,一個tool_call_handler,用來執(zhí)行函數(shù)調用。另外,我們還為ResponseJob添加一個callback,讓它在結束時發(fā)起下一輪對話,最后用一個commander來執(zhí)行它。

        這個agent的流程圖如下所示:下面是它的運行過程的演示動畫:

        如果讀到這里,相信你對agere已經有了初步的了解,如果你感興趣,歡迎查看這里:

        Github:https://github.com/happyapplehorse/agere

        文檔頁:https://happyapplehorse.github.io/agere/

        如果覺得還不錯,歡迎您參與其中,或者給出您寶貴的意見與建議。

        瀏覽 172
        10點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        10點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            黄色爱爱网站 | 91视频观看 | 你夹的太紧了,我拔不出来了 | 新大香蕉 | 天天操夜夜操人人操 | 北条麻妃性视频 | 好紧好硬好硬爽小说 | 777国产偷窥盗摄精品 | 欧美成人猛片AAAAAAA | 大香蕉香蕉网成人精品视频 |