One-shot action selection
Choosing a cognitive action
The plan:
Choosing actions
Let’s start by just making a prompt for choosing an action, without hooking it up to actually executing the action. This way, we can check whether the model is even capable of making reasonable choices.
There’s a long list of actions we could choose between. For this first version, we’ll limit ourselves to:
Web search
Computation
Reasoning
Representing actions
Let’s first represent the actions as a data type. For each action we’ll also store an associated description that will help the model choose between them, and the recipe that runs the action:
from dataclasses import dataclass
from typing import Protocol
from ice.recipes.primer.answer_by_computation import answer_by_computation
from ice.recipes.primer.answer_by_reasoning import answer_by_reasoning
from ice.recipes.primer.answer_by_search import answer_by_search
class QuestionRecipe(Protocol):
async def __call__(self, question: str) -> str:
...
@dataclass
class Action:
name: str
description: str
recipe: QuestionRecipe
action_types = [
Action(
name="Web search",
description="Run a web search using Google. This is helpful if the question depends on obscure facts or current information, such as the weather or the latest news.",
recipe=answer_by_search,
),
Action(
name="Computation",
description="Run a computation in Python. This is helpful if the question depends on calculation or other mechanical processes that you can specify in a short program.",
recipe=answer_by_computation,
),
Action(
name="Reasoning",
description="Write out the reasoning steps. This is helpful if the question involves logical deduction or evidence-based reasoning.",
recipe=answer_by_reasoning,
),
]From actions to prompts
We render the actions as an action selection prompt like this:
So, make_action_selection_prompt("How many people live in Germany?") results in:
Choosing the right action
We’ll treat action choice as a classification task, and print out the probability of each action:
Let’s test it:
Web search seems like the correct solution here.
Clearly a computation question.
Reasoning makes sense here.
Mostly a web search question, but might need some clarification.
Executing actions
Now let’s combine the action selector with the chapters on web search, computation, and reasoning to get a single agent that can choose the appropriate action.
This is extremely straightforward—since all the actions are already associated with subrecipes, all we need to do is run the chosen subrecipe:
Let’s try it with our examples above:
These are arguably better answers than we’d get without augmentation.

Exercises
Suppose that actions are taking place within the context of a long document. Add an action type for searching for a particular phrase in the document and returning the results.
Add an action type for debate:
Last updated