6行代碼入門RAG開發
什么是RAG?
檢索增強生成(RAG)是指對大型語言模型輸出進行優化,使其能夠在生成響應之前引用訓練數據來源之外的權威知識庫。大型語言模型(LLM)用海量數據進行訓練,使用數十億個參數為回答問題、翻譯語言和完成句子等任務生成原始輸出。在 LLM 本就強大的功能基礎上,RAG 將其擴展為能訪問特定領域或組織的內部知識庫,所有這些都無需重新訓練模型。這是一種經濟高效地改進 LLM 輸出的方法,讓它在各種情境下都能保持相關性、準確性和實用性。
更多關于RAG的介紹可以看這篇文章:
什么是RAG(檢索增強生成)?
上代碼
# 導入必要的類
from llama_index.core import SimpleDirectoryReader
from llama_index.core import VectorStoreIndex
# 加載文檔
documents = SimpleDirectoryReader("./data").load_data()
# 創建文檔索引
index = VectorStoreIndex.from_documents(documents)
# 創建聊天引擎
chat_engine = index.as_chat_engine(chat_mode="condense_question", verbose=True)
# 執行聊天
print(chat_engine.chat("DuckDB的VSS擴展主要功能, reply in Chinese"))
6行代碼入門RAG
輸出效果可還滿意?這里使用的是 LiteLLM+ollama? 的私有化模型來模擬 OpenAI的,詳情下次介紹。
上面的代碼演示使用的是Vector Similarity Search in DuckDB 的英文原文。
代碼解析
1.安裝必要的包:
pip install llama-index
2.導入必要的類:
from llama_index.core import SimpleDirectoryReader
from llama_index.core import VectorStoreIndex
- ?SimpleDirectoryReader:用于從指定目錄加載文檔的類。
- ?VectorStoreIndex:用于創建文檔索引的類,它允許基于文檔內容進行檢索。
3.加載文檔:
documents = SimpleDirectoryReader("./data").load_data()
? 使用SimpleDirectoryReader類從當前目錄下的./data文件夾加載文檔。load_data()方法將文檔加載為一個列表。
4.創建文檔索引:
index = VectorStoreIndex.from_documents(documents)
? 利用VectorStoreIndex類和加載的文檔列表創建一個索引。這個索引將用于后續的檢索和生成回答。
5.創建聊天引擎:
chat_engine = index.as_chat_engine(chat_mode="condense_question", verbose=True)
? 使用index.as_chat_engine()方法創建一個聊天引擎,它將使用索引來生成回答。
?chat_mode="condense_question"參數指定了聊天引擎的模式,在這個例子中,它將嘗試將用戶的問題壓縮成更簡潔的形式。
?verbose=True參數表示在生成回答的過程中將打印出額外的詳細信息。
- 6.執行聊天:
print(chat_engine.chat("DuckDB的VSS擴展主要功能, reply in Chinese"))
? 使用chat_engine.chat()方法執行一次聊天交互。
llamaindex 簡介
LlamaIndex[1] 是一個用于構建 上下文增強型 大型語言模型(LLM)應用程序的框架。上下文增強指的是任何在您的私有或特定領域數據之上應用 LLM 的用例。用例包括:
? 提示(Prompting)
? 問答(Question-Answering (RAG))
? 聊天機器人(Chatbots)
? 結構化數據抽取(Structured Data Extraction)
? 代理(Agents)
? 多模態應用(Multi-Modal Applications)
? 微調(Fine-Tuning)
LlamaIndex 提供了工具,使您能夠將上述任何用例從原型構建到生產。這些工具允許您同時攝取(處理)這些數據,并實現復雜的查詢工作流程,結合數據訪問與 LLM 提示。
LlamaIndex 支持 Python 和 Typescript。
LlamaIndex
RAG 步驟拆解
一個最基本的 RAG 可以分解為如下5步:
1.查詢向量化:將用戶查詢輸入嵌入模型,將自然語言查詢轉換成一個語義化的嵌入向量,以便于進行后續的數學運算和相似性比較。
2.向量數據庫查詢:將得到的嵌入查詢向量輸入到向量數據庫中,以便進行高效的信息檢索。
3.上下文檢索:在知識庫中檢索與查詢向量距離最近的前k個上下文塊。這些上下文塊與查詢在語義上最為相關,它們將作為生成答案的依據。
4.上下文與查詢傳遞:將原始查詢文本和檢索到的相關上下文文本一起輸入到大型語言模型(LLM)中。
5.生成響應:利用LLM的強大生成能力,結合查詢文本和檢索到的上下文,生成一個準確、連貫且信息豐富的響應。
通過這五個步驟,RAG技術能夠有效地結合檢索和生成兩個環節,以提供更加精準和豐富的信息回答。
引用鏈接
[1] LlamaIndex: https://www.llamaindex.ai/
