Heim >Backend-Entwicklung >Python-Tutorial >IRIS-RAG-Gen: Personalisierung der ChatGPT RAG-Anwendung, unterstützt von IRIS Vector Search
Hallo Community,
In diesem Artikel werde ich meine Anwendung vorstellen iris-RAG-Gen .
Iris-RAG-Gen ist eine generative AI Retrieval-Augmented Generation (RAG)-Anwendung, die die Funktionalität von IRIS Vector Search nutzt, um ChatGPT mithilfe des Streamlit-Webframeworks, LangChain und OpenAI zu personalisieren. Die Anwendung verwendet IRIS als Vektorspeicher.
Befolgen Sie die folgenden Schritte, um das Dokument aufzunehmen:
Die Funktion „Dokument aufnehmen“ fügt Dokumentdetails in die Tabelle „rag_documents“ ein und erstellt die Tabelle „rag_document id“ (ID der rag_documents), um Vektordaten zu speichern.
Der folgende Python-Code speichert das ausgewählte Dokument in Vektoren:
from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.document_loaders import PyPDFLoader, TextLoader from langchain_iris import IRISVector from langchain_openai import OpenAIEmbeddings from sqlalchemy import create_engine,text <span>class RagOpr:</span> #Ingest document. Parametres contains file path, description and file type <span>def ingestDoc(self,filePath,fileDesc,fileType):</span> embeddings = OpenAIEmbeddings() #Load the document based on the file type if fileType == "text/plain": loader = TextLoader(filePath) elif fileType == "application/pdf": loader = PyPDFLoader(filePath) #load data into documents documents = loader.load() text_splitter = RecursiveCharacterTextSplitter(chunk_size=400, chunk_overlap=0) #Split text into chunks texts = text_splitter.split_documents(documents) #Get collection Name from rag_doucments table. COLLECTION_NAME = self.get_collection_name(fileDesc,fileType) # function to create collection_name table and store vector data in it. db = IRISVector.from_documents( embedding=embeddings, documents=texts, collection_name = COLLECTION_NAME, connection_string=self.CONNECTION_STRING, ) #Get collection name <span>def get_collection_name(self,fileDesc,fileType):</span> # check if rag_documents table exists, if not then create it with self.engine.connect() as conn: with conn.begin(): sql = text(""" SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'SQLUser' AND TABLE_NAME = 'rag_documents'; """) result = [] try: result = conn.execute(sql).fetchall() except Exception as err: print("An exception occurred:", err) return '' #if table is not created, then create rag_documents table first if len(result) == 0: sql = text(""" CREATE TABLE rag_documents ( description VARCHAR(255), docType VARCHAR(50) ) """) try: result = conn.execute(sql) except Exception as err: print("An exception occurred:", err) return '' #Insert description value with self.engine.connect() as conn: with conn.begin(): sql = text(""" INSERT INTO rag_documents (description,docType) VALUES (:desc,:ftype) """) try: result = conn.execute(sql, {'desc':fileDesc,'ftype':fileType}) except Exception as err: print("An exception occurred:", err) return '' #select ID of last inserted record sql = text(""" SELECT LAST_IDENTITY() """) try: result = conn.execute(sql).fetchall() except Exception as err: print("An exception occurred:", err) return '' return "rag_document"+str(result[0][0])
Geben Sie den folgenden SQL-Befehl im Verwaltungsportal ein, um Vektordaten abzurufen
SELECT top 5 id, embedding, document, metadata FROM SQLUser.rag_document2
Wählen Sie das Dokument im Abschnitt „Chat-Option auswählen“ aus und geben Sie die Frage ein. Die Anwendung liest die Vektordaten und gibt die entsprechende Antwort zurück
Der folgende Python-Code speichert das ausgewählte Dokument in Vektoren:
from langchain_iris import IRISVector from langchain_openai import OpenAIEmbeddings,ChatOpenAI from langchain.chains import ConversationChain from langchain.chains.conversation.memory import ConversationSummaryMemory from langchain.chat_models import ChatOpenAI <span>class RagOpr:</span> <span>def ragSearch(self,prompt,id):</span> #Concat document id with rag_doucment to get the collection name COLLECTION_NAME = "rag_document"+str(id) embeddings = OpenAIEmbeddings() #Get vector store reference db2 = IRISVector ( embedding_function=embeddings, collection_name=COLLECTION_NAME, connection_string=self.CONNECTION_STRING, ) #Similarity search docs_with_score = db2.similarity_search_with_score(prompt) #Prepair the retrieved documents to pass to LLM relevant_docs = ["".join(str(doc.page_content)) + " " for doc, _ in docs_with_score] #init LLM llm = ChatOpenAI( temperature=0, model_name="gpt-3.5-turbo" ) #manage and handle LangChain multi-turn conversations conversation_sum = ConversationChain( llm=llm, memory= ConversationSummaryMemory(llm=llm), verbose=False ) #Create prompt template = f""" Prompt: <span>{prompt} Relevant Docuemnts: {relevant_docs} """</span> #Return the answer resp = conversation_sum(template) return resp['response']
Weitere Informationen finden Sie auf der Seite „offene Austauschbewerbung“ von iris-RAG-Gen.
Danke
Das obige ist der detaillierte Inhalt vonIRIS-RAG-Gen: Personalisierung der ChatGPT RAG-Anwendung, unterstützt von IRIS Vector Search. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!