File size: 1,355 Bytes
dbd33b2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import ollama

class RAGSystem:
    def __init__(self, data_processor):
        self.data_processor = data_processor
        self.model = "phi3.5"  # Using Phi-3.5 model

    def query(self, user_query, top_k=3, search_method='hybrid'):
        # Retrieve relevant documents using the specified search method
        relevant_docs = self.data_processor.search(user_query, num_results=top_k, method=search_method)
        
        # Construct the prompt
        context = "\n".join([doc['content'] for doc in relevant_docs])
        prompt = f"Context: {context}\n\nQuestion: {user_query}\n\nAnswer:"
        
        # Generate response using Ollama
        response = ollama.generate(model=self.model, prompt=prompt)
        
        return response['response']

    def rerank_documents(self, documents, query):
        # Implement a simple re-ranking strategy
        # This could be improved with more sophisticated methods
        reranked = sorted(documents, key=lambda doc: self.calculate_relevance(doc['content'], query), reverse=True)
        return reranked

    def calculate_relevance(self, document, query):
        # Simple relevance calculation based on word overlap
        doc_words = set(document.lower().split())
        query_words = set(query.lower().split())
        return len(doc_words.intersection(query_words)) / len(query_words)