Skip to content

Instantly share code, notes, and snippets.

@bemijonathan
Last active December 9, 2024 08:50
Show Gist options
  • Save bemijonathan/9d01da95a2081c966ba05494ad592450 to your computer and use it in GitHub Desktop.
Save bemijonathan/9d01da95a2081c966ba05494ad592450 to your computer and use it in GitHub Desktop.
class BaseAgent():
"""Base class for all AI agents in the system."""
def __init__(self, name, role, provider_config, tools):
# initialize the agent
pass
def use_tool(self, tool_name, params):
"""Execute a tool with given parameters"""
tool = self.tools.get(tool_name)
result = tool.execute(params)
return result
def reflect(self, context):
"""
Perform self-reflection on the current context.
Returns structured thoughts about the situation.
"""
# Add available tools to context
context["available_tools"] = list(self.tools.keys())
# there are many ways to implement reflection and context learning
# it can be heirachy of actions e.g for each process get the observation then
# pass the observation to the next process and so on
thought_process = {
"observation": self._observe(context),
"thought": self._think(context),
"reasoning": self._reason(context),
"plan": self._plan(context),
"criticism": self._self_criticize(context)
}
self.memory.append(thought_process)
return thought_process
def __observe__(self, context):
"""Observe and analyze the current context."""
pass
def __think__(self, context):
"""Generate thoughts about the current situation."""
pass
def __reason__(self, context):
"""Provide reasoning about the current situation."""
pass
def __plan__(self, context):
"""Create a plan based on the current context."""
pass
def __self_criticize__(self, context):
"""Provide self-criticism about current thoughts and plans."""
pass
def execute_plan(self, plan, context):
"""Execute a plan using available tools"""
# the prompt here creates an action road map or list of steps to be executed
results = []
for step in plan:
tool_result = self._execute_plan_step(step, context)
results.append(tool_result)
if not tool_result.success:
break
return results
def _execute_plan_step(self, step, context):
"""Execute a single step of the plan"""
pass
def summarize_experience(self):
"""Generate a summary of the agent's experience."""
prompt = f"Summarize the following experiences as {self.role.value}:\n"
for memory in self.memory[-5:]: # Last 5 memories
prompt += f"\nObservation: {memory.observation}\n"
prompt += f"Thought: {memory.thought}\n"
prompt += f"Plan: {', '.join(memory.plan)}\n"
prompt += "---"
return self.get_completion(prompt)
def collaborate(self, other_agent: 'BaseAgent', context):
"""
Collaborate with another agent.
Returns the results of the collaboration.
"""
self.logger.info(f"Collaborating with {other_agent.name}")
my_thoughts = self.reflect(context)
their_thoughts = other_agent.reflect(context)
return {
"collaboration_result": {
f"{self.name}_thoughts": my_thoughts,
f"{other_agent.name}_thoughts": their_thoughts,
}
}
@bemijonathan
Copy link
Author

This is a basic template for an AI agent that includes the key components typically found in such systems: memory, observation, reasoning, planning, reflection/self-criticism, and execution with tools. The template provides a starting point.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment