Generator偶尔会生成不满足MUST约束的SQL候选,这违反了我们的系统设计原则。
- 问题: LLM虽然强大,但对复杂约束的理解和执行并非100%可靠
- 表现: 即使有明确的提示词,LLM仍可能偶尔"忘记"或"误解"MUST约束
- 影响: 导致生成不合格的SQL候选
- 问题: 原有提示词可能不够明确和强调
- 表现:
- 缺乏明确的"自检流程"说明
- 没有展示"拒绝不合格候选"的示例
- 关键约束条件埋藏在长文本中
- 影响: LLM容易忽视MUST约束的重要性
- 问题: 只展示"成功案例",没有展示"失败案例的处理"
- 表现:
- 缺少自检流程的演示
- 没有显示如何拒绝不合格候选
- 对MUST约束的严格性强调不够
- 影响: LLM学习到的是"生成SQL"而不是"生成合格SQL"
- 现状: 我们已经有本地验证引擎作为保护网
- 表现: 即使Generator失误,系统仍能正常工作
- 意义: 这种"多层防护"是合理的架构设计
CRITICAL FILTERING RULES (MUST FOLLOW):
1. Generate initial SQL candidates internally
2. For EACH candidate, perform self-check against MUST constraints
3. IMMEDIATELY DISCARD any candidate where:
- must_predicates_present = false
- must_joins_present = false
- only_allowed_tables_columns = false
4. ONLY return candidates that pass ALL MUST constraint checks
5. Rank surviving candidates by SHOULD constraint satisfaction
- 添加自检流程演示
- 展示拒绝不合格候选的示例
- 强调MUST约束的不可违反性
generator_monitor.py: 实时监控Generator输出质量- 统计违规率和违规类型
- 提供改进建议和预警机制
- 显著降低MUST约束违规率(从可能的20%降到5%以下)
- 提高Generator的自检意识
- 建立质量监控机制
- 接近零违规率(<1%)
- 形成稳定的提示词模板
- 建立完善的质量保证体系
- LLM是概率模型,100%准确性不现实
- 偶尔的失误是可以接受的
- 重要的是建立有效的保护机制
- Generator: 第一道防线(自检过滤)
- 本地验证: 第二道防线(约束验证)
- SQL Guard: 第三道防线(安全改写)
- 通过监控发现问题模式
- 针对性优化提示词
- 建立反馈循环机制
- 完善Few-shot示例(当前优先级:高)
- 建立A/B测试机制,对比优化前后效果
- 收集真实使用数据,分析违规模式
- 建立自动化质量报告,定期监控系统健康度
Generator偶尔生成MUST失败候选是正常现象,关键是:
- 尽量减少这种情况(通过优化提示词)
- 有效检测和处理(通过监控和验证)
- 确保系统鲁棒性(通过多层防护)
这不是"bug",而是分布式智能系统中的预期行为,需要通过系统性解决方案来应对。