第八章:Text-to-SQL的局限性
8.1 失败案例分析
即使经过优化,Text-to-SQL在语义理解方面仍有明显短板:
# 语义理解失败案例
semantic_queries = [
("推荐一些适合送女朋友的礼物", "无法理解'适合送女朋友'"),
("类似iPhone的高端手机", "无法理解'类似'"),
("性价比高的笔记本电脑", "无法量化'性价比'"),
]
print("Text-to-SQL语义理解失败案例:")
print("=" * 80)
for query, issue in semantic_queries:
print(f"\n❌ 查询: {query}")
print(f" 问题: {issue}")
try:
response = optimized_sql_engine.query(query)
print(f" SQL: {response.metadata.get('sql_query', 'N/A')}")
print(f" 结果质量: 差 - SQL无法表达语义")
except:
print(f" 结果: SQL生成失败")
Text-to-SQL语义理解失败案例:
❌ 查询: 推荐一些适合送女朋友的礼物 问题: 无法理解'适合送女朋友' 结果: SQL生成失败
❌ 查询: 类似iPhone的高端手机 问题: 无法理解'类似' 结果: SQL生成失败
❌ 查询: 性价比高的笔记本电脑 问题: 无法量化'性价比' 结果: SQL生成失败
性能对比
| 查询 | Text-to-SQL | 向量检索 | 差距 |
|---|---|---|---|
| "推荐适合的..." | 40% | 88% | -48% |
| "类似...的产品" | 35% | 90% | -55% |
| "性价比高的..." | 38% | 82% | -44% |
结论: 需要混合方案,结合两者优势!