Răsfoiți Sursa

v0.0.4-功能优化
- 增加check_item_code字段

WangXuMing 1 lună în urmă
părinte
comite
63cc2126cc

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

@@ -245,15 +245,15 @@ class AIReviewEngine(BaseReviewer):
                     )
                 )
             )
-        if 'c' in self.task_info.get_review_config_list():
-            basic_tasks.append(
-                asyncio.create_task(
-                    asyncio.wait_for(
-                        check_with_semaphore(self.check_completeness, trace_id_idx=trace_id_idx, review_content=unit_content, review_references=None, review_location_label=review_location_label, state=state, stage_name=stage_name),
-                        timeout=TASK_TIMEOUT
-                    )
-                )
-            )
+        # if 'completeness_check' in self.task_info.get_review_config_list():
+        #     basic_tasks.append(
+        #         asyncio.create_task(
+        #             asyncio.wait_for(
+        #                 check_with_semaphore(self.check_completeness, trace_id_idx=trace_id_idx, review_content=unit_content, review_references=None, review_location_label=review_location_label, state=state, stage_name=stage_name),
+        #                 timeout=TASK_TIMEOUT
+        #             )
+        #         )
+        #     )
 
         # 一次性执行所有任务,避免重复协程调用
         if not basic_tasks:
@@ -290,8 +290,8 @@ class AIReviewEngine(BaseReviewer):
         grammar_result = self._process_review_result(None)
         semantic_result = self._process_review_result(None)
         sensitive_result = self._process_review_result(None)
-        completeness_result = self._process_review_result(None)
-        logger.info(f"completeness_result: {completeness_result}")
+        #completeness_result = self._process_review_result(None)
+        #logger.info(f"completeness_result: {completeness_result}")
         result_index = 0
 
         if 'sensitive_word_check' in self.task_info.get_review_config_list():
@@ -309,17 +309,17 @@ class AIReviewEngine(BaseReviewer):
             if result_index < len(results):
                 sensitive_result = self._process_review_result(results[result_index])
             result_index += 1
-        if 'completeness_check' in self.task_info.get_review_config_list():
-            if result_index < len(results):
-                completeness_result = self._process_review_result(results[result_index])
-            result_index += 1
-        with open('temp/completeness_check_result.json','w',encoding='utf-8') as f:
-            json.dump(completeness_result,f,ensure_ascii=False,indent=4)
+        # if 'completeness_check' in self.task_info.get_review_config_list():
+        #     if result_index < len(results):
+        #         completeness_result = self._process_review_result(results[result_index])
+        #     result_index += 1
+        # with open('temp/completeness_check_result.json','w',encoding='utf-8') as f:
+        #     json.dump(completeness_result,f,ensure_ascii=False,indent=4)
         return {
             'grammar_check': grammar_result,
             'semantic_logic_check': semantic_result,
             'sensitive_check': sensitive_result,
-            'completeness_check': completeness_result,
+            #'completeness_check': completeness_result,
         }
     async def technical_compliance_check(self,trace_id_idx: str, unit_content: Dict[str, Any],
                                       review_location_label: str,state:Dict[str, Any],stage_name:str) -> Dict[str, Any]:

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

@@ -273,9 +273,9 @@ class OutlineReviewer:
 
             if json_data and isinstance(json_data, list):
                 for item in json_data:
-                    overall_completeness_result.append(self.inter_tool._create_issue_item(item, "completeness_check","outline"))
+                    overall_completeness_result.append(self.inter_tool._create_issue_item(item, "completeness_check","catalogue","catalogue_completeness_check"))
             elif json_data and isinstance(json_data, dict):
-                overall_completeness_result.append(self.inter_tool._create_issue_item(json_data, "completeness_check","outline"))
+                overall_completeness_result.append(self.inter_tool._create_issue_item(json_data, "completeness_check","catalogue","catalogue_completeness_check"))
             #filtered_issues = [r for r in overall_completeness_result if self._is_non_compliant_item(r)]
             # 只统计exist_issue为true的项目数量
             issue_count = sum(1 for item in overall_completeness_result if item.get('exist_issue', False))
