隨著GPT-3等大型語言模型的問世,自然語言處理(NLP)領域取得了重大突破。這些語言模型具備生成類人文本的能力,並已廣泛應用於各種場景,如聊天機器人和翻譯
#然而,當涉及到專業化和定制化的應用場景時,通用的大語言模型可能在專業知識方面會有所不足。用專業的語料庫對這些模型進行微調往往昂貴且耗時。 「檢索增強生成」(RAG)為專業化應用提供了一個新技術方案。
下面我們主要介紹RAG如何運作,並透過一個實際的例子,將產品手冊作為專業語料庫,使用GPT-3.5 Turbo來作為問答模型,驗證其有效性。
案例:開發一個聊天機器人,能夠回答與特定產品相關的問題。該企業擁有獨特的使用手冊
RAG 提供了一個有效的解決方案,用於特定領域的問答。它主要透過將行業知識轉化為向量進行儲存和檢索,並將檢索結果與使用者問題結合形成提示訊息,最終利用大型模型來產生合適的答案。透過結合檢索機制和語言模型,大大增強了模型的回應能力
建立聊天機器人程式的步驟如下:
(1)設定Python虛擬環境 設定虛擬環境來砂箱化我們的Python,以避免任何版本或依賴衝突。執行以下命令以建立新的Python虛擬環境。
需要重写的内容是:pip安装virtualenv,python3 -m venv ./venv,source venv/bin/activate
需要進行改寫的內容是:(2)產生OpenAI金鑰
使用GPT需要一個OpenAI金鑰來進行存取
#需要進行重寫的內容是:(3)安裝依賴函式庫
安裝程式所需的各種相依性。包括以下幾個函式庫:
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()
執行此程式碼後,您應該會看到一個已經建立好的資料夾,用於儲存向量。
在將向量嵌入儲存在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將GPT等語言模型的優點與資訊檢索的優勢結合在一起。透過利用特定的知識脈絡資訊來增強提示詞的豐富度,使得語言模型能夠產生更準確、與知識脈絡相關的答案。 RAG提供了一種比「微調」更有效率且成本效益更好的解決方案,為產業應用或企業應用提供可客製化的互動方案
以上是提升工程效率-增強檢索生成(RAG)的詳細內容。更多資訊請關注PHP中文網其他相關文章!