def answer(query): | |
# Encode the query using the bi-encoder and find potentially relevant passages | |
question_embedding = bi_encoder.encode(query, convert_to_tensor=True) | |
hits = util.semantic_search(question_embedding, corpus_embeddings, top_k=top_k) | |
hits = [hit for hit in hits[0]] | |
hits = sorted([hit['corpus_id'] for hit in hits]) | |
context = "\n".join([passages[hit] for hit in hits]) | |
template = """Context: | |
<<context>> | |
Answer the following question by paraphrasing it and then elaborate the answer: | |
Q: <<query>> | |
A: | |
""" | |
prompt = template.replace('<<context>>', context).replace('<<query>>', query) | |
prompt_length = len(tokenizer(prompt)['input_ids']) | |
response = openai.Completion.create(engine="text-davinci-003", prompt=prompt, max_tokens=4096-prompt_length, temperature=0.2) | |
return response['choices'][0]['text'] |