AI 智能體是一個由規劃功能、內存和工具組成的系統,用于執行用戶請求的任務。對于數據分析或與復雜系統交互等復雜任務,您的應用可能依賴于不同類型智能體之間的協作。有關更多背景信息,請參閱 LLM 智能體簡介 和 構建您的首個 LLM 智能體應用。
本文介紹了構建準確的 LLM 應用(可在查詢時處理細致入微的數據分析任務)所需的代理類型。本文將介紹構建數據分析代理應用(包括代碼片段)的示例用例。最后,本文將介紹 AI 開發者在優化和構建 LLM 代理應用時需要考慮的一些注意事項。
用于數據分析任務的 LLM 代理類型
首先,本節介紹兩種主要類型的 LLM 代理及其工作原理 – 數據代理和 API 或執行代理。我還將介紹代理集群用例,其中涉及多個代理合作解決問題。請注意,這些代理類型在某種程度上代表頻譜的端部。可以為特定用例創建混合的專用代理。
數據代理
數據代理通常專為提取目標而設計。換言之,數據代理協助用戶從各種數據源中提取信息。它們有助于完成輔助推理任務。
例如,財務分析師可能會問:“公司在今年的幾個季度實現了正現金流量?”此類問題需要推理、搜索(結構化、非結構化或兩者兼有)和規劃能力。
API 或執行代理
API 或執行代理專為執行目標而設計。這些代理執行用戶請求的任務或一組任務。
假設同一個金融分析師使用的 Excel 電子表格包含去年 10 只股票的收市價。分析師希望根據一個或多個統計公式來組織這些收市價。需要將 Excel API 鏈接在一起以執行此任務。有關另一個 API 代理示例,請參閱Google Places API Copilot 演示。
智能體群
智能體群涉及多個數據智能體和多個 API 智能體以去中心化方式協作,以解決復雜問題。智能體群專為工作流而設計,其中包括需要不同形式的規劃和智能體核心線束的提取和執行任務。
例如,假設財務分析師希望研究排名前 5 的快餐庫存以進行投資規劃。實現這一目標所需的行動順序如下圖 1 所示。
- 挖掘股價。數據代理使用 SQL、pandas 或 Quandl API 訪問結構化數據庫。
- 從 10-K 和 10-Q 報告中提取更多相關信息。使用數據代理執行搜索引擎調用以獲取表單。使用數據代理提取信息,并通過檢索增強生成(RAG)調用。
- 將信息存儲在 Excel 中。API 代理調用 Excel API。
- 從社交媒體內容中提取用戶情感。使用數據智能體的數據挖掘執行社交媒體 API 調用。使用 RAG 數據智能體執行情感分析。
- 使用預設指標,使用 API 代理 (Sheets API) 生成指標。
- 使用 API 代理生成報告。
- 使用 API 代理 (PowerPoint API) 將關鍵圖形、圖形和圖表上傳至 PowerPoint 幻燈片。
?

