该存储库包含了题为“网络安全生成AI:从自然语言中生成进攻代码”的材料和脚本,由Naples Federico II,甜点小组的Pietro Liguori发行。演讲是Artisan 2024:关于人工智能在安全应用中的作用和影响的暑期学校的一部分。
确保系统上安装了Python。如果没有,您可以使用带有Anaconda的虚拟环境来避免直接在计算机上工作。请按照以下步骤操作:
wget命令下载安装程序: wget https://repo.anaconda.com/archive/Anaconda3-version-OS.shchmod +x Anaconda3-version-OS.shbash Anaconda3-version-OS.shbashrc文件: export PATH= " /path_to_anaconda/anaconda3/bin: $PATH "创建Python 3.9虚拟环境:
conda create -n yourenvname python=3.9yourenvname 。激活环境:
source activate yourenvname您现在准备安装依赖项并在虚拟环境中工作。
在Violent-Python-functions文件夹中,我们分别包含包含NL(自然语言)描述和相应python函数的.in和.out文件。
暴力python数据集是一个手动策划的数据集,其中样本包含进攻软件中的Python代码,其自然语言中的相应描述(普通英语)。我们使用TJ O'Connor的流行书《暴力python》构建了数据集,该书使用Python语言介绍了进攻性程序的几个示例。
我们仅包括功能级描述,总计72对NL描述 - Python函数。
安装依赖项:
pip install -r requirements.txt --user子集提取:
create_subset.py脚本,并使用以下命令: python create_subset.pyscripts/results文件夹,包含reference.in和reference.out文件。reference.in文件包含10个随机提取的NL描述。reference.out文件包含相应的10个python函数,并作为我们评估的基础真相。接下来,您将使用诸如Chatgpt或Claude十四行诗之类的生成AI模型生成10个输出。
警告
注意代码段的结构。如您所见,Python代码都是单线。实际上,多行指令与n相互分开。
生成输出:
reference.in中存储的NL描述,以使用AI模型生成10个输出。output.out的results文件夹中。示例提示:
Generate Python 10 functions starting from the following 10 natural language (NL) descriptions:
1. [NL description]
2. [NL description]
...
10. [NL description]
Each function should be generated in a single line, for a total of 10 lines.
Different instructions of the same function should be separated by the special character "n".
Do not use empty lines to separate functions.
计算输出相似性指标:
scripts文件夹中,运行python脚本output_similarity_metrics.py来计算模型预测( output.out )和地面真相参考( reference.out )之间的输出相似性指标: python output_similarity_metrics.py hypothesis_filehypothesis_file是results/output.out文件。该指标将在results/output_metrics.txt文件中生成。
scripts文件夹中,执行脚本boxplot_metrics.py以可视化保存在文件results/output_metrics.txt中的度量的可变性: python boxplot_metrics.py以下是显示输出相似性指标与BoxPlot的可变性:

results/output2.out文件中。output_similarity_metrics.py以计算模型预测( output2.out )和地面真相参考( reference.out )之间的输出相似性指标: python output_similarity_metrics.py results/output2.outcompare_models.py以显示两个指标的两个模型性能的比较 python compare_models.py以下是输出的示例:

在这一部分中,我们将使用AI模型重复代码生成过程,但是这次应用在谈话中讨论的及时工程技术。目的是观察该技术是否提高了生成的代码的质量。
应用及时工程:
reference.in中存储的相同的NL描述。提示的示例可以在scripts/prompt_examples文件夹中找到。
生成输出:
output_prompt_pattern.out的文件中,在scripts/results文件夹中,其中prompt_pattern是您要使用的标识符来指定所采用的模式(例如, output_persona.out , output_few_shot.out )。计算输出相似性指标:
scripts文件夹中,运行脚本以计算模型预测( output_prompt_pattern.out )和地面真相参考( reference.out )之间的输出相似性指标: python output_similarity_metrics.py hypothesis_file其中hypothesis_file是使用及时模式生成的文件(例如, results/output_few_shot.out文件)。
scripts/results/output_prompt_engineering_metrics.txt文件(例如, scripts/results/output_few_shot_metrics.txt文件)中生成。比较结果:
scripts文件夹中,执行脚本plot_metrics_comparison.py比较结果: python plot_metrics_comparison.py file_metricsfile_metrics是scripts/results/output_prompt_engineering_metrics.txt文件。下面是一张图像,显示了无需及时工程的产生的输出之间的指标比较,并且迅速工程很少:

请按照以下步骤应用及时的工程,并评估其对代码生成质量的影响。
在saved_outputs文件夹中,您会发现使用ChatGpt-4O生成的示例。这些示例说明了使用不同及时的工程技术的模型输出的外观。
该存储库和材料是由以下方式开发的: