# 敏感词检查单元测试说明（完整版）

## 📋 测试概述

本测试模块针对 `AIReviewEngine.check_sensitive` 方法进行单元测试，**包含完整的大模型二审功能**，支持自定义文本检查。

## 🎯 测试目标

测试 `core/construction_review/component/construction_review/ai_review_engine.py` 文件中第 450-460 行的 `check_sensitive` 方法。

## ✨ 主要特性

### 1. **完整的大模型二审功能**

-   ✅ 关键词匹配检测（第一步）
-   ✅ 大模 �� 二审（第二步，与原函数完全一致）
-   ✅ 调用 `review()` 方法进行深度审查
-   ✅ 返回详细的审查结果

### 2. **自定义文本输入**

-   ✅ 交互式文本输入
-   ✅ 支持多行文本
-   ✅ 实时检查反馈
-   ❌ 移除了内置测试用例

### 3. **详细日志输出**

-   ✅ 每个步骤的详细日志
-   ✅ 执行时间统计
-   ✅ 敏感词详细信息
-   ✅ 大模型审查结果

## 🔧 功能实现

### 核心函数：`check_sensitive_with_llm_review()`

```python
async def check_sensitive_with_llm_review(
    trace_id_idx: str,           # 追踪ID索引
    review_content: str,         # 审查内容
    review_references: str,      # 审查参考信息
    review_location_label: str,  # 审查位置标签
    state: Dict,                 # 状态字典
    stage_name: str              # 阶段名称
) -> Any:
```

**执行流程**：

```
步骤1: 关键词匹配检测
   ↓
检测到敏感词？
   ↓ 是
步骤2: 格式化敏感词信息
   ↓
步骤3: 调用大模型二审
   ↓
   └─→ self.construction_review/ai_review_engine.review(
           "sensitive_check",
           trace_id,
           "basic",
           "sensitive_word_check",
           review_content,
           formatted_sensitive_words,
           ...
       )
   ↓
返回大模型审查结果

   ↓ 否（未检测到敏感词）
步骤2: 构造成功返回体
   ↓
返回 ReviewResult(success=True)
```

## 🚀 使用方法

### 方法 1：直接运行（推荐）

```bash
cd h:\UGit\LQAgentPlatform
python utils_test/Sensitive_Test/test_sensitive_check_standalone.py
```

### 方法 2：使用批处理脚本

```bash
cd h:\UGit\LQAgentPlatform\utils_test\Sensitive_Test
run_test.bat
```

## 📝 交互式输入说明

运行程序后，会提示输入要检查的文本：

```
================================================================================
请输��要检查的文本内容
================================================================================
提示：
  1. 可以输入多行文本，输入完成后单独一行输入 'END' 结束
  2. 直接按回车（输入空行）将跳过自定义输入
================================================================================
>>>
```

### 输入示例

**示例 1：单行文本**

```
>>> 本工程为住宅楼建设项目，采用框架结构
... END
```

**示例 2：多行文本**

```
>>> 本施工方案编制依据包括：
... 1. 《建筑工程施工质量验收统一标准》GB50300-2013
... 2. 《混凝土结构工程施工质量验收规范》GB50204-2015
... 3. 施工图纸及相关设计文件
... END
```

**示例 3：跳过输入**

```
>>> [直接按回车]
```

## 📊 日志输出示例

### 1. 初始化阶段

```
[INFO] ================================================================================
[INFO] 初始化敏感词检查测试类
[INFO] ================================================================================
[INFO] AI审查引擎初始化成功
[INFO] 正在初始化敏感词检测器...
[INFO] 敏感词检测器初始化成功: {'total_words': 12345, 'sources': 15}
```

### 2. 检测阶段（未检测到敏感词）

```
[INFO] ================================================================================
[INFO] 开始执行敏感词检查 - trace_id: sensitive_check_custom_001
[INFO] 阶段名称: 自定义测试
[INFO] 审查位置: 自定义文本检查
[INFO] 审查内容长度: 156 字符
[INFO] 审查内容预览: 本工程为住宅楼建设项目，采用框架结构，建筑面积约5000平方米...
[INFO] ================================================================================
[INFO] 步骤1: 开始关键词匹配检测...
[INFO] 步骤1: 关键词检测完成，耗时: 0.0023s
[INFO] 步骤2: 未检测到敏感词
[INFO] 步骤3: 敏感词检查完成（未检测到敏感词），总耗时: 0.0025s
[INFO] ================================================================================
```

### 3. 检测阶段（检测到敏感词 + 大模型二审）

