iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
生成式 AI

LLM與生成式AI筆記系列 第 30

Day 29 : 進階的 RAG 實作:理解與查詢程式碼:使用RAG 驅動

  • 分享至 

  • xImage
  •  

關於 RAG:Day 23: 什麼是 RAG?

其他可參考的資料:

其他大大的 RAG資料庫資料

RAG 綜述 簡中版 Retrieval-Augmented Generation for Large Language Models: A Survey

(美語)進階 RAG 技術 survey


今天會理解完一個能根據特定的開源項目實作,明天會在此基礎上進行其他功能的實作:

Understanding And Querying Code: A RAG powered approach 原網址

https://ithelp.ithome.com.tw/upload/images/20240830/20092056Z2fo3WkoOo.png

簡單來說就是把程式碼當成一般文字分析,並使用 codellm 運作,由於原網址 load 的程式碼大概只有一頁,所以其實讓我有點存疑 codellm 生成的真實性,不過後續運作的時候確實有抓到原項目裡的一些內容,只能說項目的真實性大概是一半上下左右,真的要能實際上使用大概還要再好好的調整。

我這邊大概根據他的程式碼進行分析

好的,讓我們來分析一下你提供的程式碼,看看它如何實現一個 RAG + Agent 系統,以及其中的一些關鍵點和潛在改進方向。

程式碼功能拆解

  1. 環境準備

    • 安裝必要的套件:langchaintransformersacceleratesentence-transformersqdrant-clientlangchainhubgradio
    • 克隆 chat-with-websites 倉庫:這可能是用於從網站提取內容的工具,但目前程式碼中似乎沒有直接使用到。
  2. 文件轉換與加載

    • convert_files_to_txt:將指定目錄下的檔案轉換為 .txt 格式,以便後續處理。
    • DirectoryLoader:從指定目錄加載 .txt 檔案。
    • RecursiveCharacterTextSplitter:將加載的文本分割成適當大小的 chunks,以便 embedding 模型處理。
  3. Embedding 與向量存儲

    • HuggingFaceBgeEmbeddings:使用 HuggingFace 的 BGE 模型生成 embedding。
    • Qdrant:一個向量數據庫,用於存儲和檢索 embedding。
  4. 語言模型

    • HuggingFacePipeline:使用 HuggingFace 的 CodeLlama-7b-hf 模型作為 LLM。
  5. RAG 查詢

    • qdrant.similarity_search:根據查詢,在 Qdrant 向量數據庫中搜索最相似的程式碼片段。
    • pretty_print_docs:美化輸出檢索到的文件信息和內容。
  6. Prompt 模板和鏈式調用

    • hub.pull("rlm/rag-prompt"):從 LangChain Hub 拉取一個 RAG prompt 模板。
    • chain = prompt | gpu_llm | StrOutputParser():構建一個鏈式調用,將 prompt 模板、LLM 和輸出解析器串聯起來。
  7. RetrievalQA

    • RetrievalQA.from_chain_type:使用 "stuff" 鏈類型創建一個 RetrievalQA 對象,用於整合檢索和生成。
  8. Gradio 界面

    • load_documents:加載文件並構建 Qdrant 向量存儲。
    • retrive_response:檢索並生成回答。
    • gr.Interface:創建兩個 Gradio 界面,一個用於加載文件,一個用於提問。
    • gr.TabbedInterface:將兩個界面組合成一個帶有標籤的界面。

改進建議

  • 程式碼庫的結構化: 考慮將程式碼庫按照功能、模塊或其他有意義的方式組織,以便更精確地檢索相關程式碼。
  • 查詢意圖理解: 可以在 Agent 中加入更複雜的自然語言理解 (NLU) 模型,以更好地理解用戶查詢的意圖,從而提供更精準的程式碼。
  • 程式碼執行與除錯: 如果需要 Agent 執行程式碼,考慮加入安全的程式碼執行環境和錯誤處理機制。
  • 用戶回饋: 收集用戶對系統的回饋,並根據回饋不斷改進系統。

總結

這段程式碼提供了一個基本的 RAG + Agent 系統的實現,具有一定的參考價值。透過進一步的改進和優化,可以使其更加強大和實用。

請注意: 由於沒有提供 codebase 檔案夾的具體內容,無法對程式碼的實際效果進行評估。

這邊為在colab中的程式碼

我想可能架構不改之外,可能用的embedding ,model 跟讀取的項目跟設定都要整個改掉,感覺才比較有可用性。

不過原網誌大概算是證明了這個方法是可能可行的就是了。


上一篇
Day 28: anything-llm 程式碼解讀
下一篇
Day 30 : 鐵人賽自我總結
系列文
LLM與生成式AI筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言