agent-protocol icon indicating copy to clipboard operation
agent-protocol copied to clipboard

RFC: Output for New Task

Open nalbion opened this issue 1 year ago • 2 comments

Output for New Task

Feature name Output for New Task
Author(s) Nicholas Albion ([email protected])
RFC PR: Leave blank
Updated 2024-02-11

Summary

POST /ap/v1/agent/task should allow an output

Motivation

I struggle to understand how people would be using POST /ap/v1/agent/task, which accepts an optional (!!) input but allows for no output. Can you imagine calling somebody on the phone and the person at the other end picks up, but doesn't say anything? You generally want to hear "Hi, thanks for calling XYZ, if you're calling about ..." - or atleast "Hello..."

An agent could:

  • Ignore (or just log) the task.input and provide a generic welcome/instructional prompt.
  • Use an LLM to process task.input and select a specialist agent to handle the task/steps, and provide a welcome prompt from the specialist agent
  • Provide a rejection message explaining why subsequent requests will not be accepted
  • The client might use the task.output as a title for the task?

Agent Builders Benefit

Agents would be able to provide a welcome message, guiding the user on what to say first.

This allows for greater flexibility & more options:

task.inputtask.ouputcomments
Write the word 'Washington' to a .txt file" undefined AutoGPT logs `task.input`.
User initiates conversation in `POST /agent/task/id/step`
Write the word 'Washington' to a .txt file" "Sorry, I'm unable to write to files" Agent responds to `task.input`
maybe sets `"is_last": true`?
undefined "Hi, welcome to XYZ bank, can we start with your account number?" Agent initiates with welcome prompt
undefined undefined User initiates conversation in `POST /agent/task/id/step`

Design Proposal

Alternatives Considered

  • Remove task.input if the Agent can not respond with task.output.

Compatibility

AutoGPT seems to be sending the same message to createTask() and sendChatMessage() in chat_view.dart#L126:

                  if (widget.viewModel.currentTaskId != null) {
...
                  } else {
                    String newTaskId = await taskViewModel.createTask(message);
                    widget.viewModel.setCurrentTaskId(newTaskId);
                    widget.viewModel.sendChatMessage(
                        (message == "") ? null : message,

In ForgeAgent they suggest that in create_task you might just log the task.input.

   async def create_task(self, task_request: TaskRequestBody) -> Task:
        """
        The agent protocol, which is the core of the Forge, works by creating a task and then
        executing steps for that task. This method is called when the agent is asked to create
        a task.

        We are hooking into function to add a custom log message. Though you can do anything you
        want here.
        """
        task = await super().create_task(task_request)
        LOG.info(
            f"📦 Task created: {task.task_id} input: {task.input[:40]}{'...' if len(task.input) > 40 else ''}"
        )
        return task

Questions and Discussion Topics

Add open questions or options you require feedback on from the community.

nalbion avatar Feb 10 '24 16:02 nalbion

The latest updates on your projects. Learn more about Vercel for Git ↗︎

1 Ignored Deployment
Name Status Preview Comments Updated (UTC)
agentprotocolai ⬜️ Ignored (Inspect) Visit Preview Feb 10, 2024 4:17pm

vercel[bot] avatar Feb 10 '24 16:02 vercel[bot]

as raised in #63

nalbion avatar Feb 10 '24 16:02 nalbion