From 80dae9953e793786d9bb9f1b358df9d3787d09c3 Mon Sep 17 00:00:00 2001 From: "jinli.yl" Date: Mon, 1 Sep 2025 14:19:38 +0800 Subject: [PATCH] refactor(memory): update personal memory flows and adjust related components - Move retrieve_personal_memory and summary_personal_memory flows to new positions in default.yaml - Update info_filter_op to handle trajectories instead of messages - Adjust use_personal_memory_demo to use trajectories in API requests --- .../simple_demo/use_personal_memory_demo.py | 5 ++- reme_ai/config/default.yaml | 36 +++++++++---------- reme_ai/summary/personal/info_filter_op.py | 9 +++-- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/cookbook/simple_demo/use_personal_memory_demo.py b/cookbook/simple_demo/use_personal_memory_demo.py index 80e3a650..231eebec 100644 --- a/cookbook/simple_demo/use_personal_memory_demo.py +++ b/cookbook/simple_demo/use_personal_memory_demo.py @@ -1,5 +1,6 @@ import asyncio import json + import aiohttp # API base URL @@ -45,7 +46,9 @@ async def main(): async with session.post( f"{base_url}/summary_personal_memory", json={ - "messages": messages, + "trajectories": [ + {"messages": messages, "score": 1.0} + ], "workspace_id": workspace_id, }, headers={"Content-Type": "application/json"} diff --git a/reme_ai/config/default.yaml b/reme_ai/config/default.yaml index 4e410ab3..585609c8 100644 --- a/reme_ai/config/default.yaml +++ b/reme_ai/config/default.yaml @@ -34,6 +34,24 @@ flow: description: "A list of conversation trajectory information, including message content and score. This field does not need to be filled in, the system will complete it automatically." required: false + retrieve_personal_memory: + flow_content: set_query_op >> (extract_time_op | (retrieve_memory_op >> semantic_rank_op)) >> fuse_rerank_op + description: "Retrieves the most relevant personal memories from historical data based on the query to enhance response quality" + input_schema: + query: + type: "str" + description: "user query" + required: true + + 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 + description: "Consolidates user observations and memories by filtering information and removing redundancies for efficient storage" + input_schema: + trajectories: + type: "list" + description: "A list of conversation trajectory information, including message content and score. This field does not need to be filled in, the system will complete it automatically." + required: false + retrieve_task_memory_simple: flow_content: build_query_op >> recall_vector_store_op >> merge_memory_op description: "Retrieves the most relevant top-k memory experiences from historical data based on the current query with simplified processing" @@ -62,24 +80,6 @@ flow: required: true enum: [ copy, delete, delete_ids, dump, load ] - retrieve_personal_memory: - flow_content: set_query_op >> (extract_time_op | (retrieve_memory_op >> semantic_rank_op)) >> fuse_rerank_op - description: "Retrieves the most relevant personal memories from historical data based on the query to enhance response quality" - input_schema: - query: - type: "str" - description: "user query" - required: true - - 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 - description: "Consolidates user observations and memories by filtering information and removing redundancies for efficient storage" - input_schema: - messages: - type: "list" - description: "A list of conversation messages information. This field does not need to be filled in, the system will complete it automatically." - required: false - record_task_memory: flow_content: update_memory_freq_op >> update_memory_utility_op >> update_vector_store_op description: "Update the freq & utility attributes of retrieved task memories" diff --git a/reme_ai/summary/personal/info_filter_op.py b/reme_ai/summary/personal/info_filter_op.py index d515b41e..97d054d4 100644 --- a/reme_ai/summary/personal/info_filter_op.py +++ b/reme_ai/summary/personal/info_filter_op.py @@ -2,7 +2,7 @@ import re from typing import List from flowllm import C, BaseLLMOp -from flowllm.schema.message import Message +from flowllm.schema.message import Message, Trajectory from loguru import logger from reme_ai.schema.memory import PersonalMemory @@ -19,7 +19,12 @@ class InfoFilterOp(BaseLLMOp): def execute(self): """Filter messages based on information content scores""" # Get messages from context - guaranteed to exist by flow input - self.context.messages = [Message(**x) if isinstance(x, dict) else x for x in self.context.messages] + trajectories: list = self.context.trajectories + trajectories: List[Trajectory] = [Trajectory(**x) if isinstance(x, dict) else x for x in trajectories] + + self.context.messages = [] + for trajectory in trajectories: + self.context.messages.extend(trajectory.messages) messages: List[Message] = self.context.messages if not messages: logger.warning("No messages found in context")