提升工程效率-增強檢索生成(RAG)

王林
發布: 2023-10-14 20:17:01
轉載
1446 人瀏覽過

隨著GPT-3等大型語言模型的問世,自然語言處理(NLP)領域取得了重大突破。這些語言模型具備生成類人文本的能力,並已廣泛應用於各種場景,如聊天機器人和翻譯

提升工程效率-增強檢索生成(RAG)

#然而,當涉及到專業化和定制化的應用場景時,通用的大語言模型可能在專業知識方面會有所不足。用專業的語料庫對這些模型進行微調往往昂貴且耗時。 「檢索增強生成」(RAG)為專業化應用提供了一個新技術方案。

提升工程效率-增強檢索生成(RAG)

下面我們主要介紹RAG如何運作,並透過一個實際的例子,將產品手冊作為專業語料庫,使用GPT-3.5 Turbo來作為問答模型,驗證其有效性。

案例:開發一個聊天機器人,能夠回答與特定產品相關的問題。該企業擁有獨特的使用手冊

RAG介紹

RAG 提供了一個有效的解決方案,用於特定領域的問答。它主要透過將行業知識轉化為向量進行儲存和檢索,並將檢索結果與使用者問題結合形成提示訊息,最終利用大型模型來產生合適的答案。透過結合檢索機制和語言模型,大大增強了模型的回應能力

建立聊天機器人程式的步驟如下:

  1. 讀取PDF(使用者手冊PDF檔案)並使用chunk_size為1000個令牌進行令牌化。
  2. 建立向量(可以使用OpenAI EmbeddingsAPI來建立向量)。
  3. 在本機向量庫中儲存向量。我們將使用ChromaDB作為向量資料庫(向量資料庫也可以使用Pinecone或其他產品替代)。
  4. 使用者發出具有查詢/問題的提示。
  5. 根據使用者的問題從向量資料庫檢索出知識上下文資料。這個知識上下文資料將在後續步驟中與提示詞結合使用,來增強提示詞,通常被稱為上下文豐富。
  6. 提示詞包含使用者問題和增強的上下文知識一起傳遞給LLM
  7. LLM 基於此上下文進行回答。

動手開發

(1)設定Python虛擬環境        設定虛擬環境來砂箱化我們的Python,以避免任何版本或依賴衝突。執行以下命令以建立新的Python虛擬環境。

需要重写的内容是:pip安装virtualenv,python3 -m venv ./venv,source venv/bin/activate
登入後複製

需要進行改寫的內容是:(2)產生OpenAI金鑰

使用GPT需要一個OpenAI金鑰來進行存取

提升工程效率-增強檢索生成(RAG)

#需要進行重寫的內容是:(3)安裝依賴函式庫

安裝程式所需的各種相依性。包括以下幾個函式庫:

  • lanchain:一個開發LLM應用程式的框架。
  • chromaDB:這是用於持久化向量嵌入的VectorDB。
  • unstructured:用於預處理Word/PDF文件。
  • tiktoken: Tokenizer framework
  • pypdf:讀取和處理PDF文件的框架。
  • openai:存取OpenAI的框架。
pip install langchainpip install unstructuredpip install pypdfpip install tiktokenpip install chromadbpip install openai
登入後複製

建立一個環境變數來儲存OpenAI金鑰。

export OPENAI_API_KEY=<openai-key></openai-key>
登入後複製

(4)將使用手冊PDF檔案轉換為向量並將其儲存在ChromaDB中

將所有需要使用的依賴函式庫和函數匯入

import osimport openaiimport tiktokenimport chromadbfrom langchain.document_loaders import OnlinePDFLoader, UnstructuredPDFLoader, PyPDFLoaderfrom langchain.text_splitter import TokenTextSplitterfrom langchain.memory import ConversationBufferMemoryfrom langchain.embeddings.openai import OpenAIEmbeddingsfrom langchain.vectorstores import Chromafrom langchain.llms import OpenAIfrom langchain.chains import ConversationalRetrievalChain
登入後複製

讀取PDF,標記化文件並拆分文件。

loader = PyPDFLoader("Clarett.pdf")pdfData = loader.load()text_splitter = TokenTextSplitter(chunk_size=1000, chunk_overlap=0)splitData = text_splitter.split_documents(pdfData)
登入後複製

建立一個chroma集合,和一個儲存chroma資料的本機目錄。然後,建立一個向量(embeddings)並將其儲存在ChromaDB中。

collection_name = "clarett_collection"local_directory = "clarett_vect_embedding"persist_directory = os.path.join(os.getcwd(), local_directory)openai_key=os.environ.get('OPENAI_API_KEY')embeddings = OpenAIEmbeddings(openai_api_key=openai_key)vectDB = Chroma.from_documents(splitData,embeddings,collection_name=collection_name,persist_directory=persist_directory)vectDB.persist()
登入後複製

執行此程式碼後,您應該會看到一個已經建立好的資料夾,用於儲存向量。

提升工程效率-增強檢索生成(RAG)

在將向量嵌入儲存在ChromaDB後,可以使用LangChain中的ConversationalRetrievalChain API來啟動一個聊天歷史元件

memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)chatQA = ConversationalRetrievalChain.from_llm(OpenAI(openai_api_key=openai_key, temperature=0, model_name="gpt-3.5-turbo"), vectDB.as_retriever(), memory=memory)
登入後複製

初始化了langchan之後,我們可以使用它來聊天/Q A。在下面的程式碼中,接受使用者輸入的問題,並在使用者輸入'done'之後,將問題傳遞給LLM,以獲得答案並列印出來。

chat_history = []qry = ""while qry != 'done':qry = input('Question: ')if qry != exit:response = chatQA({"question": qry, "chat_history": chat_history})print(response["answer"])
登入後複製

提升工程效率-增強檢索生成(RAG)

提升工程效率-增強檢索生成(RAG)

總之

RAG將GPT等語言模型的優點與資訊檢索的優勢結合在一起。透過利用特定的知識脈絡資訊來增強提示詞的豐富度,使得語言模型能夠產生更準確、與知識脈絡相關的答案。 RAG提供了一種比「微調」更有效率且成本效益更好的解決方案,為產業應用或企業應用提供可客製化的互動方案

以上是提升工程效率-增強檢索生成(RAG)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板