關於 RAG:Day 23: 什麼是 RAG?
其他可參考的資料:
其他大大的 RAG資料庫資料
RAG 綜述 簡中版 Retrieval-Augmented Generation for Large Language Models: A Survey
今天會理解完一個能根據特定的開源項目實作,明天會在此基礎上進行其他功能的實作:
Understanding And Querying Code: A RAG powered approach 原網址

簡單來說就是把程式碼當成一般文字分析,並使用 codellm 運作,由於原網址 load 的程式碼大概只有一頁,所以其實讓我有點存疑 codellm 生成的真實性,不過後續運作的時候確實有抓到原項目裡的一些內容,只能說項目的真實性大概是一半上下左右,真的要能實際上使用大概還要再好好的調整。
我這邊大概根據他的程式碼進行分析
好的,讓我們來分析一下你提供的程式碼,看看它如何實現一個 RAG + Agent 系統,以及其中的一些關鍵點和潛在改進方向。
程式碼功能拆解
環境準備
langchain、transformers、accelerate、sentence-transformers、qdrant-client、langchainhub 和 gradio。chat-with-websites 倉庫:這可能是用於從網站提取內容的工具,但目前程式碼中似乎沒有直接使用到。文件轉換與加載
convert_files_to_txt:將指定目錄下的檔案轉換為 .txt 格式,以便後續處理。DirectoryLoader:從指定目錄加載 .txt 檔案。RecursiveCharacterTextSplitter:將加載的文本分割成適當大小的 chunks,以便 embedding 模型處理。Embedding 與向量存儲
HuggingFaceBgeEmbeddings:使用 HuggingFace 的 BGE 模型生成 embedding。Qdrant:一個向量數據庫,用於存儲和檢索 embedding。語言模型
HuggingFacePipeline:使用 HuggingFace 的 CodeLlama-7b-hf 模型作為 LLM。RAG 查詢
qdrant.similarity_search:根據查詢,在 Qdrant 向量數據庫中搜索最相似的程式碼片段。pretty_print_docs:美化輸出檢索到的文件信息和內容。Prompt 模板和鏈式調用
hub.pull("rlm/rag-prompt"):從 LangChain Hub 拉取一個 RAG prompt 模板。chain = prompt | gpu_llm | StrOutputParser():構建一個鏈式調用,將 prompt 模板、LLM 和輸出解析器串聯起來。RetrievalQA
RetrievalQA.from_chain_type:使用 "stuff" 鏈類型創建一個 RetrievalQA 對象,用於整合檢索和生成。Gradio 界面
load_documents:加載文件並構建 Qdrant 向量存儲。retrive_response:檢索並生成回答。gr.Interface:創建兩個 Gradio 界面,一個用於加載文件,一個用於提問。gr.TabbedInterface:將兩個界面組合成一個帶有標籤的界面。改進建議
總結
這段程式碼提供了一個基本的 RAG + Agent 系統的實現,具有一定的參考價值。透過進一步的改進和優化,可以使其更加強大和實用。
請注意: 由於沒有提供 codebase 檔案夾的具體內容,無法對程式碼的實際效果進行評估。
我想可能架構不改之外,可能用的embedding ,model 跟讀取的項目跟設定都要整個改掉,感覺才比較有可用性。
不過原網誌大概算是證明了這個方法是可能可行的就是了。