Task Memory¶
Task Memory is a key component of ReMe that allows AI agents to learn from memories and improve their performance on similar tasks in the future. This document explains how task memory works and how to use it in your applications.
What is Task Memory?¶
Task Memory represents knowledge extracted from previous task executions, including:
Successful approaches to solving problems
Common pitfalls and failures to avoid
Comparative insights between different approaches
Each task memory contains:
when_to_use: Conditions that indicate when this memory is relevantcontent: The actual knowledge or memory to be appliedMetadata about the memory’s source and utility
Configuration Logic¶
Task Memory in ReMe is configured through two main flows:
1. Summary Task Memory¶
The summary_task_memory flow processes conversation trajectories to extract meaningful memories:
summary_task_memory:
flow_content: trajectory_preprocess_op >> (success_extraction_op|failure_extraction_op|comparative_extraction_op) >> memory_validation_op >> update_vector_store_op
description: "Summarizes conversation trajectories or messages into structured memory representations for long-term storage"
This flow:
Preprocesses trajectories (
trajectory_preprocess_op)Extracts memories based on success/failure/comparative analysis
Validates memories (
memory_validation_op)Updates the vector store (
update_vector_store_op)
A simplified version (summary_task_memory_simple) is also available for less complex use cases.
2. Retrieve Task Memory¶
The retrieve_task_memory flow fetches relevant memories based on a query:
retrieve_task_memory:
flow_content: build_query_op >> recall_vector_store_op >> rerank_memory_op >> rewrite_memory_op
description: "Retrieves the most relevant top-k memory from historical data based on the current query to enhance task-solving capabilities"
This flow:
Builds a query from the input (
build_query_op)Recalls relevant memories from the vector store (
recall_vector_store_op)Reranks memories by relevance (
rerank_memory_op)Rewrites memories for better context integration (
rewrite_memory_op)
A simplified version (retrieve_task_memory_simple) is also available.
Basic Usage¶
Here’s how to use Task Memory in your application:
Step 1: Set Up Your Environment¶
import requests
# API configuration
BASE_URL = "http://0.0.0.0:8002/"
WORKSPACE_ID = "your_workspace_id"
Step 2: Run an Agent and Generate Memories¶
# Run the agent with a query
response = requests.post(
url=f"{BASE_URL}react",
json={"query": "Your query here"}
)
messages = response.json().get("messages", [])
# Summarize the conversation to create task memories
response = requests.post(
url=f"{BASE_URL}summary_task_memory",
json={
"workspace_id": WORKSPACE_ID,
"trajectories": [
{"messages": messages, "score": 1.0}
]
}
)
Step 3: Retrieve Relevant Memories for a New Task¶
# Retrieve memories relevant to a new query
response = requests.post(
url=f"{BASE_URL}retrieve_task_memory",
json={
"workspace_id": WORKSPACE_ID,
"query": "Your new query here"
}
)
retrieved_memory = response.json().get("answer", "")
Step 4: Use Retrieved Memories to Enhance Agent Performance¶
# Augment a new query with retrieved memories
augmented_query = f"{retrieved_memory}\n\nUser Question:\n{your_query}"
# Run agent with the augmented query
response = requests.post(
url=f"{BASE_URL}react",
json={"query": augmented_query}
)
Complete Example¶
Here’s a complete example workflow that demonstrates how to use task memory:
def run_agent_with_memory(query_first, query_second):
# Run agent with second query to build initial memories
messages = run_agent(query=query_second)
# Summarize conversation to create memories
requests.post(
url=f"{BASE_URL}summary_task_memory",
json={
"workspace_id": WORKSPACE_ID,
"trajectories": [
{"messages": messages, "score": 1.0}
]
}
)
# Retrieve relevant memories for the first query
response = requests.post(
url=f"{BASE_URL}retrieve_task_memory",
json={
"workspace_id": WORKSPACE_ID,
"query": query_first
}
)
retrieved_memory = response.json().get("answer", "")
# Run agent with first query augmented with retrieved memories
augmented_query = f"{retrieved_memory}\n\nUser Question:\n{query_first}"
return run_agent(query=augmented_query)
Managing Task Memories¶
Delete a Workspace¶
response = requests.post(
url=f"{BASE_URL}vector_store",
json={
"workspace_id": WORKSPACE_ID,
"action": "delete"
}
)
Dump Memories to Disk¶
response = requests.post(
url=f"{BASE_URL}vector_store",
json={
"workspace_id": WORKSPACE_ID,
"action": "dump",
"path": "./"
}
)
Load Memories from Disk¶
response = requests.post(
url=f"{BASE_URL}vector_store",
json={
"workspace_id": WORKSPACE_ID,
"action": "load",
"path": "./"
}
)
Advanced Features¶
ReMe also provides additional task memory operations:
record_task_memory: Update frequency and utility attributes of retrieved memoriesdelete_task_memory: Delete memories based on utility/frequency thresholds
For more detailed examples, see the use_task_memory_demo.py file in the cookbook directory of the ReMe project.