RAG實作教學,Streamlit+LangChain+Llama2 | Demo 版本

ChiChieh Huang
Jan 25, 2024

--

上一篇示範了如何實作 RAG(Retrieval-Augmented Generation)的核心部分。 這次,我們將重點放在如何使用 Streamlit 來建立一個視覺化的操作介面,以便 Demo 整個 RAG 的工作流程。與上篇介紹的不同的是我把 Gradio 換成 streamlit,因為我最近在寫 streamlit 的專案,相對比較熟悉,當然,你也可以選擇使用 Gradio 來達到相同的效果。

相關 Tech Stack:

  • Python 3.7+
  • LangChain: 一個強大的庫,用於建立和管理語言模型。
  • Chroma: 用於處理和分析文字資料。
  • Streamlit: 用於建構和分享美觀的資料應用。
  • Llama2 OpenAI API: 選擇使用自建的 LLM 伺服器或是 OpenAI 提供的 API。
  • PDF: 作為資訊的來源和查詢的基礎。

實現流程:

  1. 連接 LLM:在這個 Demo 中,我們可以選擇要使用自己架設的 LLM server 或使用 openAI API
  2. 文件上傳與處理:使用者可以上傳 PDF 文檔,系統會使用 Chroma 對文檔進行處理,包括文字分割和嵌入等操作。
  3. 資料儲存:處理後的資料會儲存到資料庫中,以便於後續的檢索和分析。
  4. 互動式查詢:使用者可以透過一個友善的介面向系統提問,系統會根據問題從資料庫中檢索相關信息,並利用 LLM 產生答案。

實際畫面:

Demo 的畫面中,我是用自己本地的 LLM 模型,並使用 llama.cpp 開設 API service,因此你可以看到 URL 是: http://127.0.0.1:8080/v1,如果這部分不清楚可以參考 llama.cpp 教學,你也可以選擇使用 openAI API。

上傳 PDF 使用的文件一樣與上一篇一樣,是使用虛擬人物 Alison Hawk 的資訊,裡面記錄了他的職業與個性,因此你可以看到 Demo 中我詢問 Alison Hawk 的職業是甚麼,而 LLM 有拿到 PDF 的訊息準確回答。

建立你的 Demo

如果你對這個專案感興趣,並想親自嘗試建造和運行,我將 code 放在 github,你可以藉由以下步驟快速架設你自己的 streamlit Demo:

步驟1. Clone 專案

git clone https://github.com/wsxqaza12/RAG_LangChain_streamlit.git
cd RAG_LangChain_streamlit

步驟2. 準備環境

conda create -n RAG_streamlit python=3.7
conda activate RAG_streamlit
pip install -r requirements.txt

步驟3. 啟動 streamlit

streamlit run rag_engine.py

完成上述步驟後,你應該可以看到一個友善的 Streamlit 應用程式介面。在這個介面上,你可以上傳 PDF,查詢訊息,並觀察 LLM 如何從你提供的資料中擷取資訊,注意如果你要使用你自己的 LLM,記得先在另外的 process 啟動。

希望這篇文章能幫助你更好地理解 RAG 的實現過程,並透過 Streamlit 創建出色的互動式 Demo。如果有任何問題,歡迎在專案的 GitHub 頁面上提出。

--

--

ChiChieh Huang

HI~ 我之前在美商擔任 Sr. Data Scientist,熱愛桌球與奇幻小說,想使用中文字向中文社群分享 AI 相關知識。目前正在尋找新的機會或合作,歡迎聯繫我: cch.chichieh@gmail.com