Jirka Borovec e32d95cb1a lint: simplify hooks already covered by Ruff (#1204) 1 год назад
..
SWE_agent e32d95cb1a lint: simplify hooks already covered by Ruff (#1204) 1 год назад
codeact_agent 9b48f63544 Fix build error (#1339) 1 год назад
delegator_agent 1e95fa435d Microagents and Delegation (#1238) 1 год назад
micro 5543fe2c3e fix up prompts (#1345) 1 год назад
monologue_agent fd9e598136 add options for controlling memory (#1364) 1 год назад
planner_agent e32d95cb1a lint: simplify hooks already covered by Ruff (#1204) 1 год назад
README.md 3e6508b7f1 Update Langchains Agent, rename to Monologue (#402) 1 год назад
__init__.py 1e95fa435d Microagents and Delegation (#1238) 1 год назад

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 plan, which contains the main goal
    • 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.