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
This commit is contained in:
jinli.yl 2025-09-01 14:19:38 +08:00
parent b2ac7cb6ca
commit 80dae9953e
3 changed files with 29 additions and 21 deletions

View file

@ -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"}

View file

@ -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"

View file

@ -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")