基礎元件
LlamaIndex 的基礎元件包括:
- Nodes(節點):LlamaIndex 的基本單位,是一個包含一段文本的資料結構。當提供一個文件時,可以將其分割成多個片段並存儲在節點中。
- Document Loader(文檔加載器):用於從各種來源(如網頁、YouTube 視頻、PDF 等)提取數據的接口。LlamaIndex 支持多種文檔加載器,用於不同類型的數據源。
- Indexes(索引):在 LlamaIndex 中,索引是一種組織和存儲來自各種數據源信息的資料結構,使得搜索變得更加容易。索引是建立在多個節點之上的。LlamaIndex 提供不同類型的索引,方便應對不同的使用場景。
- Retrievers(檢索器):在 LlamaIndex 中,檢索器幫助從索引中基於給定的查詢檢索一組節點。它類似於一個搜索工具,從大型數據集中找到相關信息以回答用戶的問題。LlamaIndex 提供不同類型的檢索器,以應對不同的檢索需求。
- Query Engines(查詢引擎):在 LlamaIndex 中,查詢引擎處理用戶輸入的查詢,與底層數據結構(如索引)交互,並返回一個綜合的響應。LlamaIndex 提供不同類型的查詢引擎,以應對不同的查詢處理需求。
載入資料
使用SimpleDirectoryReader
來載入本地端資料
from llama_index import SimpleDirectoryReader
documents = SimpleDirectoryReader('./data').load_data()
將資料分割成節點
節點是基本的資料結構,用於保存輸入。我們將使用以下程式碼將上述輸入分割成多個節點。
from llama_index.node_parser import SimpleNodeParser
parser = SimpleNodeParser()
nodes = parser.get_nodes_from_documents(documents)
產生索引
現在我們已經創建了節點,可以在其上建立索引。我們將使用 VectorStoreIndex,它會從節點中的所有文本創建嵌入,並將其存儲在向量數據庫中。
from llama_index import LLMPredictor, VectorStoreIndex
from langchain import OpenAI
os.environ["OPENAI_API_KEY"] = "api-key"
index = VectorStoreIndex(nodes)
建立檢索器
我們將使用 VectorIndexRetriever,它會根據相似度檢索出前 k 個匹配的文件。在這個例子中,我們將 k 設為 2。
from llama_index.retrievers import VectorIndexRetriever
retriever = VectorIndexRetriever(
index=index,
similarity_top_k=2,
)
建立查詢引擎
現在我們可以在檢索器之上構建一個查詢引擎來開始進行查詢。
from llama_index.query_engine import RetrieverQueryEngine
query_engine = RetrieverQueryEngine(
retriever=retriever
)
詢問問題
現在我們可以在檢索器上建立一個查詢引擎來開始進行查詢。
response = query_engine.query("What did the author do growing up?")
print(response)
Jupyter Notebook完整範例下載
https://github.com/SamurAIGPT/LlamaIndex-course/blob/main/fundamentals/Fundamentals.ipynb