【RAG 实践】LlamaIndex 快速实现一个基于 OpenAI 的 RAG

这是 LlamaIndex 官方 Starter Tutorial 中 demo,用很少的代码来使用 OpenAI 快速实现出一个 RAG。

Ref: Starter Tutorial | LlamaIndex

代码:llamindex-rag-demo | Kaggle

1)设置 OpenAI Token

这里使用国内的 OpenAI 中转 API token,在 LlamaIndex 中需要进行如下设置:

import os
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
from llama_index.core.settings import Settings

OPENAI_API_KEY = 'sk-xxxx'
OPENAI_API_BASE = 'https://xxxx'

os.environ['OPENAI_API_KEY'] = OPENAI_API_KEY
os.environ['OPENAI_API_BASE'] = OPENAI_API_BASE

Settings.llm = OpenAI(model="gpt-3.5-turbo", api_key=OPENAI_API_KEY, api_base=OPENAI_API_BASE)
Settings.embed_model = OpenAIEmbedding(api_key=OPENAI_API_KEY, api_base=OPENAI_API_BASE)

其中 Settings 为设置整个代码运行所使用的默认 LLM。

2)加载数据,并构建向量索引

这里使用一个 Paul Graham 的文章 “What I Worked On” 作为本地知识语料库的数据。

语料库下载连接:download

将改 txt 文件下载到 data 目录下。

从 data 目录加载语料库:

from llama_index.core import SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()

其中 documents 是一个 Document 对象的列表,每个 Document 对象包含了文件类型、文件长度、文件内容等各种文档描述信息:

在这里插入图片描述

基于 documents 可以构建向量索引,这里使用基于内存的向量索引 VectorStoreIndex

from llama_index.core import VectorStoreIndex

index = VectorStoreIndex.from_documents(documents)

3)使用 user query 进行 QA

这里从 index 构建出 Query Engine 用于做 QA。

官方文档对 Engine 的解释如下:

  • Engines provide natural language access to your data. For example:

    • Query engines are powerful interfaces for question-answering (e.g. a RAG pipeline).
    • Chat engines are conversational interfaces for multi-message, “back and forth” interactions with your data.

代码如下:

query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)

response 就是检索增强后的生成响应:

在这里插入图片描述

以上就是一个简单的 RAG demo,具体如何打印日志、持久化 index 可以参考官方文档。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 06:28:04       50 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 06:28:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 06:28:04       43 阅读
  4. Python语言-面向对象

    2024-07-14 06:28:04       54 阅读

热门阅读

  1. Unity脚步.txt

    2024-07-14 06:28:04       19 阅读
  2. React Native Android 应用开发、调试与发布深度指南

    2024-07-14 06:28:04       23 阅读
  3. 方差是什么?

    2024-07-14 06:28:04       17 阅读
  4. 【jvm】字符串常量池问题

    2024-07-14 06:28:04       22 阅读
  5. VECTOR,ARRAYLIST, LINKEDLIST的区别是什么?

    2024-07-14 06:28:04       25 阅读
  6. 持续集成的自动化之旅:Gradle在CI中的配置秘籍

    2024-07-14 06:28:04       22 阅读
  7. C++:虚函数相关

    2024-07-14 06:28:04       26 阅读