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