INSTRUCTIONS = ''' Your task is to answer questions from the course participants based on the provided context. Use the context to find relevant information and provide accurate answers. If the answer is not found in the context, respond with "I don't know." ''' PROMPT_TEMPLATE = ''' QUESTION: {question} CONTEXT: {context} '''.strip() class RAGBase: def __init__( self, index, llm_client, instructions=INSTRUCTIONS, prompt_template=PROMPT_TEMPLATE, course='llm-zoomcamp', model='gpt-5.4-mini' ): self.index = index self.llm_client = llm_client self.instructions = instructions self.course = course self.prompt_template = prompt_template self.model = model def search(self, query, num_results=5): boost_dict = {'question': 3.0, 'section': 0.5} filter_dict = {'course': self.course} return self.index.search( query, num_results=num_results, boost_dict=boost_dict, filter_dict=filter_dict ) def build_context(self, search_results): lines = [] for doc in search_results: lines.append(doc['section']) lines.append('Q: ' + doc['question']) lines.append('A: ' + doc['answer']) lines.append('') return '\n'.join(lines).strip() def build_prompt(self, query, search_results): context = self.build_context(search_results) return self.prompt_template.format( question=query, context=context ) def llm(self, prompt): input_messages = [ {'role': 'developer', 'content': self.instructions}, {'role': 'user', 'content': prompt} ] response = self.llm_client.responses.create( model=self.model, input=input_messages ) return response.output_text def rag(self, query): search_results = self.search(query) prompt = self.build_prompt(query, search_results) answer = self.llm(prompt) return answer