|
# # QA |
|
|
|
# Questions answering with embeddings. Adapted from [OpenAI |
|
# Notebook](https: |
|
|
|
import datasets |
|
import numpy as np |
|
from minichain import EmbeddingPrompt, TemplatePrompt, show_log, start_chain |
|
|
|
# We use Hugging Face Datasets as the database by assigning |
|
# a FAISS index. |
|
|
|
olympics = datasets.load_from_disk("olympics.data") |
|
olympics.add_faiss_index("embeddings") |
|
|
|
|
|
# Fast KNN retieval prompt |
|
|
|
|
|
class KNNPrompt(EmbeddingPrompt): |
|
def find(self, out, inp): |
|
res = olympics.get_nearest_examples("embeddings", np.array(out), 3) |
|
return {"question": inp, "docs": res.examples["content"]} |
|
|
|
|
|
# QA prompt to ask question with examples |
|
|
|
|
|
class QAPrompt(TemplatePrompt): |
|
template_file = "qa.pmpt.tpl" |
|
|
|
|
|
with start_chain("qa") as backend: |
|
question = "Who won the 2020 Summer Olympics men's high jump?" |
|
prompt = KNNPrompt(backend.OpenAIEmbed()).chain(QAPrompt(backend.OpenAI())) |
|
result = prompt(question) |
|
print(result) |
|
|
|
# + tags=["hide_inp"] |
|
QAPrompt().show( |
|
{"question": "Who won the race?", "docs": ["doc1", "doc2", "doc3"]}, "Joe Bob" |
|
) |
|
# - |
|
|
|
show_log("qa.log") |
|
|