TaskWeaver:開源框架協助資料分析與業界定制,建構卓越的Agent解決方案

王林
發布: 2024-01-17 08:36:18
轉載
646 人瀏覽過

數據分析一直是現代社會中的關鍵工具,幫助我們深入了解本質、發現規律並引導決策。然而,數據分析過程常常複雜且耗時,因此我們期望有一個智慧助理可以直接與數據互動。隨著大語言模型(LLM)的發展,虛擬助理和Copilot等智慧代理紛紛出現,它們在自然語言理解和生成方面的表現令人驚嘆。然而,遺憾的是,現有的代理框架在處理複雜資料結構(如DataFrame、ndarray等)和引入領域知識時仍然面臨困難,而這恰恰是資料分析和專業領域中的核心需求。

為了更好地解決語音助理在執行任務時的瓶頸問題,微軟推出了一個名為TaskWeaver的Agent框架。該框架以程式碼為優先,能夠智慧地將使用者的自然語言請求轉換為可執行的程式碼,同時支援多種資料結構和動態插件選擇。此外,TaskWeaver還可以根據不同領域的規劃過程進行專業適應,充分發揮了大語言模型的潛力。作為一個開源框架,TaskWeaver提供了可自訂的範例和插件,可融入特定領域的知識,讓使用者能夠輕鬆打造個人化的虛擬助理。 TaskWeaver的推出將有效地提高語音助理的智慧化水平,並滿足用戶對於虛擬助理個人化需求的不斷增長。

TaskWeaver:開源框架協助資料分析與業界定制,建構卓越的Agent解決方案

  • 論文:TaskWeaver: A Code-First Agent Framework
  • ##論文網址:https ://export.arxiv.org/abs/2311.17541

TaskWeaver 專案已在GitHub 上開源,並於發布當日登上GitHub 趨勢榜。目前,該項目已獲得 2.9k 個 star,取得了很好的反響。此外,在領英等社群平台上也有一些實用案例,例如用 TaskWeaver 進行 SAP 資料分析。這些案例證明了 TaskWeaver 的實用性和價值。

TaskWeaver:開源框架協助資料分析與業界定制,建構卓越的Agent解決方案


  • #專案首頁:https://microsoft.github.io/TaskWeaver/
  • 專案網址:https://github.com/microsoft/TaskWeaver

故事範例

追蹤銷售資料中的隱藏秘密

#小雅是一位商業分析師,她的工作之一是從在最近的銷售數據中尋找異常情況,並根據這些異常情況指導公司調整銷售策略。所有銷售資料都安全地儲存在一個SQL資料庫中。她希望能夠透過與AI助理進行自然語言交流來輕鬆地提取和分析數據。特別重要的是,在銷售領域,異常情況具有獨特性,因此她希望AI助理能夠採用客製化的異常檢測演算法來解決這個問題。以下是小雅與AI助理的聊天記錄(圖1),展示了他們之間的互動。 小雅:你好,我需要幫助從資料庫中提取銷售數據並進行分析。 AI助理:好的,我會馬上從資料庫中擷取對應的資料。稍後我會將擷取的資料呈現給您確認。 小雅:非常感謝。 (經過一段時間) AI助理:我已經從資料庫中提取了銷售數據,以下是數據的概覽,請您確認一下。 (AI助理展示數據的概覽) 小雅:數據看起來不錯,請繼續進行異常檢測和分析。 AI助理:明​​白了。我將使用我們定制的異常檢測演算法進行分析,並儘快向您展示直觀的可視化結果。 (經過一段時間) AI助理:分析完成了。請您查看以下視覺化結果。 (AI助理展示可視化結果) 小雅:非常感謝你的幫忙!這些結果對我來說非常有價值。 AI助理:很高興能幫到您。如果您還有其他問題或需要進一步的分析,隨時告訴我。 小雅:當然,謝謝你的支持。

TaskWeaver:開源框架協助資料分析與業界定制,建構卓越的Agent解決方案

