Просмотр исходного кода

v0.0.4-功能优化
- 增加编制依据筛除功能

WangXuMing 2 месяцев назад
Родитель
Сommit
213a5d2fd8

+ 2 - 2
core/construction_review/component/ai_review_engine.py

@@ -741,7 +741,7 @@ class AIReviewEngine(BaseReviewer):
 
             # 提取关键数据
             review_content = review_data.get('content', '')
-            max_concurrent = review_data.get('max_concurrent', 4)
+            max_concurrent = review_data.get('max_concurrent', 10)
 
             # 添加调试信息
             logger.info(f"提取的编制依据内容长度: {len(review_content)}")
@@ -867,7 +867,7 @@ class AIReviewEngine(BaseReviewer):
 
             # 提取关键数据
             review_content = review_data.get('content', '')
-            max_concurrent = review_data.get('max_concurrent', 4)
+            max_concurrent = review_data.get('max_concurrent', 10)
 
             # 添加调试信息
             logger.info(f"提取的编制依据内容长度: {len(review_content)}")

+ 1 - 1
core/construction_review/component/reviewers/outline_reviewer.py

@@ -277,7 +277,7 @@ class OutlineReviewer:
         logger.info(f"开始次级大纲并发审查,有效项目数量: {len(valid_items)}")
 
         # 创建并发审查任务
-        semaphore = asyncio.Semaphore(5)  # 限制并发数为5,避免过载
+        semaphore = asyncio.Semaphore(20)  # 限制并发数为5,避免过载
         tasks = []
 
         for i, outline_item in valid_items:

+ 46 - 10
core/construction_review/workflows/ai_review_workflow.py

@@ -270,7 +270,7 @@ class AIReviewWorkflow:
             logger.info(f"AI审查节点开始执行,任务ID: {self.task_info.callback_task_id}")
 
             # 1. 准备审查单元数据
-            review_chunks, total_units, total_all_units = await self.core_fun._prepare_review_units(state)
+            review_chunks, total_units = await self.core_fun._prepare_review_units(state)
             logger.info(f"准备审查单元完成,总单元数: {total_units}, 实际审查: {len(review_chunks)}")
 
             if not review_chunks:
@@ -318,7 +318,7 @@ class AIReviewWorkflow:
                     # 准备编制依据审查数据
                     prep_basis_review_data = {
                         'content': prep_basis_content,
-                        'max_concurrent': 4
+                        'max_concurrent': 20
                     }
 
                     # 执行编制依据审查
@@ -348,7 +348,7 @@ class AIReviewWorkflow:
                     # 准备编制依据审查数据
                     timeliness_check_data = {
                         'content': prep_basis_content,
-                        'max_concurrent': 4
+                        'max_concurrent': 20
                     }
 
                     # 执行编制依据审查
@@ -678,7 +678,7 @@ class AIReviewCoreFun:
         
         try:
 
-            semaphore = asyncio.Semaphore(2)  # 并发审查数
+            semaphore = asyncio.Semaphore(3)  # 并发审查数
 
             async def process_unit_and_notify(unit_index, unit_content):
                 """处理单个单元,完成后立即推送通知"""
@@ -734,10 +734,10 @@ class AIReviewCoreFun:
         try:
             # 筛选要审查的单元
             all_chunks = state['structured_content']['chunks']
-            review_chunks = self._filter_review_units(all_chunks)
-
+            # 筛除编制依据章节 state['structured_content']['chunks']['chapter_classification'] != "Basis"
+            clearned_chunks = self._remove_basis_chunks(all_chunks)
+            review_chunks = self._filter_review_units(clearned_chunks)
             total_units = len(review_chunks)
-            total_all_units = len(all_chunks)
 
             # 【修复 3】: 任务开始前,清理 Redis 中的旧计数,防止进度条计算错误
             try:
@@ -749,13 +749,49 @@ class AIReviewCoreFun:
                     logger.info(f"已清理旧进度缓存: {completed_key}")
             except Exception as e:
                 logger.warning(f"清理进度缓存失败 (不影响主流程): {str(e)}")
-
-            logger.info(f"AI审查开始: 总单元数 {total_all_units}, 实际审查 {total_units} 个单元")
-            return review_chunks, total_units, total_all_units
+            return review_chunks, total_units
         except Exception as e:
             logger.error(f"准备审查单元失败: {str(e)}")
             raise
 
+    def _remove_basis_chunks(self, chunks: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
+        """
+        筛除编制依据章节的chunks
+
+        Args:
+            chunks: 所有章节chunks列表
+
+        Returns:
+            List[Dict[str, Any]]: 筛除编制依据章节后的chunks列表
+
+        Note:
+            根据 chapter_classification 字段筛选,排除值为 "basis" 的章节
+        """
+        try:
+            filtered_chunks = []
+            removed_count = 0
+            logger.info(f"开始筛除编制依据章节")
+            for chunk in chunks:
+                # 检查章节分类字段
+                chapter_classification = chunk.get('chapter_classification', '')
+                
+                # 保留非编制依据章节
+                if chapter_classification != 'basis':
+                    logger.info(f"保留非编制依据章节,当前章节: {chapter_classification}")
+                    filtered_chunks.append(chunk)
+                else:
+                    removed_count += 1
+                    logger.debug(f"筛除编制依据章节: {chunk.get('section_label', '未知章节')}")
+
+            logger.info(f"编制依据章节筛除完成: 共筛除 {removed_count} 个章节, 保留 {len(filtered_chunks)} 个章节")
+
+            return filtered_chunks
+
+        except Exception as e:
+            logger.error(f"筛除编制依据章节失败: {str(e)}")
+            # 出错时返回原始列表
+            return chunks
+
     async def _review_single_unit(self, unit_content: Dict[str, Any], unit_index: int,
                                   total_units: int, state: AIReviewState) -> ReviewResult:
         """

Разница между файлами не показана из-за своего большого размера
+ 4544 - 100
logs/agent_debug.log.1


Разница между файлами не показана из-за своего большого размера
+ 1401 - 134
logs/agent_debug.log.2


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
logs/agent_debug.log.3


Разница между файлами не показана из-за своего большого размера
+ 0 - 164
logs/agent_debug.log.4


Разница между файлами не показана из-за своего большого размера
+ 0 - 4832
logs/agent_debug.log.5


Разница между файлами не показана из-за своего большого размера
+ 4544 - 100
logs/agent_info.log.1


Разница между файлами не показана из-за своего большого размера
+ 1401 - 134
logs/agent_info.log.2


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
logs/agent_info.log.3


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
logs/agent_info.log.4


Разница между файлами не показана из-за своего большого размера
+ 0 - 28
logs/agent_info.log.5


Некоторые файлы не были показаны из-за большого количества измененных файлов