githubEdit

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:

  1. Web search

  2. Computation

  3. 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:

answer_by_dispatch/types.py
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.

Execution trace (view onlinearrow-up-right)

Exercises

  1. 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.

  2. Add an action type for debate:

chevron-rightGet feedback on exercise solutionshashtag

If you want feedback on your exercise solutions, submit them through this formarrow-up-right. We—the team at Ought—are happy to give our quick take on whether you missed any interesting ideas.

Last updated