隨著對更多類型的 LLM 代理進行建模,它們可以在代理群中相互交互,以有效解決問題。將問題限制在不同的代理垂直領域中,可以使用較小的模型構建代理。這需要減少自定義工作并保留模塊化,進而為添加新功能、選擇所需功能和簡化部署擴展帶來好處。在此生態系統中,每個代理都將另一個代理視為工具,并在需要時使用其幫助。
構建數據分析師代理
基于本節的概述,我們將詳細討論如何構建一個數據代理,用于與用于庫存管理的 SQL 數據庫進行通信。請注意,以下內容假設您已經閱讀了構建您的首個 LLM 智能體應用,或者對 LLM 代理的基礎知識有所了解。
選擇 LLM
首先,選擇您要使用的 LLM。在這個例子中,我們使用了Mixtral 8x7B LLM,它可以在NVIDIA NGC目錄中找到。這個模型可以加速各種模型的使用,并且以API的形式提供。每個模型的前幾次API調用是免費的,用于實驗目的。
請注意,如果您使用的模型未經過調整以處理代理工作流,可以將以下提示重新表述為一系列選擇題 (MCQ)。這應該有效,因為大多數模型都經過指令調整以處理 MCQ。詳細了解微調。
選擇用例
接下來,選擇一個用例。本文的用例是與用于庫存管理的 SQL 數據庫通信。然后使用例如三個表填充該數據庫。
請注意,以下信息僅供參考,并不打算傳達實際細節。
suppliers_data = [ { "name" : "Samsung Electronics" , "address" : "Seoul, South Korea" , "contact" : "800-726-7864" }, { "name" : "Apple Inc." , "address" : "Cupertino, California, USA" , "contact" : "800–692–7753" }, { "name" : "OnePlus Technology" , "address" : "Shenzhen, Guangdong, China" , "contact" : "400-888-1111" }, { "name" : "Google LLC" , "address" : "Mountain View, California, USA" , "contact" : "855-836-3987" }, { "name" : "Xiaomi Corporation" , "address" : "Beijing, China" , "contact" : "1800-103-6286" }, ] products_data = [ { "name" : "Samsung Galaxy S21" , "description" : "Samsung flagship smartphone" , "price" : 799.99 , "supplier_id" : 1 }, { "name" : "Samsung Galaxy Note 20" , "description" : "Samsung premium smartphone with stylus" , "price" : 999.99 , "supplier_id" : 1 }, { "name" : "iPhone 13 Pro" , "description" : "Apple flagship smartphone" , "price" : 999.99 , "supplier_id" : 2 }, { "name" : "iPhone SE" , "description" : "Apple budget smartphone" , "price" : 399.99 , "supplier_id" : 2 }, { "name" : "OnePlus 9" , "description" : "High performance smartphone" , "price" : 729.00 , "supplier_id" : 3 }, { "name" : "OnePlus Nord" , "description" : "Mid-range smartphone" , "price" : 499.00 , "supplier_id" : 3 }, { "name" : "Google Pixel 6" , "description" : "Google's latest smartphone" , "price" : 599.00 , "supplier_id" : 4 }, { "name" : "Google Pixel 5a" , "description" : "Affordable Google smartphone" , "price" : 449.00 , "supplier_id" : 4 }, { "name" : "Xiaomi Mi 11" , "description" : "Xiaomi high-end smartphone" , "price" : 749.99 , "supplier_id" : 5 }, { "name" : "Xiaomi Redmi Note 10" , "description" : "Xiaomi budget smartphone" , "price" : 199.99 , "supplier_id" : 5 }, ] inventory_data = [ { "product_id" : 1 , "quantity" : 150 , "min_required" : 30 }, { "product_id" : 2 , "quantity" : 100 , "min_required" : 20 }, { "product_id" : 3 , "quantity" : 120 , "min_required" : 30 }, { "product_id" : 4 , "quantity" : 80 , "min_required" : 15 }, { "product_id" : 5 , "quantity" : 200 , "min_required" : 40 }, { "product_id" : 6 , "quantity" : 150 , "min_required" : 25 }, { "product_id" : 7 , "quantity" : 100 , "min_required" : 20 }, { "product_id" : 8 , "quantity" : 90 , "min_required" : 18 }, { "product_id" : 9 , "quantity" : 170 , "min_required" : 35 }, { "product_id" : 10 , "quantity" : 220 , "min_required" : 45 }, |
為了進行實驗,請將前面的條目存儲在 SQLite 數據庫中。這些條目是針對圖 2 所示的模式定制的。目的是創建一個簡化版本的數據庫,通常是任何庫存管理系統的核心。這些數據庫包含有關當前庫存水平、供應商等的信息。

LLM 代理組件
LLM 代理包含四個關鍵組件:工具、內存模塊、規劃模塊和代理核心。有關此示例組件的詳細信息如下。
工具
此示例使用以下兩種工具:
- 計算器:用于查詢數據后所需的任何基本計算。為了保持簡單,此處使用了 LLM。可以添加任何服務或 API 來解決所述問題。
- SQL 查詢執行器:用于查詢原始數據的數據庫。
顯存
用于跟蹤智能體所有操作的簡單緩沖區或列表。
規劃
線性貪婪方法。為實現這一點,請為“生成最終答案”創建一個“人工工具”。以下部分將進一步探討這一想法。
智能體核心
是時候整合所有內容了。智能體核心 LLM 的提示如下所示:
"""<s> [INST]You are an agent capable of using a variety of TOOLS to answer a data analytics question. Always use MEMORY to help select the TOOLS to be used. MEMORY TOOLS - Generate Final Answer: Use if answer to User's question can be given with MEMORY - Calculator: Use this tool to solve mathematical problems. - Query_Database: Write an SQL Query to query the Database. ANSWER FORMAT ```json { "tool_name": "Calculator" } ``` [/INST] User: {User's Question} Assistant: ```json { "tool_name": """ </s> |
前面的提示包含所有工具和相關信息。您可以設計核心的代碼線束,以便給定除“生成最終答案”的人工工具以外的任何工具,智能體將附加所使用工具的結果以記憶并重新訪問情況。這是一種迭代式貪婪方法,可針對單個步驟做出“最佳”決定。
if tool_selection[ 'tool_name' ] = = "Query_Database" : Generate_SQL_Query(question, memory, schema) QueryDB Append results to memory Agent(question, memory) if tool_selection[ 'tool_name' ] = = "Generate Final Answer" : Final_Output = llm(question, memory) return final output if tool_selection[ 'tool_name' ] = = "Calculator" : Ask_Math_Question_To_LLM(question, memory) Append results to memory Agent(question, memory) |
總而言之,數據代理可以訪問規劃功能、內存、多種數據訪問工具以及執行相關分析任務的方法。圖 3 顯示了數據代理的一般架構。

數據代理示例
本節提供了一個示例,展示了如何一起使用不同的工具來解決業務問題。在這樣的場景中使用代理的主要優勢是,用戶不需要了解數據庫的詳細信息或運行查詢的技術技能。
問題:“Google Pixel 6 的剩余庫存量是多少?”
答案:根據從庫存系統中檢索到的信息,您目前有 80 個 Google Pixel 6 的剩余庫存單位。此計算是從當前庫存數量 (100) 中減去所需的最小數量 (20) 后得出的。(有關源數據,請參閱上文。)

為解決此問題,智能體執行了以下步驟:
第一步:QueryDB 工具
- 生成 SQL
- 查詢數據庫
- 將結果存儲在內存中
第二步:使用 Calculator 工具
- 使用 LLM 解決數學問題
- 將結果存儲在內存中。請注意,這可以替換為代碼生成和代碼執行。要了解有關動態工具的更多信息,請參閱構建由 LLM 提供支持的 API Agent 以執行任務。
第 3 步:生成最終答案
以下提示適用于生成 SQL 后的代理核心 LLM。
""" <s> [INST]You are an agent capable of using a variety of TOOLS to answer a data analytics question. Always use MEMORY to help select the TOOLS to be used. MEMORY Previous Question: How much excess inventory do we have for 'Google Pixel 6'? SQL Query: SELECT inventory.id, inventory.product_id, inventory.quantity, inventory.min_required, products.name FROM inventory JOIN products ON inventory.product_id = products.id WHERE products.name = 'Google Pixel 6'; Retrieved Information: [(7, 7, 100, 20, 'Google Pixel 6')] TOOLS - Generate Final Answer: Use if answer to User's question can be given with MEMORY - Calculator: Use this tool to solve mathematical problems. - Query_Database: Write an SQL Query to query the Database. ANSWER FORMAT ```json { "tool_name": "Calculator" } ``` [/INST] User: How much excess inventory do we have for 'Google Pixel 6'? Assistant: ```json { "tool_name": """ </s> |
構建數據代理應用時的主要注意事項
在構建 LLM 代理應用程序時,請謹記以下主要注意事項。
擴展工具
想象一下,一個案例包含 10 萬個表和 100 個工具,而不是 3 個表和 3 個工具。適應這種擴展的一種方法是添加一個中間 RAG 步驟。此步驟可能會提取最相關的 5 個工具供代理選擇。這可以應用于內存、數據庫模式或代理需要考慮的任何其他選項。
使用多個向量數據庫
您還可以構建主題路由器,以便在多個 SQL 或向量數據庫的情況下將查詢導向正確的數據庫。
更好地規劃實施
此處介紹了一個用于實現貪婪迭代解決方案的簡單線性求解器。它可以被任務分解模塊或各種計劃編譯器取代,以生成更高效的執行計劃。
總結
本文介紹了如何構建用于數據分析的 LLM 智能體應用的基礎知識,以幫助您熟悉構建智能體背后的概念。我強烈建議您探索開源生態系統,為您的應用選擇最佳智能體框架。
準備好構建您自己的生產 LLM 數據代理了嗎?查看采用檢索增強生成技術的 AI 聊天機器人免費動手實驗室,幫助您構建可靠且可擴展的解決方案。
如需深入了解關于 LLM 代理的信息,請閱讀構建由 LLM 提供支持的 API Agent 以執行任務。
?