文章目錄
- 快速上手LangChain(三)構建檢索增強生成(RAG)應用
- 概述
- 索引
- 阿里嵌入模型 Embedding
- 檢索和生成
- RAG應用(demo:根據我的博客主頁,分析一下我的技術棧)
快速上手LangChain(三)構建檢索增強生成(RAG)應用
langchain官方文檔:https://python.langchain.ac.cn/docs/tutorials/rag/
概述
典型的 RAG 應用程序有兩個主要組件
-
索引:一個從源頭攝取數據并對其進行索引的管道。這通常離線進行。
-
檢索和生成:實際的 RAG 鏈,它在運行時獲取用戶查詢,從索引中檢索相關數據,然后將其傳遞給模型。
索引
- 加載:首先我們需要加載數據。這可以使用文檔加載器完成。
- 拆分:文本拆分器將大型 Documents 分成更小的塊。這對于索引數據和將其傳遞到模型中都很有用,因為大的塊更難搜索,并且無法容納在模型的有限上下文窗口中。
- 存儲:我們需要一個地方來存儲和索引我們的拆分,以便稍后可以搜索它們。這通常使用向量存儲和嵌入模型完成。
由于原始文檔過大,超出了LLM的上下文窗口,需要將其分塊才能讓LLM識別。LangChain 提供了許多內置的文本分塊工具,例如 CharacterTextSplitter
總結:RAG需要從向量數據庫檢索上下文然后輸入LLM進行生成,因此需要提前將文本數據向量化并存儲到向量數據庫。
阿里嵌入模型 Embedding
Embedding(也稱為嵌入)是將文本、圖片或音視頻等數據轉化為向量(數字序列)的一種方法。向量的特點在于可以用數學方式表示數據間的關系,向量之間的距離代表數據的相關性。距離越小,相關性越高;距離越大,相關性越低。
通用文本向量,是通義實驗室基于LLM底座的多語言文本統一向量模型,面向全球多個主流語種,提供高水準的向量服務,幫助開發者將文本數據快速轉換為高質量的向量數據。
通義官方文檔:https://help.aliyun.com/zh/model-studio/user-guide/embedding
langchain相關代碼:libs/community/langchain_community/embeddings/dashscope.py
檢索和生成
- 檢索:給定用戶輸入,使用檢索器從存儲中檢索相關拆分。
- 生成:聊天模型 / LLM 使用包含問題和檢索數據的提示來生成答案
一旦我們索引了數據,我們將使用LangGraph作為我們的編排框架來實現檢索和生成步驟。
RAG應用(demo:根據我的博客主頁,分析一下我的技術棧)
langchain官方文檔:https://python.langchain.ac.cn/docs/tutorials/rag/
我們將構建一個應用程序,該應用程序可以回答有關網站內容的問題。我們將使用的特定網站是 Lilian Weng 的LLM Powered Autonomous Agents博客文章,這使我們可以詢問有關該文章內容的問題。
這里我們把官方demo改造一下,指定我們自己的一篇博客文章,使用阿里的嵌入模型進行向量化,細節上做了一點優化。
- 安裝依賴
pip install --upgrade langchain-text-splitters langchain-community
- 下載&加載語料
loader = WebBaseLoader(web_paths=(