超越传统 RAG 系统:基于 MyScaleDB 和 LlamaIndex 的 AI 智能体构建实战

前言

传统的基于检索增强生成(RAG)的数据流水线通常依赖于硬编码步骤,每次运行都遵循预定义的路径。在这些系统中,没有实时决策,也不会根据输入数据动态调整操作。这种局限性会降低系统在复杂或不断变化的环境中的灵活性和响应能力,突显了传统 RAG 系统的主要弱点。

LlamaIndex 通过引入“智能体”的概念解决了这一局限性。智能体比查询引擎更进了一步,它们不仅可以从静态数据源中“读取”信息,还可以动态地从各种工具中摄取和修改数据。

在大型语言模型(LLM)的驱动下,这些智能体旨在执行一系列操作,通过从提供的工具集中选择最合适的工具来完成指定的任务。这些工具可以是简单的基本函数,也可以是复杂的 LlamaIndex 查询引擎。

智能体的工作流程如下:

  • 处理用户输入或查询。

  • 根据输入进行内部决策,确定如何处理。

  • 决定是否需要额外的步骤,或者是否可以提供最终结果。

这种执行自动推理和决策的能力使得智能体能够高度适应复杂的数据处理任务,并保持高效性。

上图展示了 LlamaIndex 智能体的工作流程,说明了它们如何生成步骤、做出决策、选择工具和评估进度,从而根据用户输入动态地完成任务。

01、LlamaIndex 智能体的核心组件

LlamaIndex 中的智能体由两个主要组件构成:AgentRunner 和 AgentWorker。

AgentRunner:智能体 Orchestrator

AgentRunner 是 LlamaIndex 中的协调器,负责管理智能体的状态(包括对话记忆),并为用户交互提供高级接口。它负责创建和维护任务,并负责运行每个任务中的步骤。以下是其功能的详细分解:

  • 任务创建:根据用户查询或输入创建任务。

  • 状态管理:存储和维护对话和任务的状态。

  • 记忆管理:在内部管理对话记忆,确保在交互过程中维护上下文。

  • 任务执行:运行每个任务中的步骤,并与 AgentWorker 协调。

与需要开发者手动定义和传递记忆的 LangChain 智能体不同,LlamaIndex 智能体在内部处理记忆管理。

AgentWorker:任务执行单元

AgentWorker 负责控制 AgentRunner 给定任务的逐步执行。它根据当前输入生成任务中的下一步。AgentWorker 可以定制,以包含特定的推理逻辑,使其高度适应不同的任务。其主要方面包括:

  • 步骤生成:根据当前数据确定任务中的下一步。

  • 定制化:可以定制 AgentWorker 以处理特定类型的推理或数据处理。

总而言之,AgentRunner 负责任务创建和状态管理,而 AgentWorker 则作为 AgentRunner 指挥下的操作单元,执行每个任务的步骤。

02、LlamaIndex 智能体类型

LlamaIndex 提供了不同类型的智能体,专为特定任务和功能而设计。

数据智能体(Data Agents)

数据智能体是专门设计用于处理各种数据任务的智能体,包括检索和操作。它们可以在读取和写入模式下运行,并与不同的数据源无缝交互。

功能

  • 跨平台数据交互: 数据智能体可以跨各种数据库和 API 搜索、检索、更新和操作数据。它们支持与 Slack、Shopify、Google 等平台交互,从而能够轻松地与这些服务集成。

  • 复杂数据操作: 数据智能体可以处理复杂的数据操作,例如查询数据库、调用 API、更新记录和执行数据转换。

  • 广泛的应用场景: 其适应性强的设计使其适用于从简单数据检索到复杂数据处理流水线的各种应用。

优势

数据智能体简化了与各种数据源的交互,并能够自动执行复杂的数据任务,从而提高了效率并减少了手动操作的需要。

from llama_index.agent import OpenAIAgent, ReActAgent
from llama_index.llms import OpenAI

# import and define tools
...
# initialize llm
llm = OpenAI(model="gpt-3.5-turbo")
# initialize openai agent
agent = OpenAIAgent.from_tools(tools, llm=llm, verbose=True)
# initialize ReAct agent
agent = ReActAgent.from_tools(tools, llm=llm, verbose=True)
# use agent
response = agent.chat("What is (121 * 3) + 42?")

自定义智能体 (Custom Agents)

自定义智能体提供了高度的灵活性和定制选项。通过继承 CustomSimpleAgentWorker 类,你可以为智能体定义特定的逻辑和行为。这包括处理复杂查询、集成多个工具以及实现错误处理机制。

