- Removed detailed data structure definitions for TaskMemory and Trajectory - Eliminated extensive examples and usage instructions for record_task_memory and delete_task_memory - Removed comparison table with Tool Memory and best practices section - Simplified build_query_op and rewrite_memory_op documentation by removing processing flows - Removed detailed examples and parameter descriptions for simple_summary_op- Added new tool_memory.md documentation with complete tool memory implementation - Added new tool_retrieve_ops.md documentation with detailed retrieval operations- Created comprehensive tool memory data structures and API documentation - Added usage examples and integration workflows for tool memory operations - Documented configuration parameters and best practices for tool memory management
5.6 KiB
Task Memory in ReMe
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 applied- Metadata 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.