圖 1. 故事範例中的對話實錄

Agent 框架需要具備哪些技能?

透過上述小雅的故事,我們整理了 Agent 框架所應具備的幾大核心能力:#

1. 外掛程式支援:在上面的故事中,Agent 需要從資料庫中取得數據,然後使用指定的異常檢測演算法。為了完成這些任務,智慧助理需要能夠定義和呼叫自訂插件,例如 “query_database” 插件和 “anomaly_detection” 插件。

2. 豐富的資料結構支援#:Agent 需要處理複雜的資料結構,如陣列、矩陣、表格資料等,從而順利進行高階資料處理,如預測、聚類等。此外,這些資料應能在不同插件間無縫傳遞。然而,現有的大多數 Agent 框架會將資料分析的中間結果轉換為 Prompt 中的文本,或先將它們儲存為本地文件,然後需要時再讀取。然而,這些做法容易出錯且超過 Prompt 的字數限制。

3. 有狀態執行:Agent 通常需要與使用者進行多輪迭代交互,並根據使用者輸入,產生並執行程式碼。因此,這些程式碼的執行狀態應在整個會話期間保留,直到會話結束。

4. 先推理後行動(ReAct)#:Agent 應該擁有ReAct 的能力,即先觀察推理後再採取行動,這在一些存在不確定性的場景中非常有必要。例如,在上述範例中,由於資料庫中的資料模式(schema)通常比較多樣,因而Agent 必須先取得資料模式資訊並了解哪些資料列是適當的(且與使用者確認),然後才可以將對應的資料列名輸入到異常檢測演算法中。

5. 產生任意程式碼:有時候,預先定義的插件無法滿足使用者的請求,Agent 應該能夠產生程式碼以應對用戶的臨時需求。在上述範例中,Agent 需要產生程式碼來視覺化偵測到的異常,而這個過程是不借助任何外掛程式來實現的。

6. 融入領域知識:Agent 應提供一個系統性的方案來融入特定領域的知識。這將有助於 LLM 進行更好的規劃和準確地調用工具,從而產生可靠的結果,尤其是在業界客製化的場景中。

揭秘TaskWeaver 的核心架構

圖2 展示了TaskWeaver 的整體架構,包括規劃器(Planner),程式碼解釋器(Code Interpreter),以及記憶模組(Memory)。

規劃器就像是系統的大腦,它有兩個核心職責:1)制定計劃,即把用戶的需求拆分成子任務,將這些子任務逐個發送給程式碼解釋器,並在整個計劃執行過程中根據需要自我調整計劃方案;2)回應用戶,它會將程式碼解釋器的回饋結果轉換成用戶容易理解的答案並發送給用戶。

程式碼解釋器主要由兩個元件組成:程式碼產生器(Code Generator)會收到規劃器發送的子任務,結合現有可用的外掛程式以及領域特有的任務範例,來產生對應的程式碼區塊;程式碼執行器(Code Executor)則負責執行產生的程式碼,並在整個會話過程中保持執行狀態。正因為此,複雜資料結構可以在記憶體中傳遞而無需通過 Prompt 或檔案系統。這就像在 Jupyter Notebook 中用 Python 編程,用戶在單元格中輸入代碼片段,程序的內部狀態會按順序執行保留下來並且可被後續過程被引用。在實作上,每個會話中,程式碼執行器都會有一個獨立的 Python 進程來執行程式碼,從而支援同時服務多個使用者。

記憶模組主要儲存了整個系統運行過程中的有用信息,如執行結果等,可以被不同的模組寫入和讀取。短期記憶主要包括目前會話中使用者和 TaskWeaver 之間的通訊記錄,以及各模組之間的通訊記錄。長期記憶則包括了使用者可預先自訂的領域知識,以及在互動過程中總結出的一些經驗等等。

TaskWeaver:開源框架協助資料分析與業界定制,建構卓越的Agent解決方案

圖 2. TaskWeaver 整體架構示意圖

#

