入门教程 (OpenAI)#
这是我们著名的“5行代码”入门示例,使用 OpenAI。
提示
确保你已经按照安装步骤进行了操作。
提示
想要使用本地模型吗? 如果你想只使用本地模型进行我们的入门教程,可以查看这个教程。
下载数据#
这个示例使用了 Paul Graham 的文章《我做过的事情》的文本。这个示例以及其他许多示例都可以在我们的 repo 的 examples
文件夹中找到。
最简单的方法是通过这个链接下载,然后保存在一个名为 data
的文件夹中。
设置你的 OpenAI 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 └── data └── paul_graham_essay.txt
查询你的数据#
将以下内容添加到 starter.py
中:
query_engine = index.as_query_engine()
response = query_engine.query("作者在成长过程中做了什么?")
print(response)
这将创建一个用于在你的索引上进行问答的引擎,并提出一个简单的问题。你应该会得到类似以下的回答:作者写了短篇小说,并尝试在 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("作者在成长过程中做了什么?")
print(response)
现在你可以高效地进行查询了!但这只是你可以使用 LlamaIndex 做的事情的开始。