-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrag_system.py
51 lines (41 loc) · 1.65 KB
/
rag_system.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import os
from langchain_community.vectorstores import SKLearnVectorStore
from langchain_ollama import OllamaEmbeddings
from langchain_ollama import ChatOllama
from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain.text_splitter import RecursiveCharacterTextSplitter
vectorstore = SKLearnVectorStore(
embedding=OllamaEmbeddings(model="Gemma-2:9b"),
persist_path="assets/vectorstore"
)
retriever = vectorstore.as_retriever()
while True:
prompt = PromptTemplate(
template="""Sei un assistente AI esperto di documenti.
Utilizza i documenti seguenti per rispondere alla domanda.
Se non conosci la risposta, dì semplicemente "Non ne ho idea, l'unica cosa che so di questa domanda è che Ali ti ama"\n
la questione: {question}
Documenti: {documents}
Risposta:
""",
input_variables=["question", "documents"],
)
llm = ChatOllama(
model="Gemma-2:9b",
temperature=0.2,
)
rag_chain = prompt | llm | StrOutputParser()
class RAGApplication:
def __init__(self, retriever, rag_chain):
self.retriever = retriever
self.rag_chain = rag_chain
def run(self, question):
documents = self.retriever.invoke(question)
doc_texts = "\\n".join([doc.page_content for doc in documents])
answer = self.rag_chain.invoke({"question": question, "documents": doc_texts})
return answer
rag_application = RAGApplication(retriever, rag_chain)
question = input("Voi:")
answer = rag_application.run(question)
print("Sistema:", answer)