agent-protocol
agent-protocol copied to clipboard
RFC: Output for New Task
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.inputand provide a generic welcome/instructional prompt. - Use an LLM to process
task.inputand 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.outputas 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.input | task.ouput | comments |
|---|---|---|
| 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.inputif the Agent can not respond withtask.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.
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 |
as raised in #63