嵌入式方向实践实验四
实践四_评估LLM对约束表达式的匹配能力 实验报告
实验要求
在实践二中,大家已经将约束表达式交由大语言模型去生成相应的测试用例输入,而在现实的工程环境 下,并没有所谓的正确代码,只有需求文本(即功能说明注释)与待测试的代码,这时我们可以将待测 试代码的约束表达式交由大语言模型,让其辅助判断是否与功能说明相符,是否有错误或遗漏。
本次实践的主要任务是模拟在没有标准代码的情况下,通过将待测试代码的约束表达式与功能说明注释 交给大语言模型,让其判断是否相符,以评估大语言模型对约束表达式的理解能力与匹配能力,从而探 索待测代码的约束表达式能否直接交给大语言模型判断对错,使得测试代码更加方便,准确。
本次实践的原材料依旧为上交实践一成果后分发到的约束,要求大家将每份代码的约束表达式与对应的 功能说明注释交给大语言模型,设计提示语,让其判断是否相符,是否有遗漏等匹配情况,记录下大语 言模型的判断结果(正确/错误/遗漏/……)并计算其判断正确率。
为了防止大语言模型的惯性回答,要求将分发得到的约束表达式进行一定的变异(比如故意改成错 的),来测试其判断正确率。也可以将功能说明进行一定的改动,使其与约束表达式不相符。对于一份 正确的约束,要求至少变异为一份错误的/遗漏的约束。 同时由于大语言模型的不稳定性,在评估判断正确率时,应用相同的提示语多次向大语言模型提问(无 上下文,开新的对话框提问才算为多次),取平均值,本次实践要求每份正确/错误的约束至少重复提 问 3 次,方可评估其判断正确率。
本次实践的成果要求为一份实验报告,包含你所设计的提示语(prompt)、每条约束表达式及判断结 果(文本形式记录)与大语言模型对话的截图(两三张即可),并记录下大语言模型对于约束表达式判 断正确率(请按照上述要求重复生成后再计算正确率)。
实验过程
使用的大预言模型为chatgpt3.5。
一共有五个程序,分别为:121_solution、122_add_elements、123_get_odd_collatz、124_valid_date、125_split_words。
对于每个程序,提供了五份对应的正确约束,以及一个错误约束和一个遗漏的约束,并且每份约束重复向大模型提问三次(无上下文,开新的对话框提问)。
以下是与大模型对话的prompt的示例:
1 | 我将为你提供一个程序的功能说明注释和七个约束表达式,请你帮我检验这些约束表达式是否符合该程序的功能说明,对于每个约束,请回答符合/错误/遗漏之一。 |
最后的结果如下,其中标粗表示大模型的回答与正确答案不符:
程序1:
121_solution | 第一次 | 第二次 | 第三次 |
---|---|---|---|
约束1 | 错误 | 符合 | 符合 |
约束2 | 符合 | 错误 | 符合 |
约束3 | 符合 | 错误 | 符合 |
约束4 | 符合 | 符合 | 符合 |
约束5 | 符合 | 符合 | 符合 |
约束4(错误) | 错误 | 错误 | 错误 |
约束5(遗漏) | 符合 | 符合 | 符合 |
总体的正确率为 15/21 = 71.42%;
程序2:
122_add_elements | 第一次 | 第二次 | 第三次 |
---|---|---|---|
约束1 | 符合 | 符合 | 错误 |
约束2 | 符合 | 符合 | 错误 |
约束3 | 符合 | 符合 | 错误 |
约束4 | 错误 | 符合 | 符合 |
约束5 | 遗漏 | 符合 | 符合 |
约束4(错误) | 错误 | 符合 | 错误 |
约束5(遗漏) | 遗漏 | 符合 | 错误 |
总体的正确率为 13/21 = 61.90%;
程序3:
123_get_odd_collatz | 第一次 | 第二次 | 第三次 |
---|---|---|---|
约束1 | 符合 | 符合 | 符合 |
约束2 | 错误 | 符合 | 符合 |
约束3 | 符合 | 符合 | 符合 |
约束4 | 错误 | 符合 | 符合 |
约束5 | 符合 | 符合 | 符合 |
约束4(错误) | 错误 | 错误 | 错误 |
约束5(遗漏) | 符合 | 符合 | 符合 |
总体的正确率为 16/21 = 76.19%;
程序4:
124_valid_date | 第一次 | 第二次 | 第三次 |
---|---|---|---|
约束1 | 符合 | 符合 | 遗漏 |
约束2 | 符合 | 符合 | 遗漏 |
约束3 | 符合 | 符合 | 符合 |
约束4 | 错误 | 符合 | 符合 |
约束5 | 错误 | 符合 | 符合 |
约束4(错误) | 错误 | 错误 | 错误 |
约束5(遗漏) | 错误 | 遗漏 | 遗漏 |
总体的正确率为 16/21 = 76.19%;
程序5:
125_split_words | 第一次 | 第二次 | 第三次 |
---|---|---|---|
约束1 | 符合 | 符合 | 错误 |
约束2 | 符合 | 符合 | 错误 |
约束3 | 符合 | 符合 | 符合 |
约束4 | 符合 | 符合 | 符合 |
约束5 | 符合 | 符合 | 符合 |
约束4(错误) | 符合 | 错误 | 符合 |
约束5(遗漏) | 符合 | 符合 | 遗漏 |
总体的正确率为 15/21 = 71.42%;
以下是与大模型对话的部分截图: