#!/usr/bin/env python3 """ 验证报告 - 确认请求上下文和日志系统修复完成 """ import sys import os import traceback sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) def run_verification(): """运行完整的验证测试""" print("🔍 开始系统验证...") print("=" * 60) tests_passed = 0 tests_total = 0 def run_test(test_name, test_func): nonlocal tests_passed, tests_total tests_total += 1 try: test_func() print(f"✅ {test_name}") tests_passed += 1 except Exception as e: print(f"❌ {test_name} - 失败: {e}") traceback.print_exc() # 测试1: 基础模块导入 def test_imports(): from utils.logger import get_logger, setup_logging from context.request_context import create_request_context, RequestContextStage from query.query_parser import QueryParser assert get_logger is not None assert create_request_context is not None # 测试2: 日志系统 def test_logging(): from utils.logger import get_logger, setup_logging setup_logging(log_level="INFO", log_dir="verification_logs") logger = get_logger("verification") logger.info("测试消息", extra={'reqid': 'test', 'uid': 'user'}) # 测试3: 请求上下文创建 def test_context_creation(): from context.request_context import create_request_context context = create_request_context("req123", "user123") assert context.reqid == "req123" assert context.uid == "user123" # 测试4: 查询解析(这是之前出错的地方) def test_query_parsing(): from context.request_context import create_request_context from query.query_parser import QueryParser class TestConfig: class QueryConfig: enable_query_rewrite = False rewrite_dictionary = {} enable_translation = False supported_languages = ['en', 'zh'] enable_text_embedding = False query_config = QueryConfig() indexes = [] config = TestConfig() parser = QueryParser(config) context = create_request_context("req456", "user456") # 这之前会抛出 "Logger._log() got an unexpected keyword argument 'reqid'" 错误 result = parser.parse("test query", context=context, generate_vector=False) assert result.original_query == "test query" # 测试5: 完整的中文查询处理 def test_chinese_query(): from context.request_context import create_request_context from query.query_parser import QueryParser class TestConfig: class QueryConfig: enable_query_rewrite = True rewrite_dictionary = {'芭比娃娃': 'brand:芭比'} enable_translation = False supported_languages = ['en', 'zh'] enable_text_embedding = False query_config = QueryConfig() indexes = [] config = TestConfig() parser = QueryParser(config) context = create_request_context("req789", "user789") result = parser.parse("芭比娃娃", context=context, generate_vector=False) # 语言检测可能不准确,但查询应该正常处理 assert result.original_query == "芭比娃娃" assert "brand:芭比" in result.rewritten_query # 测试6: 性能摘要 def test_performance_summary(): from context.request_context import create_request_context, RequestContextStage context = create_request_context("req_perf", "user_perf") context.start_stage(RequestContextStage.TOTAL) context.start_stage(RequestContextStage.QUERY_PARSING) context.end_stage(RequestContextStage.QUERY_PARSING) context.end_stage(RequestContextStage.TOTAL) summary = context.get_summary() assert 'performance' in summary assert 'stage_timings_ms' in summary['performance'] # 运行所有测试 run_test("基础模块导入", test_imports) run_test("日志系统", test_logging) run_test("请求上下文创建", test_context_creation) run_test("查询解析(修复验证)", test_query_parsing) run_test("中文查询处理", test_chinese_query) run_test("性能摘要", test_performance_summary) # 输出结果 print("\n" + "=" * 60) print(f"📊 验证结果: {tests_passed}/{tests_total} 测试通过") if tests_passed == tests_total: print("🎉 所有验证通过!系统修复完成。") print("\n🔧 修复内容:") print(" - 修复了 utils/logger.py 中的日志参数处理") print(" - 修复了 context/request_context.py 中的日志调用格式") print(" - 修复了 query/query_parser.py 中的日志调用格式") print(" - 修复了 search/searcher.py 中的日志调用格式") print(" - 修复了 api/routes/search.py 中的日志调用格式") print("\n✅ 现在可以正常处理搜索请求,不会再出现 Logger._log() 错误。") return True else: print("💥 还有测试失败,需要进一步修复。") return False if __name__ == "__main__": success = run_verification() sys.exit(0 if success else 1)