Answering subquestions
Mapping our answerer over subquestions
Now we want to use the subquestions recipe to help a question-answerer like the one we built early on in the primer. We can start with the question-answerer we built earlier and modify it as follows:
Add a call to the subquestions recipe to generate subquestions.
Use
map_asyncto answer all the subquestions in parallel.Provide answers from subquestions as advice in the overall question-answering prompt.
Let’s start with (1) and (2), reusing the subquestions subrecipe:
from fvalues import F
from ice.recipe import recipe
from ice.recipes.primer.subquestions import ask_subquestions
from ice.utils import map_async
def make_qa_prompt(question: str) -> str:
return F(
f"""Answer the following question:
Question: "{question}"
Answer: "
"""
).strip()
async def answer(question: str) -> str:
prompt = make_qa_prompt(question)
answer = await recipe.agent().complete(prompt=prompt, stop='"')
return answer
async def answer_by_amplification(
question: str = "What is the effect of creatine on cognition?",
):
subquestions = await ask_subquestions(question=question)
subanswers = await map_async(subquestions, answer)
return list(zip(subquestions, subanswers))
recipe.main(answer_by_amplification)If we run this, we get back a list of subquestions and their answers:
The trace:

Last updated