Skip to content

入门教程 (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 做的事情的开始。

提示