llama_index icon indicating copy to clipboard operation
llama_index copied to clipboard

[Question]: Does agent creation reset memory?

Open risos8200 opened this issue 9 months ago • 3 comments

Question Validation

  • [X] I have searched both the documentation and discord for an answer.

Question

I am trying to dynamically create agents with memory based on user key on session creation from storage. But it clears the memory of the past conversation as soon as the agent is created? Any way to avoid that?

def initialize_agent(user_key):
        chat_store= SimpleChatStore.from_persist_path("./chat_store.json")
        memory = ChatMemoryBuffer.from_defaults(
        token_limit=3000,
        chat_store=chat_store,
        chat_store_key=user_key,
        )
        print('before agent',memory) # for debugging: past memory available here
        agent = ReActAgent.from_tools(my_tool_list, llm=llm, memory=memory, verbose=True)
        agent.update_prompts({"agent_worker:system_prompt": react_system_prompt})
        agent.reset()
        print('after agent',memory) # for debugging: past memory erased here

risos8200 avatar May 07 '24 05:05 risos8200

To avoid the memory reset when dynamically creating agents, the key is to adjust how you use the reset method on the ReActAgent. The memory is cleared because the reset method, by default, clears the agent's memory. If you want to keep the memory intact, you should modify the reset method in your agent's implementation to include a parameter that controls whether to clear the memory.

Here's a quick guide on how to do it:

  1. Modify the reset method in the ReActAgent class to accept a clear_memory boolean parameter. By default, set this to True. When clear_memory is False, the method should skip the memory clearing step.

  2. Update your initialize_agent function to call reset with clear_memory=False when you want to preserve the memory after agent creation.

Example modification for the reset method:

def reset(self, clear_memory: bool = True):
    if clear_memory:
        self._memory.reset()

And then in your initialize_agent function:

agent.reset(clear_memory=False)

This approach allows you to dynamically create agents with preserved memory, avoiding the issue of memory being cleared upon agent creation.

Details

Sources


About Dosu This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

To continue the conversation, mention @dosu.

dosubot[bot] avatar May 07 '24 05:05 dosubot[bot]

@risos8200 agent.reset() resets the memory -- any reason to run this when the agent was just created? I would just remove this line

logan-markewich avatar May 07 '24 15:05 logan-markewich

@logan-markewich It gives this error if I don't

'dict' object has no attribute 'content'

risos8200 avatar May 07 '24 16:05 risos8200