Configuration Logic

ReMe's personal memory system consists of two main components: retrieval and summarization. The configuration for these components is defined in the default.yaml file.

Retrieval Configuration (retrieve_personal_memory)

retrieve_personal_memory:
  flow_content: set_query_op >> (extract_time_op | (retrieve_memory_op >> semantic_rank_op)) >> fuse_rerank_op

This flow performs the following operations: 1. set_query_op: Prepares the query for memory retrieval 2. Parallel paths: - extract_time_op: Extracts time-related information from the query - retrieve_memory_op >> semantic_rank_op: Retrieves memories and ranks them semantically 3. fuse_rerank_op: Combines and reranks the results for final output

Summarization Configuration (summary_personal_memory)

summary_personal_memory:
  flow_content: info_filter_op >> (get_observation_op | get_observation_with_time_op | load_today_memory_op) >> contra_repeat_op >> update_vector_store_op

This flow performs the following operations: 1. info_filter_op: Filters incoming information to extract relevant personal details 2. Parallel paths for observation extraction: - get_observation_op: Extracts general observations - get_observation_with_time_op: Extracts observations with time context - load_today_memory_op: Loads memories from the current day 3. contra_repeat_op: Removes contradictions and repetitions 4. update_vector_store_op: Stores the processed memories in the vector database

Basic Usage

The following example demonstrates how to use personal memory in MemoryScope:

1. Setup

import asyncio
import json
import aiohttp

# API base URL (default is http://0.0.0.0:8002)
base_url = "http://0.0.0.0:8002"
workspace_id = "personal_memory_demo"

2. Clear Existing Memories

async with aiohttp.ClientSession() as session:
    # Delete existing workspace memories
    async with session.post(
        f"{base_url}/vector_store",
        json={
            "action": "delete",
            "workspace_id": workspace_id,
        },
        headers={"Content-Type": "application/json"}
    ) as response:
        result = await response.json()

3. Create Conversation with Personal Information

# Example conversation with personal details
messages = [
    {"role": "user", "content": "My name is John Smith, I'm 28 years old"},
    {"role": "assistant", "content": "Nice to meet you, John!"},
    {"role": "user", "content": "I'm a software engineer working with Python"},
    {"role": "assistant", "content": "I see, you're a Python engineer."},
    # Additional conversation messages...
]

4. Summarize Personal Memories

async with session.post(
    f"{base_url}/summary_personal_memory",
    json={
        "trajectories": [
            {"messages": messages, "score": 1.0}
        ],
        "workspace_id": workspace_id,
    },
    headers={"Content-Type": "application/json"}
) as response:
    result = await response.json()

5. Retrieve Personal Memories

# Example queries to retrieve personal information
queries = [
    "What's my name and age?",
    "What do I do for work?",
    "What are my hobbies?"
]

for query in queries:
    async with session.post(
        f"{base_url}/retrieve_personal_memory",
        json={
            "query": query,
            "workspace_id": workspace_id,
        },
        headers={"Content-Type": "application/json"}
    ) as response:
        result = await response.json()
        print(f"Query: {query}")
        print(f"Answer: {result.get('answer', '')}")

Complete Example

For a complete working example, refer to /cookbook/simple_demo/use_personal_memory_demo.py in the ReMe repository.