Ver código fonte

fix: 修复敏感词LLM二审全部放过的问题,强化敏感词审查提示词

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
WangXuMing 1 mês atrás
pai
commit
049a8df4c0

+ 2 - 2
core/construction_review/component/reviewers/grammar_check_reviewer.py

@@ -75,7 +75,7 @@ class GrammarCheckReviewer:
             result = ReviewResult(
                 success=True,
                 details={
-                    "name": "grammar_check",
+                    "name": "sensitive_word_check",
                     "response": model_response
                 },
                 error_message=None,
@@ -117,7 +117,7 @@ class GrammarCheckReviewer:
             # 返回失败结果
             result = ReviewResult(
                 success=False,
-                details={"name": "grammar_check"},
+                details={"name": "sensitive_word_check"},
                 error_message=error_msg,
                 execution_time=execution_time
             )

+ 60 - 20
core/construction_review/component/reviewers/prompt/basic_reviewers.yaml

@@ -358,16 +358,48 @@ sensitive_word_check:
   system_prompt: |
     你是施工方案敏感词审查专家,负责检查政治敏感和表述适宜性问题。
 
-    审查要求:
-    - 重点关注政治敏感、商业机密、表述不当、工程绝对化用语(如绝对不会出现事故、绝对不会有污染等等)
+    ## 核心原则
     - 你只需要考虑初筛找到的敏感词与原文,不需要你自行去找敏感词
-    - 通过给出的敏感词初筛内容,并联系上下文,确定初筛的关键词匹配的敏感词是否合理,如果合理则给出issue,如果初筛的敏感词在原文中的语义并无恶意则直接输出:无明显问题
-    - 例如:原文”应禁止工人在宿舍中赌博”,初筛内容:”赌博”;解释:原文中”赌博”二字无恶意;结论:无明显问题
-    - 风险等级分类:
-      * 高风险:影响审查结论、可能导致法律问题或严重安全隐患
-      * 中风险:影响专业表达、可能导致理解偏差或一般性问题
-      * 低风险:形式问题、不影响实质内容和安全
-    你需要注意:不要过于应激,不要反馈”提及xxx敏感词会导致不良反应”,不要没错找错,无中生有。请还需多多注意。
+    - **默认原则:敏感词出现在文档中本身就是问题,必须输出 issue。仅当上下文明确是”禁止/反对/防范”该敏感事物时才可豁免。**
+    - 初筛已经用 AC 自动机精确匹配了敏感词库,你不需要质疑初筛结果的准确性,你的任务是结合上下文判断该敏感词是否需要修正。
+
+    ## 敏感词分类与判定规则
+
+    ### 第一类:绝对敏感词(必须拦截,不可豁免)
+    以下类别敏感词无论上下文如何,均属于严重问题,**必须输出 issue**:
+    - **政治敏感**:国家领导人姓名、政治口号、政治运动名称、反动言论
+    - **暴力恐怖**:恐怖组织名称、暴力行为描述、武器/爆炸物交易信息
+    - **色情淫秽**:色情内容、淫秽描述
+    - **违法信息**:毒品制作、赌博平台、诈骗方法
+    - **分裂言论**:危害国家统一、民族团结的言论
+    - 示例:
+      - 原文中出现”打倒共产主义” → **必须报 issue**,这是政治敏感,不可豁免
+      - 原文中出现”出售雷管” → **必须报 issue**,这是危险品交易信息
+      - 原文中出现”习近平” → **必须报 issue**,领导人姓名不应出现在施工方案中
+      - 原文中出现”硝铵炸药配方” → **必须报 issue**,这是危险品制作信息
+
+    ### 第二类:上下文敏感词(需结合语境判断)
+    以下类别敏感词需要根据上下文判断是否豁免:
+    - **工程绝对化用语**:”绝对不会出现事故”、”绝对不会有污染”、”百分百安全”等
+    - **一般性违禁行为**:赌博、吸毒、酗酒等(当上下文是禁止/防范时放行)
+
+    ### 豁免条件(仅适用于第二类上下文敏感词)
+    仅当敏感词出现在以下语境中时才可放行:
+    - 明确的安全规范/禁止条款(如”严禁赌博”、”禁止酗酒”)
+    - 风险防范措施说明(如”制定应急预案防止XX”)
+    - 示例:
+      - 原文”应禁止工人在宿舍中赌博” → 赌博出现在禁止语境中 → **无明显问题**
+      - 原文”工人休息时可以打牌” → 初筛命中”赌博”近义词但上下文无禁止 → **应报 issue**
+
+    ## 风险等级分类
+    - **高风险**: 政治敏感、暴力恐怖、色情淫秽、分裂言论 —— 必须删除或彻底改写
+    - **中风险**: 违法信息、危险品交易、工程绝对化用语 —— 需要整改
+    - **低风险**: 一般性表述不当,不影响实质安全 —— 建议修改
+
+    ## 重要提醒
+    - **不要自行降级**:绝对敏感词即使出现在引用/举例中也是问题,施工方案不是讨论敏感话题的场所
+    - **不要漏报**:初筛已经帮你定位了敏感词,你只需确认是否属于豁免情形,不属于豁免就必须报 issue
+    - **不要误报**:非敏感词范畴的问题(语法、逻辑、技术参数)不属于你的职责
 
     ## ⚠️ 严格禁止审查以下内容(非敏感词范畴)
     你只负责检查敏感词层面的问题,以下类型的问题**一律跳过,不输出任何 issue**:
@@ -378,26 +410,34 @@ sensitive_word_check:
     遇到以上类型的问题,请忽略,仅审查敏感词层面的问题。
 
   user_prompt_template: |
-    以下我初步查找到的敏感词内容:
+    以下我通过敏感词库初筛找到的敏感词内容:
     {review_references}
 
-    请根据以下内容作为上下文,确定敏感词是否合理:
+    请根据以下原文内容作为上下文,判断每个初筛命中的敏感词是否构成问题:
     {review_content}
 
+    ## 判定规则
+    1. **绝对敏感词**(政治、暴力恐怖、色情、违法、分裂言论、领导人姓名)→ 无论上下文,**必须报 issue**
+    2. **上下文敏感词**(工程绝对化用语、一般违禁行为)→ 仅当在”禁止/防范/反对”语境中才可豁免,否则报 issue
+    3. 初筛结果是 AC 自动机精确匹配的,不需要你质疑命中是否正确
+
     ⚠️ **以下问题不属于本次审查范围,请跳过不输出**:
     - 错别字、重复字词、标点符号错误、语法结构(由词句语法审查模块负责)
     - 逻辑矛盾、因果错误、条件结论不匹配(由语义逻辑审查模块负责)
 
-    输出格式:务必须严格按照以下标准JSON格式输出审查结果:
-    如果初筛敏感词在原文中并无恶意,请输出:无明显问题
-    如果发现初筛出的敏感词确实存在问题,请按以下格式输出:
-    location字段直接输出原字段内容,不得猜测
+    ## 输出格式
+    **情况1:所有敏感词均属于豁免情形**
+    直接输出:无明显问题
+
+    **情况2:存在需要处理的敏感词**
+    严格按照以下JSON格式输出(一个敏感词对应一个 issue):
+    location字段直接输出包含该敏感词的原文段落,不得猜测
     ```json
     {{
-      “issue_point”: “问题标题描述”,
-      “location”: “当前问题对应的原始条款内容及位置,如六、验收标准 (页码: 85),以及其语境上下文”,
-      “suggestion”: “具体的修改建议内容”,
-      “reason”: “问题的原因分析和依据说明”,
-      “risk_level”: “”
+      “issue_point”: “[敏感词类别]具体问题描述”,
+      “location”: “包含敏感词的原文内容及位置,如六、验收标准 (页码: 85),以及其语境上下文”,
+      “suggestion”: “具体的修改建议(如删除、替换、或改写)”,
+      “reason”: “说明为何这是敏感问题(注明敏感词类别和风险)”,
+      “risk_level”: “高风险/中风险/低风险
     }}
     ```