Skip to main content
The ReflexionAgent implements the Reflexion framework to improve through self-reflection. It follows a process of acting on tasks, evaluating its performance, generating self-reflections, and using these reflections to improve future responses. Based on the research paper: Reflexion: Language Agents with Verbal Reinforcement Learning (Shinn et al., 2023). The agent consists of three specialized sub-agents:
  • Actor: Generates initial responses to tasks
  • Evaluator: Critically assesses responses against quality criteria
  • Reflector: Generates self-reflections to improve future responses

Parameters

Methods

act

Generates a response to the given task using the actor agent.

evaluate

Evaluates the quality of a response to a task. Returns an evaluation string and a score between 0 and 1. The score is the last number after “final score” or “overall score” in the evaluation, divided by 10. If no such number is found, the score is 0.5.

reflect

Generates a self-reflection based on the task, response, and evaluation.

refine

Refines the original response based on evaluation and reflection.

step

Processes a single task through one iteration of the Reflexion process: it acts (or uses previous_response when given), evaluates, reflects, and stores the result in memory. Returns a dictionary with the keys task, response, evaluation, reflection, score and iteration.

run

Executes the full Reflexion process for a list of tasks, one task at a time.
For each task, the first iteration acts, evaluates and reflects. Each later iteration refines the previous response with its evaluation and reflection, then evaluates and reflects again. The loop stops after max_loops iterations, or early once a score exceeds 0.9. run() returns one item per task. By default that item is the response with the highest score. With include_intermediates=True it is the list of step() dictionaries for every iteration. Each task and its best response are also added to agent.conversation.
run() takes a list of tasks, not a single string. Wrap a single task in a list.

Example

Memory System

The agent includes a ReflexionMemory system that maintains both short-term and long-term memories of past experiences, reflections, and feedback.
  • Short-term memory keeps the 10 most recent step() results.
  • Long-term memory receives a step’s result when its score is above 0.8 or it is the last iteration. It holds up to memory_capacity entries and drops the oldest first.
  • Deduplication skips a long-term entry when the words of its task and reflection have a Jaccard similarity above 0.8 with an existing entry.
  • Retrieval with agent.memory.get_relevant_memories(task, limit=5) ranks short-term and long-term entries by the words they share with the task.
act() adds the reflections from relevant_memories to the actor’s prompt. Inside run(), refinement works from the previous iteration’s evaluation and reflection rather than from retrieved memories.

Best Practices

  1. Task Clarity: Provide clear, specific tasks to get the best results
  2. Iteration Count: Adjust max_loops based on task complexity (more complex tasks benefit from more iterations)
  3. Memory Management: Monitor memory usage and adjust memory_capacity as needed
  4. Model Selection: Choose an appropriate model based on your specific use case