ReMe/docs/personal_memory/personal_memory.md

4 KiB

jupytext kernelspec
formats text_representation
md:myst
extension format_name format_version jupytext_version
.md myst 0.13 1.11.5
display_name language name
Python 3 python python3

Personal Memory

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', '')}")

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