Pārlūkot izejas kodu

v0.0.3-优化提示词输出格式

WangXuMing 3 mēneši atpakaļ
vecāks
revīzija
6f40d96a67

+ 1 - 1
.gitignore

@@ -65,4 +65,4 @@ todo.md
 .design
 .claude
 .R&D
-temp\AI审查结果.json
+temp/

BIN
build_graph_app.png


+ 5 - 1
core/construction_review/component/ai_review_engine.py

@@ -55,10 +55,14 @@ class AIReviewEngine(BaseReviewer):
     """AI审查引擎 - 支持审查条目并发"""
 
     def __init__(self, max_concurrent_reviews: int = 8):
-        super().__init__()  
+        super().__init__()
         self.max_concurrent_reviews = max_concurrent_reviews
         self.semaphore = asyncio.Semaphore(max_concurrent_reviews)
 
+    def set_review_location_label(self, location_label: str):
+        """设置审查位置标签"""
+        self.review_location_label = location_label
+
 
 
     

+ 16 - 4
core/construction_review/component/reviewers/base_reviewer.py

@@ -29,9 +29,10 @@ class ReviewResult:
 class BaseReviewer(ABC):
     """审查器基类"""
 
-    def __init__(self):
+    def __init__(self, review_location_label: str = ""):
         self.model_client = generate_model_client
         self.prompt_loader = prompt_loader
