Gant f950e3b48e make CodeAct paper link correct (#1870) 1 an în urmă
..
SWE_agent dcb5d1ce0a Add permanent storage option for EventStream (#1697) 1 an în urmă
codeact_agent f950e3b48e make CodeAct paper link correct (#1870) 1 an în urmă
delegator_agent b028bd46bb Use messages to drive tasks (#1688) 1 an în urmă
dummy_agent 9856e76c1f add BrowseInteractiveAction in dummy agent (#1852) 1 an în urmă
micro 76abca361c feat: simplify state.history with to_memory call in micro-agent. Or the call to LLM may exceed the token limit. (#1806) 1 an în urmă
monologue_agent b6ff201780 Refactor integration test framework and relieve the pain of regeneration (#1818) 1 an în urmă
planner_agent b6ff201780 Refactor integration test framework and relieve the pain of regeneration (#1818) 1 an în urmă
README.md b028bd46bb Use messages to drive tasks (#1688) 1 an în urmă
__init__.py fadcdc117e Migrate to new folder structure in preparation for refactor (#1531) 1 an în urmă

README.md

Agent Framework Research

In this folder, there may exist multiple implementations of Agent that will be used by the framework.

For example, agenthub/monologue_agent, agenthub/metagpt_agent, agenthub/codeact_agent, etc. Contributors from different backgrounds and interests can choose to contribute to any (or all!) of these directions.

Constructing an Agent

The abstraction for an agent can be found here.

Agents are run inside of a loop. At each iteration, agent.step() is called with a State input, and the agent must output an Action.

Every agent also has a self.llm which it can use to interact with the LLM configured by the user. See the LiteLLM docs for self.llm.completion.

State

The state contains:

  • A history of actions taken by the agent, as well as any observations (e.g. file content, command output) from those actions
  • A list of actions/observations that have happened since the most recent step
  • A root_task, which contains a plan of action
    • The agent can add and modify subtasks through the AddTaskAction and ModifyTaskAction

Actions

Here is a list of available Actions, which can be returned by agent.step():

You can use action.to_dict() and action_from_dict to serialize and deserialize actions.

Observations

There are also several types of Observations. These are typically available in the step following the corresponding Action. But they may also appear as a result of asynchronous events (e.g. a message from the user, logs from a command running in the background).

Here is a list of available Observations:

You can use observation.to_dict() and observation_from_dict to serialize and deserialize observations.

Interface

Every agent must implement the following methods:

step

def step(self, state: "State") -> "Action"

step moves the agent forward one step towards its goal. This probably means sending a prompt to the LLM, then parsing the response into an Action.

search_memory

def search_memory(self, query: str) -> list[str]:

search_memory should return a list of events that match the query. This will be used for the recall action.

You can optionally just return [] for this method, meaning the agent has no long-term memory.