```
[INFO] ================================================================================
[INFO] 开始执行敏感词检查 - trace_id: sensitive_check_custom_001
[INFO] 阶段名称: 自定义测试
[INFO] 审查位置: 自定义文本检查
[INFO] 审查内容长度: 89 字符
[INFO] 审查内容: 这是一段包含敏感内容的测试文本...
[INFO] ================================================================================
[INFO] 步骤1: 开始关键词匹配检测...
[INFO] 步骤1: 关键词检测完成，耗时: 0.0018s
[WARNING] 步骤2: 检测到 2 个敏感词，准备送入大模型二审
[WARNING] --------------------------------------------------------------------------------
[WARNING]   敏感词 #1: 敏感词: xxx, 位置: 15-18, 来源: 某词库.txt
[WARNING]   敏感词 #2: 敏感词: yyy, 位置: 35-38, 来源: 某词库.txt
[WARNING] --------------------------------------------------------------------------------
[INFO] 步骤3: 调用大模型进行二审...
[INFO] 步骤3: 大模型二审完成，总耗时: 2.3456s
[INFO] ================================================================================
```

### 4. 结果显示

```
[INFO] --------------------------------------------------------------------------------
[INFO] 检查结果:
[INFO] --------------------------------------------------------------------------------
[INFO]   返回类型: ReviewResult
[INFO]   是否成功: False
[INFO]   执行时间: 2.3456s
[INFO]   详细信息: {'name': 'sensitive_check', 'response': '...大模型审查结果...'}
[WARNING]
[WARNING] 检测到敏感内容，请查看上方详细信息
[INFO] --------------------------------------------------------------------------------
```

## 🔍 与原函数的对比

| 功能项           | 原函数 | 测试函数 | 说明                           |
| ---------------- | ------ | -------- | ------------------------------ |
| 关键词匹配检测   | ✅     | ✅       | 完全保留                       |
| 敏感词信息格式化 | ✅     | ✅       | 完全保留                       |
| **大模型二审**   | ✅     | ✅       | **完全保留，调用 review 方法** |
| 消息推送         | ✅     | ❌       | 测试中移除                     |
| 结果封装         | ✅     | ✅       | 完全保留                       |
| 执行时间统计     | ✅     | ✅       | 完全保留                       |
| 日志记录         | ✅     | ✅       | 增强版                         |

## ⚙️ 技术细节

### 大模型二审调用

```python
# 与原函数完全一致的调用方式
result = await self.construction_review/ai_review_engine.review(
    "sensitive_check",              # 审查名称
    trace_id,                       # 追踪ID
    "basic",                        # 审查器类型
    "sensitive_word_check",         # 提示词名称
    review_content,                 # 审查内容
    formatted_sensitive_words,      # 格式化的敏感词信息
    None,                           # reference_source
    review_location_label,          # 审查位置标签
    state,                          # 状态字典
    stage_name                      # 阶段名称
)
```

### 敏感词格式化

```python
# 格式化敏感词信息，传递给大模型
sensitive_words_info = []
for item in first_results:
    sensitive_words_info.append(
        f"敏感词: {item['word']}, "
        f"位置: {item['position']}-{item['end_position']}, "
        f"来源: {item['source']}"
    )
formatted_sensitive_words = "\n".join(sensitive_words_info)
```

## ⚠️ 注意事项

1. **依赖要求**：

    - 需要完整的项目环境
    - 需要敏感词库文件
    - 需要大模型 API 配置

2. **运行环境**：

    - 必须在项目根目录运行
    - 需要正确的 Python 环境
    - 需要网络连接（大模型 API 调用）

3. **输入限制**：

    - 文本长度无限制
    - 支持中英文混合
    - 支持特殊字符

4. **性能考虑**：
    - 关键词检测：毫秒级
    - 大模型二审：秒级（取决于 API 响应）

## 📈 测试建议

### 推荐测试场景

1. **正常文本**：施工方案、技术文档等
2. **边界情况**：空文本、超长文本
3. **特殊字符**：技术符号、数学公式
4. **混合文本**：中英文混合、数字混合

### 测试流程

```
1. 运行测试程序
   ↓
2. 输入测试文本
   ↓
3. 观察检测过程
   ↓
4. 查看检测结果
   ↓
5. 分析大模型审查意见
```

## 🆚 版本对比

### v1.0（原版本）

-   ❌ 无大模型二审
-   ✅ 内置测试用例
-   ✅ 批量测试

### v2.0（当前版本）

-   ✅ **完整大模型二审**
-   ✅ **自定义文本输入**
-   ✅ **交互式操作**
-   ✅ **详细日志输出**
-   ❌ 移除内置测试用例

## 📞 问题反馈

如有问题或建议，请联系开发团队。

---

**最后更新**: 2025-12-25
**版本**: v2.0
**作者**: AI Assistant