@@ -537,9 +537,9 @@ class OutlineReviewer:
 
         if json_data and isinstance(json_data, list):
             for item in json_data:
-                parsed_result.append(self.inter_tool._create_issue_item(item, 'completeness_check','outline'))
+                parsed_result.append(self.inter_tool._create_issue_item(item, 'completeness_check','catalogue','catalogue_completeness_check'))
         elif json_data and isinstance(json_data, dict):
-            parsed_result.append(self.inter_tool._create_issue_item(json_data, 'completeness_check','outline'))
+            parsed_result.append(self.inter_tool._create_issue_item(json_data, 'completeness_check','catalogue','catalogue_completeness_check'))
 
         # with open(f"temp\outline_result_temp\次级大纲审查中间结果.json", "a", encoding="utf-8") as f:
         #     f.write(response_text)

+ 10 - 6
core/construction_review/component/reviewers/reference_basis_reviewer.py

@@ -57,7 +57,7 @@ class StandardizedResponseProcessor:
         else:
             self.inter_tool = None
 
-    def process_llm_response(self, response_text: str, check_name: str, chapter_code: str = "") -> List[Dict[str, Any]]:
+    def process_llm_response(self, response_text: str, check_name: str, chapter_code: str,check_item_code:str) -> List[Dict[str, Any]]:
         """
         处理LLM响应,返回标准格式
 
@@ -65,6 +65,7 @@ class StandardizedResponseProcessor:
             response_text: LLM原始响应文本
             check_name: 检查项名称
             chapter_code: 章节代码
+            check_item_code: 检查项代码
 
         Returns:
             List[Dict]: 标准格式的审查结果列表
@@ -80,9 +81,9 @@ class StandardizedResponseProcessor:
 
             if json_data and isinstance(json_data, list):
                 for item in json_data:
-                    parsed_result.append(self.inter_tool._create_issue_item(item, check_name, chapter_code))
+                    parsed_result.append(self.inter_tool._create_issue_item(item, check_name, chapter_code,check_item_code))
             elif json_data and isinstance(json_data, dict):
-                parsed_result.append(self.inter_tool._create_issue_item(json_data, check_name, chapter_code))
+                parsed_result.append(self.inter_tool._create_issue_item(json_data, check_name, chapter_code,check_item_code))
 
             return parsed_result
 
@@ -91,7 +92,8 @@ class StandardizedResponseProcessor:
             # 返回一个错误条目
             return [{
                 "check_item": check_name,
-                "chapter_code": chapter_code or "basis",
+                "chapter_code": "basis",
+                "check_item_code": f"basis_{check_name}",
                 "check_result": {"error": str(e)},
                 "exist_issue": True,
                 "risk_info": {"risk_level": "medium"}
@@ -188,9 +190,9 @@ class BasisReviewService:
                 llm_out = await self.llm_client.review_basis(message, trace_id)
                 print("LLM输出:\n")
                 print(llm_out)
-
+                
                 # 使用标准化处理器处理响应
-                standardized_result = self.response_processor.process_llm_response(llm_out, "reference_check", "basis")
+                standardized_result = self.response_processor.process_llm_response(llm_out, "reference_check", "basis","basis_reference_check")
 
                 # 统计问题数量
                 issue_count = sum(1 for item in standardized_result if item.get('exist_issue', False))
@@ -203,6 +205,7 @@ class BasisReviewService:
                 return [{
                     "check_item": "reference_check",
                     "chapter_code": "basis",
+                    "check_item_code": "basis_reference_check",
                     "check_result": {"error": str(e), "basis_items": basis_items},
                     "exist_issue": True,
                     "risk_info": {"risk_level": "high"}
@@ -349,6 +352,7 @@ class BasisReviewService:
                 error_result = [{
                     "check_item": "reference_check",
                     "chapter_code": "basis",
+                    "check_item_code": "basis_reference_check",
                     "check_result": {"error": str(result), "basis_items": error_batch},
                     "exist_issue": True,
                     "risk_info": {"risk_level": "high"}

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

@@ -57,7 +57,7 @@ class StandardizedResponseProcessor:
         else:
             self.inter_tool = None
 
-    def process_llm_response(self, response_text: str, check_name: str = "编制依据检查", chapter_code: str = "") -> List[Dict[str, Any]]:
+    def process_llm_response(self, response_text: str, check_name: str , chapter_code: str ,check_item_code:str) -> List[Dict[str, Any]]:
         """
         处理LLM响应,返回标准格式
 
