Hotdry.

Article

building llm smells detection system

2026-05-29general

title: "构建 LLM 输出" 异味 "检测系统:从规则到智能分类" date: "2026-05-29T04:49:16+08:00" excerpt: "基于软件工程中 Code Smells 理念,构建 LLM 输出质量检测系统,识别重复短语、过度格式化等 AI 味特征,实现自动化质量过滤。" category: "ai-systems"

LLM 生成内容的质量控制正成为生产环境的核心挑战。借鉴软件工程中 "Code Smells"(代码异味)的概念,我们可以构建一套针对 LLM 输出的 "Text Smells" 检测系统,自动识别那些暗示潜在质量问题的表面特征。

什么是 LLM Smells

在软件工程领域,Code Smells 指代码中那些可能暗示更深层次问题的表面特征 —— 它们本身不是错误,但往往与可维护性差、设计缺陷相关联。将这一概念迁移到 LLM 输出领域,Smells 表现为重复短语、过度格式化、套话堆砌等 "AI 味" 特征。这些特征不一定意味着内容错误,但往往与低信息密度、缺乏深度、模式化生成相关联。

研究表明,不同模型在检测此类模式时表现差异显著。Gemini 在代码异味检测任务中达到 74-80% 的准确率,显著优于其他模型。这一发现提示我们:构建 Smells 检测系统时,模型选择是首要决策点。

常见 Smells 模式分类

基于对大量 LLM 输出的观察,可将 Smells 分为以下几类:

重复性 Smells

  • 同一短语在短距离内重复出现(如 "非常重要" 在 100 字内出现 3 次以上)
  • 句式结构的高度相似性(连续段落以 "首先... 其次... 最后..." 开头)
  • 过渡词的机械使用("值得注意的是"、"需要指出的是" 等高频出现)

格式化 Smells

  • 过度使用 Markdown 层级(超过 4 级嵌套)
  • 列表项的均匀长度(所有 bullet points 长度差异小于 20%)
  • 段落长度的机械分布(每段字数接近平均值的 ±10%)

语义 Smells

  • 信息密度过低(实体词占比 < 30%)
  • 观点与论据的失衡(断言多而证据少)
  • 过度概括(频繁使用 "所有"、"总是"、"绝对" 等极端词汇)

检测架构:规则引擎 + LLM 分类器

生产级 Smells 检测系统应采用混合架构:

第一层:确定性规则过滤 使用正则表达式和统计方法快速识别明显的 Smells。关键参数包括:

  • 重复短语阈值:n-gram 重复率 > 0.15(15% 的 n-gram 出现重复)
  • 格式异常阈值:段落长度变异系数 < 0.2
  • 套话密度阈值:预定义套话列表命中次数 > 5 次 / 千字

第二层:LLM 分类器 对规则层标记的候选样本进行深度分析。提示工程策略建议采用 Zero-shot Chain-of-Thought(ZS-CoT)模板,引导模型逐步分析文本特征。研究表明,结构化提示可将检测准确率提升 15-20%。

第三层:置信度校准 引入人工反馈回路,对模型输出进行校准。建立 Smells 严重度分级(Info/Warning/Critical),避免过度过滤。

质量过滤流水线参数

实现自动化质量过滤时,建议配置以下参数:

smells_detection:
  rule_layer:
    ngram_threshold: 0.15
    paragraph_cv_threshold: 0.2
    buzzword_limit: 5  # per 1000 chars
  
  llm_layer:
    model: gemini-1.5-pro  # 检测准确率最高
    temperature: 0.0  # 最小化随机性
    max_tokens: 500
    prompt_template: "zs-cot-v4"  # 零样本思维链
  
  filtering:
    auto_reject: ["critical_smells > 3", "repetition_rate > 0.3"]
    human_review: ["warning_smells > 2"]
    pass_threshold: 0.85  # 综合质量分

局限性与改进方向

当前 Smells 检测系统存在以下局限:

语言依赖性:研究表明,LLM 在 Java 代码异味检测上的表现普遍优于 Python,提示检测效果与语言特性相关。文本检测同样面临此问题,不同语种的 Smells 模式可能差异显著。

误报与漏报:重构 Smells 时,系统可能意外引入新的问题模式。建议在过滤流水线中引入回归检测,确保修复操作不引入新的 Smells。

覆盖率影响:实验数据显示,自动化重构可能导致测试覆盖率下降 1.76%。在文本场景下,过度过滤可能导致信息损失,需要在质量与完整性之间取得平衡。

实施建议

对于计划部署 Smells 检测系统的团队,建议采用渐进式策略:

  1. 从规则层起步:先实现基于统计的确定性检测,建立基线指标
  2. 引入 LLM 增强:在规则层标记的高置信度样本上训练 / 调优分类器
  3. 建立反馈机制:记录人工审核结果,持续优化阈值参数
  4. 监控副作用:跟踪过滤后的内容指标(如信息密度、用户满意度),防止过度优化

Smells 检测不是替代人工审核,而是将审核资源集中在真正需要关注的样本上。通过合理的架构设计和参数调优,可将人工审核量减少 60-70%,同时保持甚至提升内容质量。


参考来源

  • Santana Jr. et al. "Evaluating LLM's Effectiveness in Detecting and Correcting Test Smells: An Empirical Study", arXiv:2506.07594, 2025.
  • 研究涵盖 GPT-4、Gemini、LLaMA 在 Python/Java 测试代码异味检测与重构任务的系统性评估。

general

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com