diff --git a/api/app/controllers/memory_storage_controller.py b/api/app/controllers/memory_storage_controller.py index 022615ff..e8e725d8 100644 --- a/api/app/controllers/memory_storage_controller.py +++ b/api/app/controllers/memory_storage_controller.py @@ -23,11 +23,11 @@ from app.schemas.memory_storage_schema import ( ConfigUpdate, ConfigUpdateExtracted, ConfigUpdateForget, + GenerateCacheRequest, ) from app.schemas.response_schema import ApiResponse from app.services.memory_storage_service import ( DataConfigService, - GenerateCacheRequest, MemoryStorageService, analytics_hot_memory_tags, analytics_recent_activity_stats, @@ -41,6 +41,7 @@ from app.services.memory_storage_service import ( search_entity_graph, search_statement, ) +from app.services.user_memory_service import analytics_user_summary from fastapi import APIRouter, Depends from fastapi.responses import StreamingResponse from sqlalchemy.orm import Session diff --git a/api/app/core/memory/evaluation/locomo/locomo_benchmark.py b/api/app/core/memory/evaluation/locomo/locomo_benchmark.py index 4992aa29..b7d988c5 100644 --- a/api/app/core/memory/evaluation/locomo/locomo_benchmark.py +++ b/api/app/core/memory/evaluation/locomo/locomo_benchmark.py @@ -23,7 +23,6 @@ except ImportError: def load_dotenv(): pass -from app.core.memory.client_factory import MemoryClientFactory from app.core.memory.evaluation.common.metrics import ( avg_context_tokens, bleu1, @@ -51,6 +50,7 @@ from app.core.memory.utils.definitions import ( SELECTED_GROUP_ID, SELECTED_LLM_ID, ) +from app.core.memory.utils.llm.llm_utils import MemoryClientFactory from app.core.models.base import RedBearModelConfig from app.db import get_db_context from app.repositories.neo4j.neo4j_connector import Neo4jConnector diff --git a/api/app/core/memory/evaluation/locomo/locomo_test.py b/api/app/core/memory/evaluation/locomo/locomo_test.py index a8fa1820..b5ad5820 100644 --- a/api/app/core/memory/evaluation/locomo/locomo_test.py +++ b/api/app/core/memory/evaluation/locomo/locomo_test.py @@ -435,12 +435,12 @@ async def run_enhanced_evaluation(): return None # 修正导入路径:使用 app.core.memory.src 前缀 - from app.core.memory.client_factory import MemoryClientFactory from app.core.memory.llm_tools.openai_embedder import OpenAIEmbedderClient from app.core.memory.utils.config.definitions import ( SELECTED_EMBEDDING_ID, SELECTED_LLM_ID, ) + from app.core.memory.utils.llm.llm_utils import MemoryClientFactory from app.core.models.base import RedBearModelConfig from app.db import get_db_context from app.repositories.neo4j.graph_search import search_graph_by_embedding diff --git a/api/app/core/memory/evaluation/locomo/qwen_search_eval.py b/api/app/core/memory/evaluation/locomo/qwen_search_eval.py index e7a95e71..87a70a29 100644 --- a/api/app/core/memory/evaluation/locomo/qwen_search_eval.py +++ b/api/app/core/memory/evaluation/locomo/qwen_search_eval.py @@ -15,7 +15,6 @@ except Exception: import re -from app.core.memory.client_factory import MemoryClientFactory from app.core.memory.evaluation.common.metrics import ( avg_context_tokens, bleu1, @@ -34,6 +33,7 @@ from app.core.memory.utils.config.definitions import ( SELECTED_GROUP_ID, SELECTED_LLM_ID, ) +from app.core.memory.utils.llm.llm_utils import MemoryClientFactory from app.core.models.base import RedBearModelConfig from app.db import get_db_context from app.repositories.neo4j.graph_search import search_graph, search_graph_by_embedding diff --git a/api/app/core/memory/evaluation/longmemeval/qwen_search_eval.py b/api/app/core/memory/evaluation/longmemeval/qwen_search_eval.py index 58652033..53c5ce19 100644 --- a/api/app/core/memory/evaluation/longmemeval/qwen_search_eval.py +++ b/api/app/core/memory/evaluation/longmemeval/qwen_search_eval.py @@ -34,7 +34,6 @@ try: ) except Exception: ingest_contexts_via_full_pipeline = None # 在运行时做兜底检查 -from app.core.memory.client_factory import MemoryClientFactory from app.core.memory.evaluation.common.metrics import ( avg_context_tokens, jaccard, @@ -48,6 +47,7 @@ from app.core.memory.utils.config.definitions import ( SELECTED_EMBEDDING_ID, SELECTED_LLM_ID, ) +from app.core.memory.utils.llm.llm_utils import MemoryClientFactory from app.core.models.base import RedBearModelConfig from app.db import get_db_context from app.repositories.neo4j.graph_search import search_graph, search_graph_by_embedding diff --git a/api/app/core/memory/evaluation/longmemeval/test_eval.py b/api/app/core/memory/evaluation/longmemeval/test_eval.py index a0038260..08a763e3 100644 --- a/api/app/core/memory/evaluation/longmemeval/test_eval.py +++ b/api/app/core/memory/evaluation/longmemeval/test_eval.py @@ -15,7 +15,6 @@ except Exception: return None # 与现有评估脚本保持一致的导入方式 -from app.core.memory.client_factory import MemoryClientFactory from app.core.memory.evaluation.common.metrics import ( avg_context_tokens, jaccard, @@ -29,6 +28,7 @@ from app.core.memory.utils.config.definitions import ( SELECTED_EMBEDDING_ID, SELECTED_LLM_ID, ) +from app.core.memory.utils.llm.llm_utils import MemoryClientFactory from app.core.models.base import RedBearModelConfig from app.db import get_db_context from app.repositories.neo4j.graph_search import search_graph, search_graph_by_embedding diff --git a/api/app/core/memory/evaluation/memsciqa/evaluate_qa.py b/api/app/core/memory/evaluation/memsciqa/evaluate_qa.py index 3e6a1216..6efb66ff 100644 --- a/api/app/core/memory/evaluation/memsciqa/evaluate_qa.py +++ b/api/app/core/memory/evaluation/memsciqa/evaluate_qa.py @@ -15,7 +15,6 @@ except Exception: def load_dotenv(): return None -from app.core.memory.client_factory import MemoryClientFactory from app.core.memory.evaluation.common.metrics import ( avg_context_tokens, exact_match, @@ -31,6 +30,7 @@ from app.core.memory.utils.config.definitions import ( SELECTED_GROUP_ID, SELECTED_LLM_ID, ) +from app.core.memory.utils.llm.llm_utils import MemoryClientFactory from app.db import get_db_context from app.repositories.neo4j.neo4j_connector import Neo4jConnector diff --git a/api/app/core/memory/evaluation/memsciqa/memsciqa-test.py b/api/app/core/memory/evaluation/memsciqa/memsciqa-test.py index ebbe6e7e..279f4042 100644 --- a/api/app/core/memory/evaluation/memsciqa/memsciqa-test.py +++ b/api/app/core/memory/evaluation/memsciqa/memsciqa-test.py @@ -24,7 +24,6 @@ for _p in (_SRC_DIR, _PROJECT_ROOT): sys.path.insert(0, _p) # 对齐 locomo_test 的检索逻辑:直接使用 graph_search 与 Neo4jConnector/Embedder1 -from app.core.memory.client_factory import MemoryClientFactory from app.core.memory.evaluation.common.metrics import ( avg_context_tokens, exact_match, @@ -37,6 +36,7 @@ from app.core.memory.utils.config.definitions import ( SELECTED_GROUP_ID, SELECTED_LLM_ID, ) +from app.core.memory.utils.llm.llm_utils import MemoryClientFactory from app.core.models.base import RedBearModelConfig from app.db import get_db_context from app.repositories.neo4j.graph_search import search_graph, search_graph_by_embedding diff --git a/api/app/core/memory/storage_services/reflection_engine/self_reflexion.py b/api/app/core/memory/storage_services/reflection_engine/self_reflexion.py index 34fcaf79..ebbb97f7 100644 --- a/api/app/core/memory/storage_services/reflection_engine/self_reflexion.py +++ b/api/app/core/memory/storage_services/reflection_engine/self_reflexion.py @@ -19,7 +19,6 @@ from typing import Any, Dict, List, Optional from app.core.memory.llm_tools.openai_client import OpenAIClient from app.core.memory.utils.config import definitions as config_defs -from app.core.memory.utils.config import get_model_config from app.core.memory.utils.config.get_data import ( extract_and_process_changes, get_data, @@ -169,12 +168,18 @@ class ReflectionEngine: self.llm_client = factory.get_llm_client(config_defs.SELECTED_LLM_ID) elif isinstance(self.llm_client, str): # 如果 llm_client 是字符串(model_id),则用它初始化客户端 - # from app.core.memory.utils.llm.llm_utils import MemoryClientFactory + from app.core.memory.utils.llm.llm_utils import MemoryClientFactory from app.db import get_db_context - # model_id = self.llm_client + from app.services.memory_config_service import MemoryConfigService + model_id = self.llm_client with get_db_context() as db: factory = MemoryClientFactory(db) # self.llm_client = factory.get_llm_client(model_id) + + # Use MemoryConfigService to get model config + config_service = MemoryConfigService(db) + model_config = config_service.get_model_config(model_id) + extra_params={ "temperature": 0.2, # 降低温度提高响应速度和一致性 "max_tokens": 600, # 限制最大token数 @@ -182,7 +187,6 @@ class ReflectionEngine: "stream": False, # 确保非流式输出以获得最快响应 } - model_config = get_model_config(self.llm_client) self.llm_client = OpenAIClient(RedBearModelConfig( model_name=model_config.get("model_name"), provider=model_config.get("provider"), diff --git a/api/app/services/emotion_analytics_service.py b/api/app/services/emotion_analytics_service.py index 2e63eeb0..4109c91b 100644 --- a/api/app/services/emotion_analytics_service.py +++ b/api/app/services/emotion_analytics_service.py @@ -492,7 +492,7 @@ class EmotionAnalyticsService: config_id=int(config_id), service_name="EmotionAnalyticsService.generate_emotion_suggestions" ) - from app.core.memory.client_factory import MemoryClientFactory + from app.core.memory.utils.llm.llm_utils import MemoryClientFactory factory = MemoryClientFactory(db) llm_client = factory.get_llm_client(str(memory_config.llm_model_id)) except Exception as e: diff --git a/api/app/services/user_memory_service.py b/api/app/services/user_memory_service.py index a69c776e..e1b4b6eb 100644 --- a/api/app/services/user_memory_service.py +++ b/api/app/services/user_memory_service.py @@ -4,15 +4,15 @@ User Memory Service 处理用户记忆相关的业务逻辑,包括记忆洞察、用户摘要、节点统计和图数据等。 """ -from typing import Dict, List, Optional, Any import uuid -from sqlalchemy.orm import Session +from typing import Any, Dict, List, Optional from app.core.logging_config import get_logger -from app.repositories.end_user_repository import EndUserRepository -from app.repositories.neo4j.neo4j_connector import Neo4jConnector from app.core.memory.analytics.memory_insight import MemoryInsight from app.core.memory.analytics.user_summary import generate_user_summary +from app.repositories.end_user_repository import EndUserRepository +from app.repositories.neo4j.neo4j_connector import Neo4jConnector +from sqlalchemy.orm import Session logger = get_logger(__name__) @@ -284,8 +284,7 @@ class UserMemoryService: # 使用 end_user_id 调用分析函数 try: logger.info(f"使用 end_user_id={end_user_id} 生成用户摘要") - result = await analytics_user_summary(end_user_id) - summary = result.get("summary", "") + summary = await generate_user_summary(end_user_id) if not summary: logger.warning(f"end_user_id {end_user_id} 的用户摘要生成结果为空")