From 2965a22e1d846cfd261d1ce5e23fcfdc9a46b16e Mon Sep 17 00:00:00 2001 From: seehi <6580@pm.me> Date: Fri, 11 Oct 2024 15:12:24 +0800 Subject: [PATCH 1/4] make memory_k configurable --- config/config2.example.yaml | 1 + metagpt/configs/role_zero_config.py | 1 + metagpt/roles/di/role_zero.py | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/config/config2.example.yaml b/config/config2.example.yaml index 74d2ab880..fd4409f97 100644 --- a/config/config2.example.yaml +++ b/config/config2.example.yaml @@ -86,6 +86,7 @@ exp_pool: role_zero: enable_longterm_memory: false # Whether to use long-term memory. Default is `false`. longterm_memory_persist_path: .role_memory_data # The directory to save data. + memory_k: 200 # The capacity of short-term memory. azure_tts_subscription_key: "YOUR_SUBSCRIPTION_KEY" azure_tts_region: "eastus" diff --git a/metagpt/configs/role_zero_config.py b/metagpt/configs/role_zero_config.py index ada5afb63..21d50a3ac 100644 --- a/metagpt/configs/role_zero_config.py +++ b/metagpt/configs/role_zero_config.py @@ -6,3 +6,4 @@ from metagpt.utils.yaml_model import YamlModel class RoleZeroConfig(YamlModel): enable_longterm_memory: bool = Field(default=False, description="Whether to use long-term memory.") longterm_memory_persist_path: str = Field(default=".role_memory_data", description="The directory to save data.") + memory_k: int = Field(default=200, description="The capacity of short-term memory.") diff --git a/metagpt/roles/di/role_zero.py b/metagpt/roles/di/role_zero.py index fda29add9..b202fd3cc 100644 --- a/metagpt/roles/di/role_zero.py +++ b/metagpt/roles/di/role_zero.py @@ -179,11 +179,12 @@ class RoleZero(Role): """ if self.config.role_zero.enable_longterm_memory: + # Use config.role_zero to initialize long-term memory self.rc.memory = RoleZeroLongTermMemory( **self.rc.memory.model_dump(), persist_path=self.config.role_zero.longterm_memory_persist_path, collection_name=self.name.replace(" ", ""), - memory_k=self.memory_k, + memory_k=self.config.role_zero.memory_k, ) logger.info(f"Long-term memory set for role '{self.name}'") From dd955c848dca05017c971c60da52589f9f332130 Mon Sep 17 00:00:00 2001 From: seehi <6580@pm.me> Date: Fri, 11 Oct 2024 15:37:33 +0800 Subject: [PATCH 2/4] make similarity_top_k configurable --- config/config2.example.yaml | 1 + metagpt/configs/role_zero_config.py | 1 + metagpt/memory/role_zero_memory.py | 7 ++++++- metagpt/roles/di/role_zero.py | 1 + 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/config/config2.example.yaml b/config/config2.example.yaml index fd4409f97..6d6e32383 100644 --- a/config/config2.example.yaml +++ b/config/config2.example.yaml @@ -87,6 +87,7 @@ role_zero: enable_longterm_memory: false # Whether to use long-term memory. Default is `false`. longterm_memory_persist_path: .role_memory_data # The directory to save data. memory_k: 200 # The capacity of short-term memory. + similarity_top_k: 5 # The number of long-term memories to retrieve. azure_tts_subscription_key: "YOUR_SUBSCRIPTION_KEY" azure_tts_region: "eastus" diff --git a/metagpt/configs/role_zero_config.py b/metagpt/configs/role_zero_config.py index 21d50a3ac..17cb295ab 100644 --- a/metagpt/configs/role_zero_config.py +++ b/metagpt/configs/role_zero_config.py @@ -7,3 +7,4 @@ class RoleZeroConfig(YamlModel): enable_longterm_memory: bool = Field(default=False, description="Whether to use long-term memory.") longterm_memory_persist_path: str = Field(default=".role_memory_data", description="The directory to save data.") memory_k: int = Field(default=200, description="The capacity of short-term memory.") + similarity_top_k: int = Field(default=5, description="The number of long-term memories to retrieve.") diff --git a/metagpt/memory/role_zero_memory.py b/metagpt/memory/role_zero_memory.py index 5c7fb94a2..87973ba3b 100644 --- a/metagpt/memory/role_zero_memory.py +++ b/metagpt/memory/role_zero_memory.py @@ -31,6 +31,7 @@ class RoleZeroLongTermMemory(Memory): persist_path: str = Field(default=".role_memory_data", description="The directory to save data.") collection_name: str = Field(default="role_zero", description="The name of the collection, such as the role name.") memory_k: int = Field(default=200, description="The capacity of short-term memory.") + similarity_top_k: int = Field(default=5, description="The number of long-term memories to retrieve.") _rag_engine: Any = None @@ -54,7 +55,11 @@ class RoleZeroLongTermMemory(Memory): raise ImportError("To use the RoleZeroMemory, you need to install the rag module.") retriever_configs = [ - ChromaRetrieverConfig(persist_path=self.persist_path, collection_name=self.collection_name) + ChromaRetrieverConfig( + persist_path=self.persist_path, + collection_name=self.collection_name, + similarity_top_k=self.similarity_top_k, + ) ] ranker_configs = [] diff --git a/metagpt/roles/di/role_zero.py b/metagpt/roles/di/role_zero.py index b202fd3cc..8c636ad38 100644 --- a/metagpt/roles/di/role_zero.py +++ b/metagpt/roles/di/role_zero.py @@ -185,6 +185,7 @@ class RoleZero(Role): persist_path=self.config.role_zero.longterm_memory_persist_path, collection_name=self.name.replace(" ", ""), memory_k=self.config.role_zero.memory_k, + similarity_top_k=self.config.role_zero.similarity_top_k, ) logger.info(f"Long-term memory set for role '{self.name}'") From 63abddd041cbb03bb98808cde59a43c5bc446849 Mon Sep 17 00:00:00 2001 From: seehi <6580@pm.me> Date: Sat, 12 Oct 2024 17:51:14 +0800 Subject: [PATCH 3/4] make use_llm_ranker configurable --- config/config2.example.yaml | 1 + metagpt/configs/role_zero_config.py | 1 + metagpt/memory/role_zero_memory.py | 5 +++-- metagpt/roles/di/role_zero.py | 1 + 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/config/config2.example.yaml b/config/config2.example.yaml index 6d6e32383..48f8fb9d8 100644 --- a/config/config2.example.yaml +++ b/config/config2.example.yaml @@ -88,6 +88,7 @@ role_zero: longterm_memory_persist_path: .role_memory_data # The directory to save data. memory_k: 200 # The capacity of short-term memory. similarity_top_k: 5 # The number of long-term memories to retrieve. + use_llm_ranker: false # Default is `false`, if set to `true`, it will use LLM Reranker to get better result. azure_tts_subscription_key: "YOUR_SUBSCRIPTION_KEY" azure_tts_region: "eastus" diff --git a/metagpt/configs/role_zero_config.py b/metagpt/configs/role_zero_config.py index 17cb295ab..91d554b2f 100644 --- a/metagpt/configs/role_zero_config.py +++ b/metagpt/configs/role_zero_config.py @@ -8,3 +8,4 @@ class RoleZeroConfig(YamlModel): longterm_memory_persist_path: str = Field(default=".role_memory_data", description="The directory to save data.") memory_k: int = Field(default=200, description="The capacity of short-term memory.") similarity_top_k: int = Field(default=5, description="The number of long-term memories to retrieve.") + use_llm_ranker: bool = Field(default=False, description="Whether to use LLM Reranker to get better result.") diff --git a/metagpt/memory/role_zero_memory.py b/metagpt/memory/role_zero_memory.py index 87973ba3b..bdb0967f8 100644 --- a/metagpt/memory/role_zero_memory.py +++ b/metagpt/memory/role_zero_memory.py @@ -32,6 +32,7 @@ class RoleZeroLongTermMemory(Memory): collection_name: str = Field(default="role_zero", description="The name of the collection, such as the role name.") memory_k: int = Field(default=200, description="The capacity of short-term memory.") similarity_top_k: int = Field(default=5, description="The number of long-term memories to retrieve.") + use_llm_ranker: bool = Field(default=False, description="Whether to use LLM Reranker to get better result.") _rag_engine: Any = None @@ -50,7 +51,7 @@ class RoleZeroLongTermMemory(Memory): try: from metagpt.rag.engines import SimpleEngine - from metagpt.rag.schema import ChromaRetrieverConfig + from metagpt.rag.schema import ChromaRetrieverConfig, LLMRankerConfig except ImportError: raise ImportError("To use the RoleZeroMemory, you need to install the rag module.") @@ -61,7 +62,7 @@ class RoleZeroLongTermMemory(Memory): similarity_top_k=self.similarity_top_k, ) ] - ranker_configs = [] + ranker_configs = [LLMRankerConfig()] if self.use_llm_ranker else [] rag_engine = SimpleEngine.from_objs(retriever_configs=retriever_configs, ranker_configs=ranker_configs) diff --git a/metagpt/roles/di/role_zero.py b/metagpt/roles/di/role_zero.py index 8c636ad38..957fa4257 100644 --- a/metagpt/roles/di/role_zero.py +++ b/metagpt/roles/di/role_zero.py @@ -186,6 +186,7 @@ class RoleZero(Role): collection_name=self.name.replace(" ", ""), memory_k=self.config.role_zero.memory_k, similarity_top_k=self.config.role_zero.similarity_top_k, + use_llm_ranker=self.config.role_zero.use_llm_ranker, ) logger.info(f"Long-term memory set for role '{self.name}'") From 80cc5d649d94a1f6d06967574713c0425a09a63b Mon Sep 17 00:00:00 2001 From: seehi <6580@pm.me> Date: Sat, 12 Oct 2024 17:52:50 +0800 Subject: [PATCH 4/4] make use_llm_ranker configurable --- config/config2.example.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config2.example.yaml b/config/config2.example.yaml index 48f8fb9d8..f6970dabe 100644 --- a/config/config2.example.yaml +++ b/config/config2.example.yaml @@ -88,7 +88,7 @@ role_zero: longterm_memory_persist_path: .role_memory_data # The directory to save data. memory_k: 200 # The capacity of short-term memory. similarity_top_k: 5 # The number of long-term memories to retrieve. - use_llm_ranker: false # Default is `false`, if set to `true`, it will use LLM Reranker to get better result. + use_llm_ranker: false # Whether to use LLM Reranker to get better result. Default is `false`. azure_tts_subscription_key: "YOUR_SUBSCRIPTION_KEY" azure_tts_region: "eastus"