除了基本架構之外,TaskWeaver 還具有許多獨特的設計。例如,會話壓縮功能可以減小文字大小,從而允許更多的對話輪數;動態插件選擇功能能夠根據使用者請求自動挑選合適的插件,從而允許整合更多的客製化插件。此外,TaskWeaver 還支援經驗保存功能,使用者在使用過程中透過輸入命令觸發該功能,它將總結使用者在當前會話中的經驗教訓,避免在下次會話中重複錯誤,實現真正的個人化。在安全性方面,TaskWeaver 也進行了精心設計,例如用戶可以指定一個 Python 模組的白名單列表,如果生成的程式碼中引用了白名單之外的模組,將觸發錯誤,從而降低安全風險。

TaskWeaver 的具體流程

#圖 3 向我們展示了 TaskWeaver 在完成前述範例任務的部分流程。

首先,規劃器接收使用者的輸入,結合各模組功能描述和規劃範例產生具體規劃。該規劃包含四個子任務,而其中第一個子任務是從資料庫中提取資料並描述資料模式。

然後,程式碼產生器根據其能力描述和所有相關外掛程式的定義產生一段程式碼。這段程式碼呼叫了 sql_pull_data 插件,將資料儲存到 DataFrame 中,並提供資料模式的描述。

最後,產生的程式碼會被傳送到程式碼執行器中執行,完成後的結果將被傳送到規劃器中以更新規劃或進行下一個子任務。圖中執行結果顯示 DataFrame 中有兩個列,即日期和數值。規劃器可以進一步與使用者確認這些列是否正確,或直接進行下一步的 anomaly_detection 插件的呼叫。

TaskWeaver:開源框架協助資料分析與業界定制,建構卓越的Agent解決方案

圖 3. TaskWeaver 內部工作流程

TaskWeaver 如何注入領域知識?

在大模型應用中,整合特定領域知識的主要目的是提高 LLM 在產業客製化中的泛化表現。 TaskWeaver 提供了三種將領域知識注入模型的方法:

  • #使用外掛程式進行自訂##:使用者可以透過自訂插件的形式整合領域知識。插件可以有多種形式,例如調用 API,從特定資料庫中抓取數據,或運行特定的機器學習演算法或模型等。插件自訂相對直觀,只需提供插件的基本資訊(包括插件名稱、功能描述、輸入參數和返回值)以及 Python 實作。
  • 使用範例進行客製化:TaskWeaver 也提供了使用者一個系統化的介面(以YAML 格式)來設定範例,從而教導LLM 如何回應使用者請求。具體而言,範例可以分為兩種類型,分別用於規劃器中的規劃制定和程式碼產生器中的程式碼程式設計。
  • 進行經驗保存:TaskWeaver 支援使用者將目前會話過程總結並儲存為長期記憶。使用者可以將專業領域知識作為對話內容對 TaskWeaver 進行 “教學”,隨後將對話保存為經驗。在後續的使用過程中就可以透過動態載入經驗,更好地完成專業領域問題。

如何使用  TaskWeaver?

TaskWeaver 的完整程式碼目前已在 GitHub 上開源。目前支援三種方案進行使用,分別是命令列啟動,網頁服務,以及以 Python 庫的形式導入。在簡單安裝後,使用者只需要配置幾個關鍵參數,如 LLM API 位址、金鑰和模型名稱,即可輕鬆啟動 TaskWeaver 服務。

TaskWeaver:開源框架協助資料分析與業界定制,建構卓越的Agent解決方案

圖4.命令列啟動介面

TaskWeaver:開源框架協助資料分析與業界定制,建構卓越的Agent解決方案

圖5. TaskWeaver 運行範例#

TaskWeaver 是一款全新的 Agent 框架方案,其設計符合資料分析和產業客製化場景的需求。透過將使用者語言轉成程式語言,「與數據對話」將不再是夢想,而是現實。

以上是TaskWeaver:開源框架協助資料分析與業界定制,建構卓越的Agent解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板