#!/usr/bin/env python3 """ 测试清理后的API行为 验证用户不再需要传递enable_translation等参数 """ import sys import os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) def test_cleaned_api(): """测试清理后的API行为""" print("🧪 测试清理后的API行为") print("=" * 60) try: from api.models import SearchRequest from search.searcher import Searcher from config.config_loader import ConfigLoader from context.request_context import create_request_context # 测试API模型不再包含内部参数 print("📝 测试API模型...") # 创建搜索请求 search_request = SearchRequest( query="消防", size=10, from_=0, filters=None, min_score=None ) print(f"✅ SearchRequest创建成功:") print(f" - query: {search_request.query}") print(f" - size: {search_request.size}") print(f" - from_: {search_request.from_}") print(f" - filters: {search_request.filters}") print(f" - min_score: {search_request.min_score}") # 验证不再包含内部参数 print(f"\n🚫 验证内部参数已移除:") internal_params = ['enable_translation', 'enable_embedding', 'enable_rerank'] for param in internal_params: if hasattr(search_request, param): print(f" ❌ {param} 仍然存在") return False else: print(f" ✅ {param} 已移除") # 测试搜索器使用配置默认值 print(f"\n🔧 测试搜索器使用配置默认值...") loader = ConfigLoader() config = loader.load_customer_config("customer1") print(f"✅ 配置默认值:") print(f" - enable_translation: {config.query_config.enable_translation}") print(f" - enable_text_embedding: {config.query_config.enable_text_embedding}") # 创建模拟搜索器测试 class MockESClient: def search(self, **kwargs): return { "hits": {"hits": [], "total": {"value": 0}, "max_score": 0.0}, "took": 15 } es_client = MockESClient() searcher = Searcher(config, es_client) # 测试搜索器方法签名 import inspect search_signature = inspect.signature(searcher.search) search_params = list(search_signature.parameters.keys()) print(f"\n📋 搜索器方法参数:") for param in search_params: print(f" - {param}") # 验证不再包含内部参数 print(f"\n🚫 验证搜索器参数已清理:") for param in internal_params: if param in search_params: print(f" ❌ {param} 仍然存在") return False else: print(f" ✅ {param} 已移除") # 测试实际的搜索调用 print(f"\n🧪 测试实际搜索调用...") context = create_request_context("cleaned_api_test", "test_user") result = searcher.search( query="消防", size=10, from_=0, filters=None, min_score=None, context=context ) print(f"✅ 搜索调用成功!") print(f" - 返回结果类型: {type(result).__name__}") print(f" - 总命中数: {result.total}") # 检查上下文中的功能标志 feature_flags = context.metadata.get('feature_flags', {}) print(f"\n🚩 实际使用的功能标志:") for flag, value in feature_flags.items(): print(f" - {flag}: {value}") # 验证使用了配置默认值 expected_translation = config.query_config.enable_translation expected_embedding = config.query_config.enable_text_embedding actual_translation = feature_flags.get('translation_enabled') actual_embedding = feature_flags.get('embedding_enabled') print(f"\n📊 功能验证:") print(f" 翻译功能: 期望={expected_translation}, 实际={actual_translation} {'✅' if expected_translation == actual_translation else '❌'}") print(f" 向量功能: 期望={expected_embedding}, 实际={actual_embedding} {'✅' if expected_embedding == actual_embedding else '❌'}") if expected_translation == actual_translation and expected_embedding == actual_embedding: print(f"\n🎉 API清理成功!") print(f"✅ 用户不再需要传递内部参数") print(f"✅ 后端自动使用配置默认值") print(f"✅ 功能完全透明") return True else: print(f"\n⚠️ 功能验证失败") return False except Exception as e: print(f"❌ 测试失败: {e}") import traceback traceback.print_exc() return False if __name__ == "__main__": success = test_cleaned_api() sys.exit(0 if success else 1)