@@ -65,6 +65,7 @@ class StandardizedResponseProcessor:
             response_text: LLM原始响应文本(JSON字符串)
             check_name: 检查项名称
             chapter_code: 章节代码
+            check_item_code: 检查项代码
 
         Returns:
             List[Dict]: 标准格式的审查结果列表
@@ -84,9 +85,9 @@ class StandardizedResponseProcessor:
 
             if json_data and isinstance(json_data, list):
                 for item in json_data:
-                    parsed_result.append(self.inter_tool._create_issue_item(item, check_name, chapter_code))
+                    parsed_result.append(self.inter_tool._create_issue_item(item, check_name, chapter_code,check_item_code))
             elif json_data and isinstance(json_data, dict):
-                parsed_result.append(self.inter_tool._create_issue_item(json_data, check_name, chapter_code))
+                parsed_result.append(self.inter_tool._create_issue_item(json_data, check_name, chapter_code,check_item_code))
 
             return parsed_result
 
@@ -96,6 +97,7 @@ class StandardizedResponseProcessor:
             return [{
                 "check_item": check_name,
                 "chapter_code":"basis",
+                "check_item_code": check_item_code,
                 "check_result": {"error": str(e)},
                 "exist_issue": True,
                 "risk_info": {"risk_level": "medium"}
@@ -303,7 +305,7 @@ class BasisReviewService:
                 # llm_out = await review_reference_timeliness(reference_text=grouped_candidates, review_text=basis_items)
                 
                 
-                standardized_result = self.response_processor.process_llm_response(llm_out, "timeliness_check", "basis")
+                standardized_result = self.response_processor.process_llm_response(llm_out, "timeliness_check", "basis","basis_timeliness_check")
                 print("标准化处理器处理响应:\n")
                 print(standardized_result)
                 # 统计问题数量
@@ -317,6 +319,7 @@ class BasisReviewService:
                 return [{
                     "check_item": "timeliness_check",
                     "chapter_code": "basis",
+                    "check_item_code": "basis_timeliness_check",
                     "check_result": {"error": str(e), "basis_items": basis_items},
                     "exist_issue": True,
                     "risk_info": {"risk_level": "high"}
@@ -465,6 +468,7 @@ class BasisReviewService:
                 error_result = [{
                     "check_item": "timeliness_check",
                     "chapter_code": "basis",
+                    "check_item_code": "basis_timeliness_check",
                     "check_result": {"error": str(result), "basis_items": error_batch},
                     "exist_issue": True,
                     "risk_info": {"risk_level": "high"}

+ 18 - 6
core/construction_review/component/reviewers/utils/inter_tool.py

@@ -231,9 +231,9 @@ class InterTool:
                 check_name = check_result["details"].get("name")
                 reference_source = check_result["details"].get("rag_reference_source")
                 review_references = check_result["details"].get("rag_review_references")
-                logger.debug(f"解析检查项 {check_name} 的响应,长度: {len(response)}")
 
-                logger.debug(f"检查项测试 {check_name}")
+
+
 
                 # 类型安全检查:确保 check_name 是字符串
                 if not isinstance(check_name, str):
@@ -262,6 +262,10 @@ class InterTool:
                             review_lists.append(check_issue)
 
                 else:
+                    if reference_source and review_references:
+                        logger.debug(f"RAG检查:检查项找到相关rag依据 {check_name} : {review_references}")
+                    else:
+                        logger.debug(f"RAG检查:检查项未找到相关rag依据 {check_name}")
                     logger.debug(f"检查项 {check_name} 存在参考来源,开始处理参考来源")
                     check_issues = self.parse_ai_review_response(response, check_name,chapter_code)
                     processed_issues = []
@@ -279,8 +283,12 @@ class InterTool:
                             # 添加参考来源到实际问题内容中
                             if review_references:
                                 issue_content["review_references"] = review_references
+                            else:
+                                logger.debug(f"RAG检查:检查项找到相关review_references {check_name} ")
                             if reference_source:
                                 issue_content["reference_source"] = reference_source
+                            else:
+                                logger.debug(f"RAG检查:检查项未找到相关reference_source {check_name} ")
 
                             # 更新包装格式中的check_result
                             item["check_result"] = issue_content
@@ -378,13 +386,14 @@ class InterTool:
             解析新的英文键名JSON格式: issue_point, location, suggestion, reason, risk_level
         """
         review_lists = []
-
+        check_item_code = chapter_code+"_"+check_name
         try:
             # 1. 检查无问题情况
             if any(keyword in response for keyword in ["无明显问题", "无问题", "符合要求","无风险"]):
                 return [{
                     "check_item": check_name,
                     "chapter_code": chapter_code,
+                    "check_item_code": check_item_code,
                     "check_result": "无明显问题",
                     "exist_issue": False,
                     "risk_info": {"risk_level": "low"}
@@ -396,10 +405,10 @@ class InterTool:
                 # 处理数组格式 - 保存调试数据
                 if isinstance(json_data, list):
                     for issue_data in json_data:
-                        review_lists.append(self._create_issue_item(issue_data, check_name, chapter_code))
+                        review_lists.append(self._create_issue_item(issue_data, check_name, chapter_code,check_item_code))
                 # 处理对象格式
                 elif isinstance(json_data, dict):
-                    review_lists.append(self._create_issue_item(json_data, check_name, chapter_code))
+                    review_lists.append(self._create_issue_item(json_data, check_name, chapter_code,check_item_code))
 
             # 3. 如果JSON解析失败,回退到文本解析
             if not review_lists:
@@ -407,6 +416,7 @@ class InterTool:
                 review_lists.append({
                     "check_item": check_name,
                     "chapter_code": chapter_code,
+                    "check_item_code": check_item_code,
                     "check_result": response,
                     "exist_issue": True,
                     "risk_info": {"risk_level": risk_level}
@@ -417,6 +427,7 @@ class InterTool:
             review_lists.append({
                 "check_item": check_name,
                 "chapter_code": chapter_code,
+                "check_item_code": check_item_code,
                 "check_result": response,
                 "exist_issue": True,
                 "risk_info": {"risk_level": "low"}
@@ -472,7 +483,7 @@ class InterTool:
 
         return None
 
-    def _create_issue_item(self, issue_data: dict, check_name: str, chapter_code: str = "") -> Dict[str, Any]:
+    def _create_issue_item(self, issue_data: dict, check_name: str, chapter_code:str,check_item_code:str) -> Dict[str, Any]:
         """创建单个审查问题项"""
         risk_level = self._determine_risk_level(issue_data.get("risk_level", ""))
 
@@ -483,6 +494,7 @@ class InterTool:
         return {
             "check_item": check_name,
             "chapter_code": chapter_code,
+            "check_item_code":check_item_code,
             "check_result": issue_data,
             "exist_issue": exist_issue,
             "risk_info": {"risk_level": risk_level}