在软件开发过程中,测试用例的生成一直是一个既重要又耗时的环节。近年来,大型语言模型(LLM)在这一领域展现出了巨大的潜力。然而,实践表明,即使是同一个提示词(Prompt),在不同的LLM上也会产生截然不同的效果。例如研究者的实验显示,在Defects4J数据集上,同一个提示词在ChatGPT上可以达到24.46%的代码行覆盖率,但在Llama-3.1上的表现却大幅下降。这种差异凸显出了一个关键问题:我们需要为每个LLM量身定制最优的提示词,而不是使用统一的模板。但手动设计和优化提示词不仅耗时,而且难以保证效果。这就需要一个能够自动为不同LLM优化提示词的系统。
来自香港中文大学、哈尔滨工业大学(深圳)等机构的研究团队提出了一个突破性的解决方案——MAPS(LLM-tAilored Prompt generation method for teSt case generation)。这是首个能够自动为不同LLM优化测试用例生成提示词的系统。MAPS通过三个创新模块解决了现有方法的核心痛点:提示词多样性不足、缺乏错误指导以及领域知识缺失。
MAPS系统工作流程概览。 该图展示了MAPS自适应提示优化系统的完整工作流程,采用模块化设计,包含以下核心组件:
1.领域上下文知识提取(左侧蓝框)
2.多样性引导的提示生成(右上红框)
3.失败驱动的规则归纳(右下橙框)
4.迭代优化机制(中心环路)
系统通过这三个模块的协同工作,实现了提示词的自动优化过程。初始提示词(Seed Prompts)经过不断迭代优化,最终产生高质量的测试用例。整个过程是自适应的,可以根据不同LLM的特点动态调整优化策略。
这个模块解决了现有方法中提示词变化不足的问题。传统方法往往产生高度相似的提示词,如"Create unit tests to verify..."、"Create unit tests to validate..."等,这严重限制了优化空间。MAPS采用了创新的多样性度量方法,通过计算提示词之间的语义差异,确保每次生成的候选提示词都能探索不同的表达方式。研究者设计了一个基于编辑距离和语义相似度的混合评分机制,当新生成的提示词与现有提示词过于相似时,系统会自动调整生成策略,确保探索更广阔的可能性。
MAPS系统的提示词模板。 该图展示了MAPS系统中使用的三种核心提示词模板,每个模板都针对特定的优化任务,包含以下组成部分:
1.修改提示模板(左图)
2.反思提示模板(中图)
3.转换提示模板(右图)
这三个模板共同构成了MAPS系统的提示词优化框架,通过角色定位、任务描述和目标设定的精心设计,确保了系统能够生成高质量、多样化的测试用例。
这个模块着眼于解决一个普遍存在但常被忽视的问题:如何从失败的测试用例中学习。研究者发现,即使是优化后的提示词生成的测试用例,往往会重复出现相同类型的错误。MAPS创新性地引入了失败模式分析机制,通过归纳常见错误类型(如抽象类实例化、参数类型不匹配等),自动生成相应的规避策略,并将这些策略融入到提示词优化过程中。这种方法不仅提高了测试用例的质量,还大大加快了优化收敛速度。
这是MAPS最具特色的创新点之一。传统方法往往只关注目标方法本身,而忽略了更广泛的上下文信息。MAPS系统会自动分析目标类的继承关系、成员方法签名以及跨文件的调用关系,构建完整的知识图谱。这些信息被巧妙地整合到提示词中,使LLM能够生成更符合实际场景的测试用例。例如,对于抽象类的测试,系统会自动提供可用的具体实现类信息,有效避免了实例化错误。
最终提示词格式与上下文信息提取示例。该图以一个Java类的测试用例生成为例,展示了MAPS系统如何提取和组织代码上下文信息,以及最终优化后的提示词格式。图中以Axis类(实现了Cloneable和Serializable接口)为例,详细展示了以下核心要素:
1.提示词设计(顶部红黄色部分)
2.领域知识提取(中部蓝色部分)
public abstract class Axis implements Cloneable, Serializable
setTickLabelInsets
及其参数类型RectangleInsets
setTickLabelInsets
和getTickLabelInsets
的实现细节3.上下文信息整合(底部绿色部分)
RectangleInsets
类的定义和使用RectangleInsets
类的多个构造函数重载4.知识组织方式(右侧标注)
CategoryAxis
类的继承信息MAPS提示词优化算法。 该算法展示了MAPS系统如何通过迭代优化来生成高质量的提示词。算法接收现有提示词集合(P)、已有规则(ER)、处理过的失败案例(H)等作为输入,通过以下步骤进行优化:
1.多样性引导的提示生成(第2-7行)
2.失败驱动的规则归纳(第8-11行)
3.规则验证与选择(第12-15行)
这个算法展示了MAPS如何将多样性探索和失败经验学习相结合,实现提示词的持续优化。通过这种方式,系统能够不断提升测试用例的生成质量。
研究团队在Defects4J基准数据集上进行了全面的实验评估,结果令人振奋:
1.相比现有最先进的提示词优化方法,MAPS在代码行覆盖率上平均提升了6.19%,分支覆盖率提升了5.03%。
2.在不同LLM上的表现都实现了显著提升:
为了深入理解MAPS系统各个组件的贡献,研究团队进行了详细的消融实验:
MAPS系统的消融实验结果。 通过移除不同的关键组件,分析它们对系统性能的影响:
1.完整MAPS系统
2.组件重要性分析
3.跨模型表现
这些实验结果不仅验证了MAPS系统的整体效果,也证明了每个组件对于提升测试用例生成质量的重要性。
MAPS系统参数分析与迭代效果实验。 这组图展示了MAPS系统在不同参数设置和模型上的性能表现,通过代码行覆盖率(Line Coverage)指标进行评估:
1.种子提示词数量影响(图4a)
2.生成提示词数量影响(图4b)
3.迭代优化效果(图5)
这些实验结果表明,MAPS系统不仅在参数设置上具有良好的稳定性,而且在不同大语言模型上都能实现显著的性能提升。特别是通过迭代优化,系统能够持续改进测试用例的覆盖率,最终达到稳定的高性能水平。
MAPS的成功为Prompt工程领域带来了几个重要启示:
仅仅关注提示词的语义表达是不够的,还需要考虑:
随着LLM种类的增多,手动设计和优化提示词的方法将变得越来越不可持续。MAPS展示了自动化优化的可行性和优势,这个方向值得更多关注和投入。
MAPS的成功很大程度上得益于其对领域知识的充分利用。这提醒我们,在设计提示词时,除了通用的工程原则,还要特别注意领域特定的知识和约束。
MAPS系统的出现标志着Prompt工程进入了一个新阶段。它不仅解决了测试用例生成中的具体问题,更重要的是提供了一个可推广的框架,展示了如何将提示词优化从手工艺术转变为系统工程。对于正在开发AI产品的工程师来说,MAPS提供的方法和思路值得深入学习和借鉴。它提醒我们,优秀的Prompt不是靠直觉和运气,而是可以通过系统化的方法来设计和优化的。关于更多提示词优化,您也可以看下下面资料汇总中提到的优化方法。
文章来自于“AI修猫Prompt”,作者“AI修猫Prompt”。
【免费】cursor-auto-free是一个能够让你无限免费使用cursor的项目。该项目通过cloudflare进行托管实现,请参考教程进行配置。
视频教程:https://www.bilibili.com/video/BV1WTKge6E7u/
项目地址:https://github.com/chengazhen/cursor-auto-free?tab=readme-ov-file
【开源免费】n8n是一个可以自定义工作流的AI项目,它提供了200个工作节点来帮助用户实现工作流的编排。
项目地址:https://github.com/n8n-io/n8n
在线使用:https://n8n.io/(付费)
【开源免费】DB-GPT是一个AI原生数据应用开发框架,它提供开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单、更方便。
项目地址:https://github.com/eosphoros-ai/DB-GPT?tab=readme-ov-file
【开源免费】VectorVein是一个不需要任何编程基础,任何人都能用的AI工作流编辑工具。你可以将复杂的工作分解成多个步骤,并通过VectorVein固定并让AI依次完成。VectorVein是字节coze的平替产品。
项目地址:https://github.com/AndersonBY/vector-vein?tab=readme-ov-file
在线使用:https://vectorvein.ai/(付费)
【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。
项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md
在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0