# 敏感词检查单元测试说明(完整版) ## 📋 测试概述 本测试模块针对 `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