#!/usr/bin/env python3 """ 演示不同算分方法的效果 """ import asyncio from lib.text_embedding import compare_phrases import time async def demo_default_method(): """演示默认算分方法""" print("=" * 70) print("1. 默认算分方法: ai_direct") print("=" * 70) print() print("默认情况下,compare_phrases() 使用 AI 直接判断语义相似度") print("这与 semantic_similarity.py 的方法完全相同\n") phrase_a = "深度学习" phrase_b = "神经网络" print(f"测试短语: 【{phrase_a}】 vs 【{phrase_b}】\n") # 不指定 method,使用默认值 ai_direct result = await compare_phrases(phrase_a, phrase_b) print("返回结果:") print(f" 相似度: {result['相似度']}") print(f" 说明: {result['说明']}") print() print("工作原理:") print(" 1. AI 读取两个短语") print(" 2. AI 理解它们的语义") print(" 3. AI 直接给出相似度分数和理由") print() async def demo_all_methods(): """演示所有算分方法""" print("=" * 70) print("2. 对比所有算分方法") print("=" * 70) print() test_pairs = [ ("深度学习", "神经网络"), ("机器学习", "人工智能"), ("Python编程", "Java开发"), ("今天吃饭", "深度学习"), ] methods = { "ai_direct": "AI 直接判断(默认)", "cosine": "余弦相似度", "euclidean": "欧氏距离", "manhattan": "曼哈顿距离", "dot_product": "点积相似度", } for pair_idx, (phrase_a, phrase_b) in enumerate(test_pairs, 1): print(f"\n测试 {pair_idx}: 【{phrase_a}】 vs 【{phrase_b}】") print("-" * 70) results = [] for method, description in methods.items(): result = await compare_phrases( phrase_a, phrase_b, method=method, dim=128 # 使用较小维度加快测试 ) results.append((method, description, result['相似度'])) # 按相似度排序 results.sort(key=lambda x: x[2], reverse=True) for method, description, score in results: bar = "█" * int(score * 30) # 可视化 print(f" {description:25s} {score:.3f} {bar}") print() async def demo_speed_comparison(): """演示不同方法的速度对比""" print("=" * 70) print("3. 速度对比(缓存机制演示)") print("=" * 70) print() phrase_a = "测试文本A" phrase_b = "测试文本B" print(f"测试短语: 【{phrase_a}】 vs 【{phrase_b}】\n") # 第一次调用(无缓存) print("第一次调用(无缓存):") start = time.time() result1 = await compare_phrases(phrase_a, phrase_b) time1 = time.time() - start print(f" 耗时: {time1:.2f} 秒") print(f" 相似度: {result1['相似度']}") print() # 第二次调用(有缓存) print("第二次调用(有缓存):") start = time.time() result2 = await compare_phrases(phrase_a, phrase_b) time2 = time.time() - start print(f" 耗时: {time2:.2f} 秒") print(f" 相似度: {result2['相似度']}") print(f" 加速比: {time1/time2:.1f}x") print() print("结论:") print(" - 首次调用需要请求 AI,耗时较长") print(" - 缓存命中后,速度极快(几乎瞬间)") print(" - 生产环境中,缓存大幅降低成本和延迟") print() async def demo_accuracy_vs_speed(): """演示准确度 vs 速度的权衡""" print("=" * 70) print("4. 准确度 vs 速度权衡") print("=" * 70) print() test_cases = [ ("深度学习", "神经网络", "高度相关"), ("机器学习", "人工智能", "相关"), ("Python", "Java", "弱相关"), ("编程", "吃饭", "不相关"), ] print("测试不同语义关系的短语对:\n") for phrase_a, phrase_b, relation in test_cases: print(f"【{phrase_a}】 vs 【{phrase_b}】 (预期: {relation})") # AI 直接判断(最准确) result_ai = await compare_phrases(phrase_a, phrase_b, method="ai_direct") # 余弦相似度(次准确) result_cosine = await compare_phrases(phrase_a, phrase_b, method="cosine", dim=128) print(f" AI 判断: {result_ai['相似度']:.3f} - {result_ai['说明'][:40]}...") print(f" 余弦相似度: {result_cosine['相似度']:.3f}") # 对比差异 diff = abs(result_ai['相似度'] - result_cosine['相似度']) print(f" 差异: {diff:.3f}") print() print("结论:") print(" - AI 直接判断: 准确度最高,能给出详细理由") print(" - 余弦相似度: 速度更快,但可能不如 AI 准确") print(" - 建议: 默认使用 AI 直接判断,批量计算时考虑余弦") print() async def demo_method_selection_guide(): """演示如何选择算分方法""" print("=" * 70) print("5. 算分方法选择指南") print("=" * 70) print() print("┌─────────────────────────────────────────────────────────┐") print("│ 场景 │ 推荐方法 │") print("├─────────────────────────────────────────────────────────┤") print("│ 日常使用,追求准确度 │ ai_direct (默认) ⭐ │") print("│ 批量计算,已有向量 │ cosine │") print("│ 需要详细解释原因 │ ai_direct (默认) │") print("│ 对成本敏感,大量计算 │ cosine │") print("│ 与 semantic_similarity 兼容 │ ai_direct (默认) │") print("│ 需要稳定可复现的结果 │ cosine/euclidean │") print("└─────────────────────────────────────────────────────────┘") print() print("使用建议:") print() print("1️⃣ 99% 的情况,直接用默认值(不传 method 参数)") print(" result = await compare_phrases('A', 'B') # 使用 ai_direct") print() print("2️⃣ 批量计算时,可以考虑 cosine") print(" result = await compare_phrases('A', 'B', method='cosine')") print() print("3️⃣ 不确定时,用默认值就对了!") print() async def main(): """运行所有演示""" print("\n") print("╔══════════════════════════════════════════════════════════════════╗") print("║ 默认算分逻辑演示 - text_embedding.py ║") print("╚══════════════════════════════════════════════════════════════════╝") print() # 1. 默认方法 await demo_default_method() input("按回车继续下一个演示...") print("\n") # 2. 对比所有方法 await demo_all_methods() input("按回车继续下一个演示...") print("\n") # 3. 速度对比 await demo_speed_comparison() input("按回车继续下一个演示...") print("\n") # 4. 准确度 vs 速度 await demo_accuracy_vs_speed() input("按回车继续下一个演示...") print("\n") # 5. 选择指南 await demo_method_selection_guide() print("=" * 70) print("所有演示完成!") print("=" * 70) print() print("核心结论:") print(" ✅ 默认使用 ai_direct(不需要指定 method 参数)") print(" ✅ 与 semantic_similarity.py 完全兼容") print(" ✅ 有缓存机制,第二次调用极快") print(" ✨ 支持多种算分方法,按需选择") print() if __name__ == "__main__": asyncio.run(main())