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

v0.0.5-功能优化-大纲层级校对优化

WangXuMing 2 дней назад
Родитель
Сommit
fc888b3779

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

@@ -853,8 +853,8 @@ class AIReviewEngine(BaseReviewer):
                 # 将ReviewResult对象转换为字典格式
                 result_dict = {"details":result.details,"success":result.success,"error_message":result.error_message,"execution_time":result.execution_time}
                 result_list.append(result_dict)
-                with open('temp/completeness_check_result_1.json','w',encoding='utf-8') as f:
-                    json.dump(result_dict, f, ensure_ascii=False,indent=4)
+                # with open('temp/completeness_check_result_1.json','w',encoding='utf-8') as f:
+                #     json.dump(result_dict, f, ensure_ascii=False,indent=4)
                 
                 # 将审查结果转换为字典格式,添加到issues中
                 review_result_data = {

+ 8 - 4
core/construction_review/component/reviewers/outline_reviewer.py

@@ -497,7 +497,9 @@ class OutlineReviewer:
         """
         # 第一步:分类
         category = await self._classify(outline_item, f"{trace_id}_item_{item_index}")
-
+        logger.debug(f"次级大纲outline_item调试: {outline_item}")
+        logger.debug(f"第{item_index+1}项分类结果: {category}")
+        
         if not category:
             logger.warning(f"无法分类第{item_index+1}项,使用默认分类")
             category = "二、工程概况"  # 默认分类
@@ -505,12 +507,13 @@ class OutlineReviewer:
         # 第二步:完整性审查
         review_standard = self.CLASSIFICATION_STANDARDS.get(category,
             "本章应包含设计概况、工程地质与水文气象、周边环境等基本情况。")
-
+        
         # 构建提示词参数
         prompt_kwargs = {}
         prompt_kwargs["review_content"] = outline_item
+        
         prompt_kwargs["review_references"] = review_standard
-
+        logger.debug(f"第{item_index+1}项审查参考标准: {review_standard}")
         # 获取提示词模板
         task_prompt = self.prompt_loader.get_prompt_template(
             self.reviewer_type,
@@ -527,7 +530,8 @@ class OutlineReviewer:
         model_response = await self.model_client.get_model_generate_invoke(
             trace_id=f"{trace_id}_item_{item_index}",
             task_prompt_info=task_prompt_info,
-            timeout=90
+            timeout=90,
+            model_name="qwen3_30b"
         )
 
         response_text = model_response

+ 0 - 2
core/construction_review/component/reviewers/prompt/basic_reviewers.yaml

@@ -158,8 +158,6 @@ semantic_logic_check:
     7. **不要钻牛角尖**:不要去钻牛角尖,不要为错找错,如“日最高气温达到39℃以上时,当日应停止作业”不要以为是“停止所有”,以偏概全,过度敏感
     8. **不审查专业点**:**不要**审查专业知识如施工技术规范、技术参数、技术步骤、技术要点等等,你的知识过于落后,无法满足当前新规范的要求,谢谢
 
-    审查参考:
-    {review_references}
 
   user_prompt_template: |
     # 审查任务

+ 1 - 0
core/construction_review/component/reviewers/semantic_logic.py

@@ -63,6 +63,7 @@ class SemanticLogicReviewer:
             # 构造提示词参数
             prompt_kwargs = {}
             prompt_kwargs["review_content"] = review_content
+            prompt_kwargs["review_references"] = ""  # ✅ 添加空字符串,避免模板格式化错误
 
             # 获取提示词模板
             prompt_template = prompt_loader.get_prompt_template(

+ 1 - 0
core/construction_review/component/reviewers/sensitive_word_check.py

@@ -63,6 +63,7 @@ class GrammarCheckReviewer:
             # 构造提示词参数
             prompt_kwargs = {}
             prompt_kwargs["review_content"] = review_content
+            prompt_kwargs["review_references"] = ""  # ✅ 添加空字符串,满足模板要求
 
             # 获取提示词模板
             prompt_template = prompt_loader.get_prompt_template(

+ 11 - 4
core/construction_review/workflows/ai_review_workflow.py

@@ -381,6 +381,7 @@ class AIReviewWorkflow:
             # 6️ 按章节处理
             for chapter_idx, (chapter_code, func_names) in enumerate(review_item_dict.items()):
                 logger.info(f" 处理章节 [{chapter_idx+1}/{total_chapters}]: {chapter_code},包含 {len(func_names)} 个审查任务")
+                logger.info(f"🔍 章节处理前: all_issues数量={len(all_issues)}")  # 调试日志
 
                 # 终止信号检查(章节级别)
                 if await self.workflow_manager.check_terminate_signal(state["callback_task_id"]):
@@ -399,6 +400,7 @@ class AIReviewWorkflow:
                     all_issues = await self.core_fun._process_basis_chapter(
                         chapter_code, chapter_content, func_names, state, all_issues, completed_chunks, total_chunks
                     )
+                    logger.info(f"🔍 basis章节处理后: all_issues数量={len(all_issues) if all_issues else 0}")  # 调试日志
                     # 更新已完成块数
                     completed_chunks += len(chapter_content)
                 else:
@@ -406,14 +408,15 @@ class AIReviewWorkflow:
                     chunks_completed, all_issues = await self.core_fun._process_normal_chapter(
                         chapter_code, chapter_content, func_names, state, all_issues
                     )
+                    logger.info(f"🔍 normal章节处理后: all_issues数量={len(all_issues) if all_issues else 0}, chunks_completed={chunks_completed}")  # 调试日志
                     # 更新已完成块数
                     completed_chunks += chunks_completed
 
                 logger.info(f"章节 {chapter_code} 处理完成")
-
+            logger.info(f"all_issues_结果调试: {all_issues} 个块")
             # 7️ 汇总结果
             summary = self.inter_tool._aggregate_results(all_issues)
-
+            
             # 8️ 构建完整的响应结构
             review_results = {
                 "callback_task_id": state["callback_task_id"],
@@ -532,8 +535,12 @@ class AIReviewWorkflow:
 
                 outline_review_result = await self.ai_review_engine.outline_check(state["callback_task_id"], state["structured_content"],
                                                     state, state.get("stage_name", "大纲审查"))
-                check_completeness_result = await self.ai_review_engine.check_completeness(trace_id_idx = state["callback_task_id"], review_content = state["structured_content"]["chunks"], 
-                        review_references = None, review_location_label = None, state = state, stage_name = state.get("stage_name", "完整性审查"))
+                check_completeness_result = await self.ai_review_engine.check_completeness(
+                    trace_id_idx = state["callback_task_id"],
+                    review_content = state["structured_content"]["chunks"],
+                    state = state,
+                    stage_name = state.get("stage_name", "完整性审查")
+                )
 
             # # 4. 执行编制依据审查
             # #await self.core_fun._send_start_review_progress(state, total_units,'prpe_basis')

+ 8 - 1
core/construction_review/workflows/core_functions/ai_review_core_fun.py

@@ -136,7 +136,7 @@ class AIReviewCoreFun:
         # 2. 拼接content
         if not basis_contents:
             logger.warning(f"编制依据章节 {chapter_code} 没有内容,跳过")
-            return
+            return all_issues  # ✅ 返回原始的 all_issues,避免数据丢失
 
         combined_content = "\n\n".join(basis_contents)
         logger.info(f"编制依据内容拼接完成,总长度: {len(combined_content)} 字符")
@@ -268,6 +268,9 @@ class AIReviewCoreFun:
                 merged_results=chunk_results  # 直接使用合并结果
             )
 
+            # 🔍 调试日志:检查issues是否有数据
+            logger.info(f"🔍 块{chunk_index}审查结果: chunk_results键={list(chunk_results.keys()) if chunk_results else 'None'}, issues数量={len(issues) if issues else 0}")
+
             # 推送当前块的进度
             current = int(((chunk_index + 1) / total_chunks) * 100)
             await self._send_unit_review_progress(
@@ -276,8 +279,12 @@ class AIReviewCoreFun:
 
             # 累积issues
             if issues:
+                logger.info(f"🔍 块{chunk_index}: 添加{len(issues)}个issues到all_issues (之前: {len(all_issues)})")
                 all_issues.extend(issues)
+            else:
+                logger.warning(f"⚠️ 块{chunk_index}: issues为空,未添加到all_issues")
 
+        logger.info(f"🔍 章节{chapter_code}完成: 总共处理{total_chunks}个块, all_issues最终数量={len(all_issues)}")
         return total_chunks,all_issues
 
     def _extract_issues_from_result(self, result: Any) -> List[Dict]: