Specification and Detection of LLM Code Smells
本文通过将五种循环出现的针对 LLM 推理的问题编码实践形式化,引入了 LLM 代码异味(LLM code smells)的概念,扩展了用于检测这些异味的 SpecDetect4AI 工具,并通过对 200 个开源系统的研究,证明了这些异味影响了超过 60% 的此类系统,且具有极高的检测精度。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你刚刚打造了一个超级聪明的机器人助手(一个大语言模型,简称 LLM),并邀请它住进你的软件里。这就像雇佣了一位天才巫师来帮你编写代码中的咒语。但问题在于:如果你不给这位巫师清晰的规则、稳定的手感和一份地图,事情可能会变得一团糟。机器人可能会感到困惑、耗尽魔力,或者开始胡言乱语。
这篇论文就像是一本侦探指南,旨在识别开发者在邀请这些“巫师”进入代码时,不小心养成的“坏习惯”。作者们——Brahim, Zacharie, Naouel, Quentin 和 Florent——意识到,虽然大家都知道如何写代码,但还没有人专门写出一份正式的清单,来列出那些专门发生在 LLM 使用场景下的特定“气味”(即那些不会立即导致崩溃,但会让软件在后期“生病”的微妙坏习惯)。
五种“坏习惯”(气味)
团队研究了研究论文、技术博客和现实世界的代码,找到了五个经常出现的难题。把这些看作是“搞砸巫师工作的五大顶尖方式”:
- “无限预算”气味(无限制的最大度量值/Unbounded Max Metrics): 想象一下你告诉你的巫师:“去写个故事,但直到用完纸张或时间为止,否则不要停。”在现实世界中,API 是有限制的。如果你不设置限制,规定巫师能吐出多少个词(token),或者他们思考多久(超时),你可能会得到一个半成品故事,或者更糟——你的电脑可能会因为等待而陷入死循环,让你支付巨额费用。解决方法?始终为长度和时间设定一个硬性停止点。
- “移动目标”气味(未锁定模型版本/No Model Version Pinning): 想象你的巫师名叫“GPT-4”。但如果背后的公司在明天偷偷把“GPT-4”身体里的脑子换成了另一个,该怎么办?如果你没有将代码锁定在特定版本(例如“2024年11月20日的 GPT-4”),你的软件今天可能运行正常,明天却表现得极其诡异,因为巫师变了。解决方法?将巫师锁定在一个特定的、不可更改的版本上。
- “没有老板”气味(缺少系统消息/No System Message): 想象你把巫师送进一个房间,却没告诉他们是谁,或者规则是什么。他们可能会在你想要老师的时候表现得像个喜剧演员,或者在你想要程序员的时候表现得像个诗人。如果没有一个“系统消息”(System Message)来设定基调和角色,结果将是不可预测且难以控制的。解决方法?在工作开始前,始终给巫师一份清晰的职位描述。
- “凌乱桌面”气味(无结构化输出/No Structured Output): 想象你要求巫师列出一份食材清单,但他递给你的却是一段喋喋不休的文字,而不是整齐的列表。如果你的软件期望得到一个整齐的列表(如 JSON)来执行任务,它会在尝试读取这一团乱麻时崩溃。解决方法?强制要求巫师以严格的格式进行书写,比如一份清单,这样你的软件就能轻松读取。
- “过山车”气味(未明确设置温度/Temperature Not Explicitly Set): 想象一下巫师的“创意旋钮”。如果你不设置它,巫师可能今天非常严肃,明天又极其混乱,这取决于默认设置是什么。这会让你的软件变得不可靠,因为同样的问题每次得到的答案都不同。解决方法?始终将旋钮转到一个特定的数字,让巫师的行为保持一致。
他们的发现(证据)
为了观察这些坏习惯有多普遍,团队构建了一个名为 SpecDetect4LLM 的特殊工具。你可以把它看作是一个专门检查这五种特定“巫师相关错误”的拼写检查器。他们在 200 个使用 LLM 的开源软件项目中运行了这个工具。
重大发现来了:这 200 个项目中,有 60.50% 至少存在一种上述坏习惯。这超过了一半!
该工具在发现真实问题方面表现出色,精确率(Precision)达到了 86.06%。这意味着,当工具说“嘿,你这里有个坏习惯”时,它在 100 次中有 86 次是正确的。
他们还细分了每种气味出现的频率:
- 无结构化输出 (NSO): 最常见,出现在 40.50% 的系统中。
- 无限制的最大度量值 (UMM): 出现在 38.00% 的系统中。
- 未锁定模型版本 (NMVP): 出现在 36.00% 的系统中。
- 未明确设置 LLM 温度 (TNES): 出现在 36.50% 的系统中。
- 缺少系统消息 (NSM): 出现在 34.50% 的系统中。
他们不知道的部分(局限性)
需要注意的是,这篇论文并没有做以下事情。作者们并没有尝试计算他们漏掉了多少个坏习惯(他们没有测量“召回率/Recall”)。他们只检查了工具在发现问题时的准确性。此外,他们的工具观察的是页面上的代码(静态分析),因此无法看到代码在实际运行时与巫师对话时的实时情况。他们建议未来的工作可以研究这些运行时的影响,但就目前而言,他们只测量了静止在文件中的代码。
总结
核心观点并不是说这些系统已经坏到无法挽救。而是开发者往往把这些强大的 AI 工具当作没有说明书的“魔法盒”来对待。通过定义这五种“气味”并构建一个寻找它们的工具,作者们正在为开发者提供一份清单,使他们的 AI 集成软件更加可靠、运行成本更低且更易于后期维护。他们并不是在说他们解决了整个 AI 安全问题,但他们确实找到了这条路上的前五个坑洼,并竖起了告示牌,好让其他人能够避开。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。