大型语言模型(Large Language Models, LLMs)已成为现代软件的关键组成部分,而提示(prompts)则充当了事实上的编程接口。然而,提示设计在很大程度上仍依赖经验主义,哪怕是微小的错误也可能引发连锁反应,导致系统表现出不可靠、不安全或低效的行为。本文提出了首个关于提示缺陷的系统性综述与分类学研究,所谓“提示缺陷”是指提示未能从 LLMs 中引导出预期行为的反复性问题。我们从六个维度对缺陷进行组织:(1) 规范与意图 (Specification & Intent),(2) 输入与内容 (Input & Content),(3) 结构与格式 (Structure & Formatting),(4) 上下文与记忆 (Context & Memory),(5) 性能与效率 (Performance & Efficiency),以及 (6) 可维护性与工程性 (Maintainability & Engineering)。每个维度进一步细化为若干子类型,并辅以具体示例与根因分析。基于软件工程原理,我们展示了这些缺陷如何在实际开发流程中浮现,并考察了其下游影响。针对每一种子类型,我们提炼了相应的缓解策略,涵盖新兴的提示工程模式、自动化护栏、测试框架以及评估体系。最终,我们总结出一份总分类学图谱,将缺陷、影响与对策关联起来。本文最后讨论了开放的研究挑战,并呼吁构建面向提示工程的严格方法论,以确保基于 LLM 的系统在设计之初即具备可靠性。
大型语言模型(Large Language Models, LLMs)已经成为现代软件应用中不可或缺的组成部分,被广泛用于自然语言问答、代码生成与修复等任务 [1, 9, 44, 45]。在这些基于 LLM 的系统中,提示(prompt)——作为指令模型的自然语言输入——实际上扮演了源代码的角色,决定着模型的行为 [6, 40]。这一范式有时被称为基于提示的软件或 promptware [6],它使得开发者可以通过自然语言指令执行复杂任务,而无需依赖传统编程。然而,与常规代码不同,提示是以一种模糊、非结构化、上下文依赖的媒介(自然语言)编写,并在一种非确定性、概率驱动的引擎(LLM)上执行 [38, 48]。这些根本性的差异引入了独特且重大的挑战,使得在提示开发中保障可靠性和可预测性变得困难,往往使提示设计退化为一种迭代的、经验主义的“试错”过程。 这种内在的模糊性与非确定性使得提示极易产生缺陷:即导致 LLM 输出偏离用户意图的错误或不足,就如同源代码中的 bug 会引发程序的错误行为 [19]。实证证据表明,提示缺陷可能引发多种失败模式,从琐碎的格式问题,到严重的错误信息传播,再到关键的安全漏洞 [5, 13, 26, 37]。例如,定义不清的提示可能导致无关或错误的回答 [19, 37];而恶意构造的用户输入则可能注入指令,覆盖系统的原始意图,类似于代码注入攻击 [26]。进一步地,攻击者甚至可以利用助手提示暴露机密的系统指令,或生成违规内容 [5, 33]。这些失败模式凸显出,提示质量不仅仅是便利性或优雅性的要求,它还直接关系到基于 LLM 的应用在正确性、安全性与伦理性上的保障。 为了提升提示质量并使 LLM 输出符合下游需求,**提示工程(prompt engineering)**这一领域逐渐兴起,提出了编写、组织和验证提示的具体准则与工具 [2, 24]。诸如少样本学习 [4]、链式思维提示(Chain-of-Thought prompting)[39]、自一致性 [37] 以及检索增强生成(Retrieval-Augmented Generation, RAG)[17] 等技术,通过提供更清晰的指令、示例或外部知识,增强了 LLM 对意图的理解与期望输出的生成能力。然而,尽管取得了这些宝贵进展,提示工程仍主要依赖于临时性的经验方法,因为它缺乏对提示缺陷内在机制的系统性理解。提示缺陷的性质复杂而多面,既可能是微妙的歧义,也可能是明显的对抗性操纵,甚至在轻微扰动下也会导致性能显著下降。迄今为止,研究社区仍缺乏一个统一且系统的提示缺陷分类,导致从业者不得不依赖零散的启发式方法,而非基于原则的方法论。 在本文中,我们提出了一个关于 LLM 系统中提示缺陷的全面分类学。我们的目标是系统化地归纳提示未能从 LLM 引导出期望行为的各种方式,为软件工程师与研究人员提供一个共同的词汇体系和对这些关键失效模式的统一理解。我们基于提示或交互所影响的方面,将提示缺陷划分为六大类: * 规范与意图缺陷(Specification & Intent Defects):提示未能正确捕捉用户目标或需求(例如:指令模糊、任务描述不足)。 * 输入与内容缺陷(Input & Content Defects):提示输入的内容出现问题,包括用户输入(例如:无关或恶意输入、上下文中的事实错误)。 * 结构与格式缺陷(Structure & Formatting Defects):提示构造或语法上的错误(例如:组织不良、缺失分隔符、示例或输出格式不当)。 * 上下文与记忆缺陷(Context & Memory Defects):在处理对话上下文或记忆时的失效(例如:遗忘先前指令、上下文窗口溢出)。 * 性能与效率缺陷(Performance & Efficiency Defects):影响延迟、成本或资源使用的提示问题(例如:过长提示导致响应缓慢、低效的提示链式调用)。 * 可维护性与工程缺陷(Maintainability & Engineering Defects):将提示作为不断演化的软件工件时遇到的挑战(例如:硬编码提示、未测试的提示更改引发回归)。
这六大类每一类又包含更细粒度的缺陷子类型。在论文的核心部分,我们将逐一深入分析这些子类型,提供定义与示例,探讨缺陷产生的原因与后果,并回顾现有或潜在的缓解策略。贯穿全文,我们整合了学术研究与报告中的见解,以及工业界的实践经验与指导原则。