+        self.review_location_label = review_location_label
     
     #@obverse
     async def review(self, name: str, trace_id: str, reviewer_type: str, prompt_name: str, review_content: str, review_references: str = None,
@@ -58,10 +59,8 @@ class BaseReviewer(ABC):
             ReviewResult: 审查结果
         """
         start_time = time.time()
-        name = prompt_name
         try:
             # 添加进度更新
-            progress_message = f"{name}_{prompt_name}"
             # 安全检查:确保所有必要参数都存在才执行进度更新
             if state and state.get("progress_manager") and stage_name and current_progress is not None:
                 asyncio.create_task(
@@ -70,7 +69,7 @@ class BaseReviewer(ABC):
                         stage_name=stage_name,
                         current=current_progress,
                         status="processing",
-                        message=progress_message
+                        message=f"开始进行:{name}"
                     )
                 )
             logger.info(f"开始执行 {name} 审查,trace_id: {trace_id},内容长度: {len(review_content)}")
@@ -78,6 +77,9 @@ class BaseReviewer(ABC):
             prompt_kwargs["content"] = review_content
             prompt_kwargs["review_content"] = review_content
             prompt_kwargs["review_references"] = review_references or ""
+            # 添加审查位置标签到提示词参数中
+            if hasattr(self, 'review_location_label') and self.review_location_label:
+                prompt_kwargs["review_location_label"] = self.review_location_label
             task_prompt_info = {
                 "task_prompt": self.prompt_loader.get_prompt_template(reviewer_type, prompt_name, **prompt_kwargs),
                 "task_name": name
@@ -93,7 +95,17 @@ class BaseReviewer(ABC):
             result = self.format_result(model_response)
             result.execution_time = time.time() - start_time
 
+            asyncio.create_task(
+                state["progress_manager"].update_stage_progress(
+                    callback_task_id=state["callback_task_id"],
+                    stage_name=stage_name,
+                    current=current_progress,
+                    status="processing",
+                    message=f"{name} 审查完成, 耗时: {result.execution_time:.2f}s"
+                )
+            )
             logger.info(f"{name} 审查完成, 耗时: {result.execution_time:.2f}s")
+
             return result
 
         except Exception as e:

+ 71 - 31
core/construction_review/component/reviewers/prompt/basic_reviewers.yaml

@@ -8,7 +8,10 @@ semantic_logic_check:
     审查要求:
     - 重点关注语义矛盾、逻辑混乱、表述不清问题
     - 简明扼要指出问题位置和修改建议
-    - 标注问题等级:高/中/低
+    - 风险等级分类:
+      * 高风险:影响审查结论、可能导致法律问题或严重安全隐患
+      * 中风险:影响专业表达、可能导致理解偏差或一般性问题
+      * 低风险:形式问题、不影响实质内容和安全
 
     审查参考:
     {review_references}
@@ -18,11 +21,16 @@ semantic_logic_check:
 
     {review_content}
 
-    输出格式:
-    逻辑问题:[具体问题描述]
-    问题位置:[章节/段落]
-    修改建议:[具体建议]
-    风险等级:[高/中/低]
+    输出格式:务必须严格按照以下标准Markdown格式输出审查结果:
+    ## 问题:问题标题描述
+
+    **位置**:{review_location_label}
+
+    **建议**:具体的修改建议内容
+
+    **理由**:问题的原因分析和依据说明。
+
+    **风险等级**:
 
 # 1.2 条文完整性检查功能
 completeness_check:
@@ -32,7 +40,10 @@ completeness_check:
     审查要求:
     - 重点关注法规条文、技术要素缺失
     - 简明扼要列出缺失内容和补充要求
-    - 标注重要性:关键/重要/一般
+    - 风险等级分类:
+      * 高风险:影响审查结论、可能导致法律问题或严重安全隐患
+      * 中风险:影响专业表达、可能导致理解偏差或一般性问题
+      * 低风险:形式问题、不影响实质内容和安全
 
     审查参考:
     {review_references}
@@ -42,11 +53,16 @@ completeness_check:
 
     {review_content}
 
-    输出格式:
-    缺失条文:[具体缺失内容]
-    重要性:[关键/重要/一般]
-    补充要求:[具体补充内容]
-    依据标准:[相关法规或标准]
+    输出格式:务必须严格按照以下标准Markdown格式输出审查结果:
+    ## 问题:问题标题描述
+
+    **位置**:{review_location_label}
+
+    **建议**:具体的修改建议内容
+
+    **理由**:问题的原因分析和依据说明。
+
+    **风险等级**:
 
 # 1.3 时效性检查功能
 timeliness_check:
@@ -54,9 +70,12 @@ timeliness_check:
     你是施工方案时效性审查专家,负责检查引用标准和技术要求的现行有效性。
 
     审查要求:
-    - 重点关注标准版本过时、技术要求滞后
+    - 重点关注标准版本是否过期、技术要求滞后,分为 现行、过期、废止
     - 简明扼要指出过时内容和更新要求
-    - 标注更新紧迫性:高/中/低
+    - 风险等级分类:
+      * 高风险:影响审查结论、可能导致法律问题或严重安全隐患
+      * 中风险:影响专业表达、可能导致理解偏差或一般性问题
+      * 低风险:形式问题、不影响实质内容和安全
 
     审查参考:
     {review_references}
@@ -66,11 +85,16 @@ timeliness_check:
 
     {review_content}
 
-    输出格式:
-    过时标准:[具体标准名称及版本]
-    现行版本:[最新有效版本]
-    更新要求:[具体更新内容]
-    紧迫性:[高/中/低]
+    输出格式:务必须严格按照以下标准Markdown格式输出审查结果:
+    ## 问题:问题标题描述
+
+    **位置**:{review_location_label}
+
+    **建议**:具体的修改建议内容
+
+    **理由**:问题的原因分析和依据说明。
+
+    **风险等级**:
 
 # 1.4 引用规范检查功能
 reference_check:
@@ -80,7 +104,10 @@ reference_check:
     审查要求:
     - 重点关注引用格式错误、内容不准确
     - 简明扼要指出引用问题和修正方法
-    - 标注修正优先级:高/中/低
+    - 风险等级分类:
+      * 高风险:影响审查结论、可能导致法律问题或严重安全隐患
+      * 中风险:影响专业表达、可能导致理解偏差或一般性问题
+      * 低风险:形式问题、不影响实质内容和安全
 
     审查参考:
     {review_references}
@@ -90,11 +117,16 @@ reference_check:
 
     {review_content}
 
-    输出格式:
-    引用问题:[具体问题描述]
-    规范格式:[正确引用格式]
-    修正方法:[具体修正步骤]
-    优先级:[高/中/低]
+    输出格式:务必须严格按照以下标准Markdown格式输出审查结果:
+    ## 问题:问题标题描述
+
+    **位置**:{review_location_label}
+
+    **建议**:具体的修改建议内容
+
+    **理由**:问题的原因分析和依据说明。
+
+    **风险等级**:
 
 # 1.5 敏感词检查功能
 sensitive_word_check:
@@ -104,7 +136,10 @@ sensitive_word_check:
     审查要求:
     - 重点关注政治敏感、商业机密、表述不当
     - 简明扼要指出敏感词汇和处理建议
-    - 标注处理紧急性:高/中/低
+    - 风险等级分类:
+      * 高风险:影响审查结论、可能导致法律问题或严重安全隐患
+      * 中风险:影响专业表达、可能导致理解偏差或一般性问题
+      * 低风险:形式问题、不影响实质内容和安全
 
     审查参考:
     {review_references}
@@ -114,8 +149,13 @@ sensitive_word_check:
 
     {review_content}
 
-    输出格式:
-    敏感词汇:[具体敏感词]
-    敏感类型:[政治/商业/表述]
-    处理建议:[具体处理方法]
-    紧急性:[高/中/低]
+    输出格式:务必须严格按照以下标准Markdown格式输出审查结果:
+    ## 问题:问题标题描述
+
+    **位置**:{review_location_label}
+
+    **建议**:具体的修改建议内容
+
+    **理由**:问题的原因分析和依据说明。
+
+    **风险等级**:

+ 42 - 20
core/construction_review/component/reviewers/prompt/technical_reviewers.yaml

@@ -12,18 +12,26 @@ mandatory_standards_check:
     - 重点检查强制性条文符合性
     - 识别违反强标的问题
     - 简明扼要指出违规内容和整改要求
-    - 标注违规严重性:严重/一般/轻微
+    - 风险等级分类:
+      * 高风险:影响审查结论、可能导致法律问题或严重安全隐患
+      * 中风险:影响专业表达、可能导致理解偏差或一般性问题
+      * 低风险:形式问题、不影响实质内容和安全
 
   user_prompt_template: |
     请审查以下内容的强制性标准符合性:
 
     {review_content}
 
-    输出格式:
-    强制标准:[具体强制性标准条款]
-    违规内容:[具体违规描述]
-    整改要求:[具体整改措施]
-    严重性:[严重/一般/轻微]
+    输出格式:务必须严格按照以下标准Markdown格式输出审查结果:
+    ## 问题:问题标题描述
+
+    **位置**:{review_location_label}
+
+    **建议**:具体的修改建议内容
+
+    **理由**:问题的原因分析和依据说明。
+
+    **风险等级**:
 
 # 2.2 技术参数精确检查功能
 technical_parameters_check:
@@ -34,7 +42,10 @@ technical_parameters_check:
     - 重点检查技术参数的准确性和合理性
     - 识别参数错误或不合理设置
     - 简明扼要指出参数问题和修正建议
-    - 标注参数风险等级:高/中/低
+    - 风险等级分类:
+      * 高风险:影响审查结论、可能导致法律问题或严重安全隐患
+      * 中风险:影响专业表达、可能导致理解偏差或一般性问题
+      * 低风险:形式问题、不影响实质内容和安全
 
     审查参考:
     {review_references}
@@ -44,12 +55,16 @@ technical_parameters_check:
 
     {review_content}
 
-    输出格式:
-    技术参数:[具体参数名称]
-    参数问题:[问题描述]
-    标准要求:[正确参数范围]
-    修正建议:[具体修正方案]
-    风险等级:[高/中/低]
+    输出格式:务必须严格按照以下标准Markdown格式输出审查结果:
+    ## 问题:问题标题描述
+
+    **位置**:{review_location_label}
+
+    **建议**:具体的修改建议内容
+
+    **理由**:问题的原因分析和依据说明。
+
+    **风险等级**:
 
 # 2.3 设计值符合性检查功能
 design_values_check:
@@ -60,7 +75,10 @@ design_values_check:
     - 重点检查设计值与标准的符合性
     - 识别设计值超标或不合理问题
     - 简明扼要指出设计值问题和调整建议
-    - 标注偏差程度:严重超标/轻微超标/符合要求
+    - 风险等级分类:
+      * 高风险:影响审查结论、可能导致法律问题或严重安全隐患
+      * 中风险:影响专业表达、可能导致理解偏差或一般性问题
+      * 低风险:形式问题、不影响实质内容和安全
 
     审查参考:
     {review_references}
@@ -70,9 +88,13 @@ design_values_check:
 
     {review_content}
 
-    输出格式:
-    设计项目:[具体设计项目]
-    设计值:[当前设计值]
-    标准要求:[标准或规范要求值]
-    偏差分析:[偏差描述]
-    调整建议:[具体调整措施]
+    输出格式:务必须严格按照以下标准Markdown格式输出审查结果:
+    ## 问题:问题标题描述
+
+    **位置**:{review_location_label}
+
+    **建议**:具体的修改建议内容
+
+    **理由**:问题的原因分析和依据说明。
+
+    **风险等级**:

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

@@ -186,11 +186,11 @@ class AIReviewWorkflow:
 
     async def _start_node(self, state: AIReviewState) -> AIReviewState:
         """开始节点"""
-        logger.info(f"AI审查工作流启动: {state['file_id']}")
+        logger.info(f"AI审查工作流正在启动...: {state['file_id']}")
 
         state["current_stage"] = "start"
         state["status"] = "processing"
-        state["messages"].append(AIMessage(content="AI审查工作流启动"))
+        state["messages"].append(AIMessage(content=""))
 
         return state
 
@@ -221,8 +221,15 @@ class AIReviewWorkflow:
     async def _ai_review_node(self, state: AIReviewState) -> AIReviewState:
         """AI审查节点"""
         try:
-            logger.info(f"执行AI审查: {state['file_id']}")
-
+            logger.info(f"正在执行: {state['file_id']}")
+            if state["progress_manager"]:
+                await state["progress_manager"].update_stage_progress(
+                    callback_task_id=state["callback_task_id"],
+                    stage_name="AI审查",
+                    current=0,
+                    status="processing",
+                    message=f"正在执行: {state['file_id']}"
+                )
             state["current_stage"] = "ai_review"
 
             # 筛选要审查的单元
@@ -255,6 +262,12 @@ class AIReviewWorkflow:
 
                         # 获取section_label用于stage_name
                         section_label = unit_content.get('section_label', f'第{unit_index + 1}部分')
+                        page = unit_content.get('page', '')
+                        review_location_label = f"第{page}页:{section_label}"
+
+                        # 设置review_location_label到AIReviewEngine
+                        self.ai_review_engine.set_review_location_label(review_location_label)
+
                         stage_name = f"AI审查:{section_label}"
 
                         # 方法内部进度计算(基于当前处理的单元)