• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 生成式人工智能/大語言模型

    構建 LLM 支持的數據代理以進行數據分析

    AI 智能體是一個由規劃功能、內存和工具組成的系統,用于執行用戶請求的任務。對于數據分析或與復雜系統交互等復雜任務,您的應用可能依賴于不同類型智能體之間的協作。有關更多背景信息,請參閱 LLM 智能體簡介構建您的首個 LLM 智能體應用

    本文介紹了構建準確的 LLM 應用(可在查詢時處理細致入微的數據分析任務)所需的代理類型。本文將介紹構建數據分析代理應用(包括代碼片段)的示例用例。最后,本文將介紹 AI 開發者在優化和構建 LLM 代理應用時需要考慮的一些注意事項。

    用于數據分析任務的 LLM 代理類型

    首先,本節介紹兩種主要類型的 LLM 代理及其工作原理 – 數據代理和 API 或執行代理。我還將介紹代理集群用例,其中涉及多個代理合作解決問題。請注意,這些代理類型在某種程度上代表頻譜的端部。可以為特定用例創建混合的專用代理。

    數據代理

    數據代理通常專為提取目標而設計。換言之,數據代理協助用戶從各種數據源中提取信息。它們有助于完成輔助推理任務。

    例如,財務分析師可能會問:“公司在今年的幾個季度實現了正現金流量?”此類問題需要推理、搜索(結構化、非結構化或兩者兼有)和規劃能力。

    API 或執行代理

    API 或執行代理專為執行目標而設計。這些代理執行用戶請求的任務或一組任務。

    假設同一個金融分析師使用的 Excel 電子表格包含去年 10 只股票的收市價。分析師希望根據一個或多個統計公式來組織這些收市價。需要將 Excel API 鏈接在一起以執行此任務。有關另一個 API 代理示例,請參閱Google Places API Copilot 演示

    智能體群

    智能體群涉及多個數據智能體和多個 API 智能體以去中心化方式協作,以解決復雜問題。智能體群專為工作流而設計,其中包括需要不同形式的規劃和智能體核心線束的提取和執行任務。

    例如,假設財務分析師希望研究排名前 5 的快餐庫存以進行投資規劃。實現這一目標所需的行動順序如下圖 1 所示。

    1. 挖掘股價。數據代理使用 SQL、pandas 或 Quandl API 訪問結構化數據庫。
    2. 從 10-K 和 10-Q 報告中提取更多相關信息。使用數據代理執行搜索引擎調用以獲取表單。使用數據代理提取信息,并通過檢索增強生成(RAG)調用。
    3. 將信息存儲在 Excel 中。API 代理調用 Excel API。
    4. 從社交媒體內容中提取用戶情感。使用數據智能體的數據挖掘執行社交媒體 API 調用。使用 RAG 數據智能體執行情感分析。
    5. 使用預設指標,使用 API 代理 (Sheets API) 生成指標。
    6. 使用 API 代理生成報告。
    7. 使用 API 代理 (PowerPoint API) 將關鍵圖形、圖形和圖表上傳至 PowerPoint 幻燈片。

    ?

    Flowchart diagram showing a natural workflow for multiple agents collaborating together to solve a problem.
    圖 1.使用多個代理解決的復雜工作流程執行的一般概念流程

    隨著對更多類型的 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 所示的模式定制的。目的是創建一個簡化版本的數據庫,通常是任何庫存管理系統的核心。這些數據庫包含有關當前庫存水平、供應商等的信息。

    Three tables containing the database schema: Inventory, Product, and Supplier.
    圖 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 顯示了數據代理的一般架構。

    Agent has a core, memory, planning module, and tools.
    圖 3.數據代理的通用架構

    數據代理示例

    本節提供了一個示例,展示了如何一起使用不同的工具來解決業務問題。在這樣的場景中使用代理的主要優勢是,用戶不需要了解數據庫的詳細信息或運行查詢的技術技能。

    問題:“Google Pixel 6 的剩余庫存量是多少?”
    答案:根據從庫存系統中檢索到的信息,您目前有 80 個 Google Pixel 6 的剩余庫存單位。此計算是從當前庫存數量 (100) 中減去所需的最小數量 (20) 后得出的。(有關源數據,請參閱上文。)

    Screenshot of sample data agent output that readsd: “Based on the retrieved information from the inventory system, you currently have 80 units of excess inventory for the Google Pixel 6. This calculation is derived by subtracting the minimum required quantity (20) from the current quantity in stock (100).”
    圖 4.樣本數據代理輸出

    為解決此問題,智能體執行了以下步驟:

    第一步:QueryDB 工具

    • 生成 SQL
    • 查詢數據庫
    • 將結果存儲在內存中

    第二步:使用 Calculator 工具

    第 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 以執行任務

    ?

    0

    標簽

    人人超碰97caoporen国产