自定义功能

  • 逐步逻辑定义: 你可以通过定义逐步逻辑来定制自定义智能体,以满足特定需求。

  • 重试机制: 可以实现重试机制以处理临时错误或故障。

  • 工具集成: 可以集成各种工具和服务来扩展智能体的功能。

优势

这种定制能力使用户能够创建管理复杂任务和工作流程的智能体,使其高度适应不同的场景。无论是管理复杂的数据操作还是与独特的服务集成,自定义智能体都能提供构建专业、高效解决方案所需的工具。

03、工具及其使用方法

工具是任何智能体中最重要的组成部分。它们允许智能体执行各种任务并扩展其功能。通过使用不同类型的工具,智能体可以根据需要执行特定操作。这使得智能体具有高度的适应性和效率。

函数工具 (Function Tools)

函数工具允许用户将任何 Python 函数转换为智能体可以使用的工具。此功能对于创建自定义操作非常有用,增强了智能体执行各种任务的能力。

功能

  • 函数转换: 您可以将简单的 Python 函数转换为智能体工作流程中使用的工具。

  • 自定义逻辑: 这可以包括数学运算、数据处理函数和其他自定义逻辑。

示例

你可以使用以下方法将 Python 函数转换为工具:

from llama_index.core.tools import FunctionTool
def multiply(a: int, b: int) -> int:
    """Multiple two integers and returns the result integer"""
    return a * b

multiply_tool = FunctionTool.from_defaults(fn=multiply)

LlamaIndex 中的 FunctionTool 方法允许用户将任何 Python 函数转换为智能体可以使用的工具。函数的名称将成为工具的名称,函数的文档字符串将用作工具的描述。

查询引擎工具 (QueryEngine Tools)

查询引擎工具封装了现有的查询引擎,允许智能体对数据源执行复杂查询。这些工具与各种数据库和 API 集成,使智能体能够高效地检索和操作数据。

功能

  • 数据源交互: 这些工具使智能体能够与特定的数据源进行交互。

  • 复杂查询执行: 执行复杂查询并检索相关信息。

  • 数据驱动决策: 这种集成使智能体能够在其决策过程中有效地使用数据。

示例

用户可以使用以下代码要将任何查询引擎转换为查询引擎工具:

from llama_index.core.tools import QueryEngineTool
from llama_index.core.tools import ToolMetadata
query_engine_tools = QueryEngineTool(
        query_engine="your_index_as_query_engine_here",
        metadata=ToolMetadata(
            name="name_your_tool",
            description="Provide the description",
        ),
    )

QueryEngineTool 方法允许您将查询引擎转换为智能体可以使用的工具。ToolMetadata 类帮助定义此工具的名称和描述。工具的名称由 name 属性设置,描述由 description 属性设置。

注意: 工具的描述非常重要,因为它可以帮助 LLM 决定何时使用该工具。

04、使用 MyScaleDB 和 LlamaIndex 构建 AI 智能体

为了演示如何有效地集成和利用查询引擎工具和函数工具,我们将构建一个结合了两者的 AI 智能体。

安装所需的库

首先,在终端中运行以下命令安装所需的库:

pip install myscale-client llama-index

我们将使用 MyScaleDB 作为向量搜索引擎来开发查询引擎。

获取查询引擎的数据

在本例中,我们将使用耐克产品目录数据集。使用以下代码下载和准备数据:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
import requests

url = 'https://niketeam-asset-download.nike.net/catalogs/2024/2024_Nike%20Kids_02_09_24.pdf?cb=09302022'
response = requests.get(url)

with open('Nike_Catalog.pdf', 'wb') as f:
    f.write(response.content)

reader = SimpleDirectoryReader(input_files=["Nike_Catalog.pdf"])
documents = reader.load_data()

此代码将下载耐克产品目录 PDF 文件,并加载数据以供查询引擎使用。

们将使用 MyScaleDB 作为向量搜索引擎来开发查询引擎。

连接 MyScaleDB

import clickhouse_connect

client = clickhouse_connect.get_client

(
    host='your_host_here',
    port=443,
    username='your_username_here',
    password='your_password_here'
)

创建查询引擎工具

我们将为智能体构建第一个工具,即查询引擎工具。为此,先使用 MyScaleDB 开发查询引擎并将 Nike 目录数据添加到向量存储中。

from llama_index.vector_stores.myscale import MyScaleVectorStore
from llama_index.core import StorageContext
vector_store = MyScaleVectorStore(myscale_client=client)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(
   documents, storage_context=storage_context
)
query_engine = index.as_query_engine()

