From d0698090018efe683a2ab57ce0a145a32006a3a0 Mon Sep 17 00:00:00 2001 From: lanceyq <1982376970@qq.com> Date: Fri, 6 Mar 2026 14:35:16 +0800 Subject: [PATCH] [changes] AI review and correction of code --- .../extraction_engine/data_preprocessing/data_pruning.py | 2 +- .../memory/utils/prompt/prompts/extracat_Pruning.jinja2 | 7 ++++--- api/app/services/memory_config_service.py | 9 ++++++--- api/app/services/memory_storage_service.py | 3 ++- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/api/app/core/memory/storage_services/extraction_engine/data_preprocessing/data_pruning.py b/api/app/core/memory/storage_services/extraction_engine/data_preprocessing/data_pruning.py index 5388b437..904b238f 100644 --- a/api/app/core/memory/storage_services/extraction_engine/data_preprocessing/data_pruning.py +++ b/api/app/core/memory/storage_services/extraction_engine/data_preprocessing/data_pruning.py @@ -96,7 +96,7 @@ class SemanticPruner: self._is_builtin_scene = SceneConfigRegistry.is_scene_supported(self.config.pruning_scene) # 自定义场景的本体类型列表(用于注入提示词) - self._ontology_classes = config.ontology_classes or [] + self._ontology_classes = getattr(self.config, "ontology_classes", None) or [] if self._is_builtin_scene: self._log(f"[剪枝-初始化] 场景={self.config.pruning_scene} 使用内置专门配置") diff --git a/api/app/core/memory/utils/prompt/prompts/extracat_Pruning.jinja2 b/api/app/core/memory/utils/prompt/prompts/extracat_Pruning.jinja2 index 4eafbd64..6b620df9 100644 --- a/api/app/core/memory/utils/prompt/prompts/extracat_Pruning.jinja2 +++ b/api/app/core/memory/utils/prompt/prompts/extracat_Pruning.jinja2 @@ -43,11 +43,12 @@ {# 自定义场景:使用场景名称 + 本体类型列表构建说明 #} {% if ontology_classes and ontology_classes | length > 0 %} {% if language == 'en' %} - {% set instruction = 'Custom scene "' ~ pruning_scene ~ '": The dialogue is related to this scene if it involves any of the following entity types: ' ~ ontology_classes | join(', ') ~ '.' %} + {% set custom_types_str = ontology_classes | join(', ') %} + {% set instruction = 'Custom scene "' ~ pruning_scene ~ '": The dialogue is related to this scene if it involves any of the following entity types: ' ~ custom_types_str ~ '.' %} {% else %} - {% set instruction = '自定义场景「' ~ pruning_scene ~ '」:对话涉及以下任意实体类型时视为相关:' ~ ontology_classes | join('、') ~ '。' %} + {% set custom_types_str = ontology_classes | join('、') %} + {% set instruction = '自定义场景「' ~ pruning_scene ~ '」:对话涉及以下任意实体类型时视为相关:' ~ custom_types_str ~ '。' %} {% endif %} - {% set custom_types_str = ontology_classes | join('、') %} {% else %} {# 无本体类型时退化为通用说明 #} {% if language == 'en' %} diff --git a/api/app/services/memory_config_service.py b/api/app/services/memory_config_service.py index fca8b5b0..00757f8c 100644 --- a/api/app/services/memory_config_service.py +++ b/api/app/services/memory_config_service.py @@ -107,8 +107,11 @@ def _validate_config_id(config_id, db: Session = None): ) -# 专门场景的内置 key 列表(与 SceneConfigRegistry 保持一致) -_BUILTIN_PRUNING_SCENES = {"education", "online_service", "outbound"} +# 专门场景的内置 key 集合,直接从 SceneConfigRegistry 派生,避免重复维护 +# 使用懒加载函数避免模块级循环导入 +def _get_builtin_pruning_scenes() -> set: + from app.core.memory.storage_services.extraction_engine.data_preprocessing.scene_config import SceneConfigRegistry + return set(SceneConfigRegistry.get_all_scenes()) def _load_ontology_classes(db: Session, scene_id, pruning_scene: Optional[str]) -> Optional[list]: @@ -125,7 +128,7 @@ def _load_ontology_classes(db: Session, scene_id, pruning_scene: Optional[str]) if not scene_id: return None # 内置场景走 SceneConfigRegistry,不需要注入类型列表 - if pruning_scene in _BUILTIN_PRUNING_SCENES: + if pruning_scene in _get_builtin_pruning_scenes(): return None try: from app.repositories.ontology_class_repository import OntologyClassRepository diff --git a/api/app/services/memory_storage_service.py b/api/app/services/memory_storage_service.py index ff02a872..a83d6830 100644 --- a/api/app/services/memory_storage_service.py +++ b/api/app/services/memory_storage_service.py @@ -178,7 +178,8 @@ class DataConfigService: # 数据配置服务类(PostgreSQL) from app.models.ontology_scene import OntologyScene scene = self.db.query(OntologyScene).filter_by(scene_id=scene_id).first() return scene.scene_name if scene else None - except Exception: + except Exception as e: + logger.warning(f"_resolve_pruning_scene_from_scene_id failed for scene_id={scene_id}: {e}", exc_info=True) return None # --- Delete ---