生成式人工智能/大语言模型

构建 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 的提示如下所示:

""" [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": """

前面的提示包含所有工具和相关信息。您可以设计核心的代码线束,以便给定除“生成最终答案”的人工工具以外的任何工具,智能体将附加所使用工具的结果以记忆并重新访问情况。这是一种迭代式贪婪方法,可针对单个步骤做出“最佳”决定。

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。

"""
 [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": """

构建数据代理应用时的主要注意事项

在构建 LLM 代理应用程序时,请谨记以下主要注意事项。

扩展工具

想象一下,一个案例包含 10 万个表和 100 个工具,而不是 3 个表和 3 个工具。适应这种扩展的一种方法是添加一个中间 RAG 步骤。此步骤可能会提取最相关的 5 个工具供代理选择。这可以应用于内存、数据库模式或代理需要考虑的任何其他选项。

使用多个向量数据库

您还可以构建主题路由器,以便在多个 SQL 或向量数据库的情况下将查询导向正确的数据库。

更好地规划实施

此处介绍了一个用于实现贪婪迭代解决方案的简单线性求解器。它可以被任务分解模块或各种计划编译器取代,以生成更高效的执行计划。

总结

本文介绍了如何构建用于数据分析的 LLM 智能体应用的基础知识,以帮助您熟悉构建智能体背后的概念。我强烈建议您探索开源生态系统,为您的应用选择最佳智能体框架。

准备好构建您自己的生产 LLM 数据代理了吗?查看采用检索增强生成技术的 AI 聊天机器人免费动手实验室,帮助您构建可靠且可扩展的解决方案。

如需深入了解关于 LLM 代理的信息,请阅读构建由 LLM 提供支持的 API Agent 以执行任务

 

标签