一旦数据被摄取到向量存储并创建了索引,下一步是将查询引擎转换为工具。为此,我们将使用 LlamaIndex 的 QueryEngineTool。

from llama_index.core.tools import QueryEngineTool
from llama_index.core.tools import ToolMetadata

query_engine_tool = QueryEngineTool(
    query_engine=index,
    metadata=ToolMetadata(
        name="nike_data",
        description="Provide information about the Nike products. Use a detailed plain text question as input to the tool."
    ),
)

QueryEngineTool 将 query_engine 和 metadata 作为参数。在元数据中,我们使用描述定义工具的名称。

创建函数工具

我们的下一个工具是一个简单的 Python 函数,用于将两个数字相乘。将使用 LlamaIndex 的 FunctionTool 将此方法转换为工具。

from llama_index.core.tools import FunctionTool
# Define a simple Python function
def multiply(a: int, b: int) -> int:
    """Multiply two integers and return the result."""
    return a * b
# Change function to a tool
multiply_tool = FunctionTool.from_defaults(fn=multiply)

创建工具列表

完成这些步骤后,我们就完成了工具的创建。LlamaIndex 智能体将工具作为 Python 列表接收。因此,我们可将工具添加到列表中。

tools = [query_engine_tool, multiply_tool]

定义大语言模型

LLM 是 AI 智能体的核心,其选择会显著影响智能体的性能。本示例将使用 OpenAI 的 gpt-3.5-turbo 模型:

from llama_index.llms.openai import OpenAI

llm = OpenAI(model="gpt-3.5-turbo")

初始化智能体

智能体由 Agent Runner 和 Agent Worker 组成。以下代码展示了两种初始化智能体的方法:

  • 自定义智能体
from llama_index.core.agent import AgentRunner
from llama_index.agent.openai import OpenAIAgentWorker

# Method 2: Initialize AgentRunner with OpenAIAgentWorker
openai_step_engine = OpenAIAgentWorker.from_tools(tools, llm=llm, verbose=True)
agent1 = AgentRunner(openai_step_engine)

此方法首先使用工具和 LLM 初始化 OpenAIAgentWorker,然后将其传递给 AgentRunner 以构建完整的智能体。

  • 使用预定义智能体
from llama_index.agent.openai import OpenAIAgent

# Initialize OpenAIAgent
agent = OpenAIAgent.from_tools(tools, llm=llm, verbose=True)

此方法使用 OpenAIAgent,它是 AgentRunner 的子类,并在底层封装了 OpenAIAgentWorker,简化了智能体的创建过程。

注意: 设置 verbose=True 可以深入了解模型的思维过程,因为它会提供详细的解释和推理。

测试智能体

智能体初始化完成后,可以使用一致的方法进行测试。以下代码演示了如何与先前定义的智能体进行交互:

  • 测试查询引擎工具
# Call the custom agent
agent = agent.chat("What's the price of BOYS NIKE DF STOCK RECRUIT PANT DJ573?")

预期输出应包含从耐克产品目录数据中检索到的相关产品价格信息。

  • 测试函数工具
# Call the second agent``response = agent1.chat("What's 2+2?")

预期输出应为:

AI 智能体在自主处理复杂任务方面展现出巨大潜力,这使其成为优化各种商业流程的宝贵资产。通过自动化日常任务,AI 智能体可以解放人力资源,使其专注于更高价值的活动。随着技术的进步,预计 AI 智能体将被更广泛地采用,从而彻底改变人机交互方式并提高工作效率。

结论

LlamaIndex 智能体提供了一种超越传统检索增强生成 (RAG) 系统的数据管理和处理的智能方法。与静态数据流水线不同,这些智能体可以实时做出决策,并根据传入数据调整其行为。这种自动推理能力使其高度适应复杂任务,并具备极高的效率。它们集成了从基本函数到高级查询引擎的各种工具,以智能地处理输入并提供优化的结果。

MyScaleDB 是一款顶级的向量数据库,特别适用于大规模 AI 应用。其 MSTG 算法在可扩展性和效率方面优于其他算法,使其成为高需求环境的理想选择。MyScaleDB 旨在快速处理大型数据集和复杂查询,确保快速准确地检索数据。与其他向量数据库相比,MyScaleDB 具有无缝集成和卓越性能的优势,是创建强大且可扩展的 AI 应用程序的必备工具。

最后的最后

感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。

因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

大模型知识脑图

为了成为更好的 AI大模型 开发者,这里为大家提供了总的路线图。它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

经典书籍阅读

阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。

在这里插入图片描述

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

面试资料

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下

在这里插入图片描述

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值