今天要介紹的是另一個主流的LLM開發框架LlamaIndex,
有沒有人也很常看到這隻草尼馬出現在各種技術架構圖上呢!
今天就讓我們來簡單介紹一下它,並且與它跟LangChain做比較
並說明為何最後我們會選擇使用LangChain 作為我們的Framework吧!
LlamaIndex(以前稱為GPT Index)專注於簡化資料檢索和處理,特別是在構建基於LLM的應用時。它提供了一個高效的索引結構,能夠快速查找和檢索資料,這對於需要大量資料支持的應用場景尤為重要。LlamaIndex的主要特點包括:
安裝核心LlamaIndex可再自行添加需要的LlamaIndex(在LlamaHub上有超過300個LlamaIndex集成包),這些即可無縫與core一起工作,允許自由選擇使用LLM、embedding和vector DB的地方。
LlamaHub 開源專案: https://llamahub.ai/
# 安裝LlamaIndex核心包
pip install llama-index-core
# 安裝OpenAI LLM集成包
pip install llama-index-llms-openai
# 安裝Replicate LLM集成包
pip install llama-index-llms-replicate
# 安裝HuggingFace嵌入模型集成包
pip install llama-index-embeddings-huggingface
這些命令分別安裝了LlamaIndex的核心包和幾個常用的集成包,這些包就可以使用不同的LLM(如OpenAI和Replicate)以及嵌入模型(如HuggingFace)。
import os
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
這行代碼設置了OpenAI API金鑰,將其存儲在環境變量OPENAI_API_KEY
中,用於身份驗證。
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
這行代碼從LlamaIndex的核心包中導入了VectorStoreIndex
和SimpleDirectoryReader
類。
documents = SimpleDirectoryReader("YOUR_DATA_DIRECTORY").load_data()
index = VectorStoreIndex.from_documents(documents)
SimpleDirectoryReader("YOUR_DATA_DIRECTORY").load_data()
:從指定的目錄加載數據,返回一個文檔列表。VectorStoreIndex.from_documents(documents)
:從加載的文檔創建一個向量存儲索引。import os
os.environ["REPLICATE_API_TOKEN"] = "YOUR_REPLICATE_API_TOKEN"
這行代碼設置了Replicate API金鑰,將其存儲在環境變量REPLICATE_API_TOKEN
中,用於身份驗證。
from llama_index.core import Settings, VectorStoreIndex, SimpleDirectoryReader
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.replicate import Replicate
from transformers import AutoTokenizer
這些代碼從LlamaIndex的核心包和集成包中導入了相關類和函數,用於設置LLM和嵌入模型。
llama2_7b_chat = "meta/llama-2-7b-chat:8e6975e5ed6174911a6ff3d60540dfd4844201974602551e10e9e87ab143d81e"
Settings.llm = Replicate(
model=llama2_7b_chat,
temperature=0.01,
additional_kwargs={"top_p": 1, "max_new_tokens": 300},
)
llama2_7b_chat
:設置了Llama 2的模型標識。Settings.llm = Replicate(...)
:設置Replicate LLM,指定模型和相關參數。Settings.tokenizer = AutoTokenizer.from_pretrained(
"NousResearch/Llama-2-7b-chat-hf"
)
這行代碼從HuggingFace模型庫中加載與LLM匹配的tokenizer。
Settings.embed_model = HuggingFaceEmbedding(
model_name="BAAI/bge-small-en-v1.5"
)
這行代碼設置了HuggingFace嵌入模型。
documents = SimpleDirectoryReader("YOUR_DATA_DIRECTORY").load_data()
index = VectorStoreIndex.from_documents(documents)
與使用OpenAI時的步驟相同,這些代碼加載數據並創建向量存儲索引。
query_engine = index.as_query_engine()
response = query_engine.query("YOUR_QUESTION")
print(response)
index.as_query_engine()
:將索引轉換為查詢引擎。query_engine.query("YOUR_QUESTION")
:執行查詢並獲取響應。現在大家對於LlamaIndex應該有了初步的了解,
最後再次與前面的LangChain來做個比較
比較項目 | LangChain | LlamaIndex |
---|---|---|
特點 | - 多模塊集成 | - 數據索引和查詢 |
- 上下文管理 | - 高效檢索 | |
- workflow自動化 | - 自然語言查詢 | |
適用場景 | - 構建agent chatbot和對話系統 | - 對大規模數據進行索引和智能檢索 |
- 整合多種data source進行複雜查詢 | - 構建需要自然語言查詢的數據檢索系統 | |
- 構建需要上下文管理的應用程序 | - 集成多種數據源進行統一查詢 | |
主要功能 | - 支持多種LLM、數據源、工具和API的集成 | - 文檔存儲庫 |
- 上下文狀態保持和多輪對話支持 | - 索引器 | |
- 自動化工作流程定義和管理 | - 查詢引擎 |
考量到LangChain的優勢:
我們自家開發還是以LangChain為主,
(身邊認識的企業朋友,有在做RAG的,聽到的似乎也都用LangChain居多)
就依照情況自行評估使用的框架囉!
接下來就要開始談談LangChain語法囉
請持續關注:)