該存儲庫包含了題為“網絡安全生成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生成的示例。這些示例說明了使用不同及時的工程技術的模型輸出的外觀。
該存儲庫和材料是由以下方式開發的: