用于在 ASAC benchmark 上自动测评大模型解决算法竞赛题目的能力。 目前使用 ChatGPT 的 API。
具体流程是将 prompt 和英文题面组合作为大模型的输入,要求大模型输出一个求解该问题的 C++ 程序,然后在本地编译程序,并运行 ASAC benchmark 中包含的所有测试,最后计算大模型生成的程序能通过多少测试点。
main.py
: 用于运行的脚本
main_multi.py
: 用于运行的脚本,区别是同一个 benchmark 可以向 LLM 反复询问并找到最优的结果
config.py
: 运行相关变量,例如大模型的 API key 等
util.py
: 测试中用到的函数
cache.py
: 用于操作缓存的函数
run_test.py
: 用于运行测试数据
statistic.py
: 用于统计结果
delete_mzn_annotation.py
: 用于删除 MiniZinc 文件中的注释
delete_non_cpp_file.py
: 用于删除文件夹中除了 cpp 以外文件,主要用于删除 result 文件夹中的可执行文件
print_to_csv.py
: 将 json 格式的测试结果输出为 csv 格式,便于后续统计和分析
output.csv
: 输出的 csv 格式的测试结果
ASAC_without_annotation
: 将 ASAC 中 MiniZinc 格式的输入删除了注释之后的结果
result/
: 测试过程中大模型生成的程序,以及从程序中编译得到的可执行文件
cache/*.json
: 测试结果的缓存
result_backup
: 测试结果的备份
result.md
: 测试结果的汇总
需要提前下载 ASAC benchmark: https://github.com/AuQWQuA/ASAC
需要安装 ChatGPT API 的库:
$ pip install openai
result
文件夹中若包含之前生成的结果,需要提前清空,避免之前测试的结果影响本次测试。
config.py
中必须补全的内容:
*_base_url
: 大模型的 base URL*_api_key
: 大模型的 API key*_model
: 所选择的 modelroot_path
: 本项目所在文件夹的路径
main.py
中必须修改的内容:
cache_path
: 存储当前实验结果的文件路径- 实验使用的模型对应的变量:例如目前使用 DeepSeek 的 API,在
main.py
中就会使用deepseek_base_url
,deepseek_api_key
,deepseek_model
这三个变量。如果需要切换到其他大模型的 API,可以在main.py
改为使用其他大模型对应的上述三个变量。
main.py
中可以修改的设置:
compile_timeout
: 编译的时长上限,单位为秒test_timeout
: 运行测试的时长上限,单位为秒prompt
: 大模型输入中开头的 prompt。大模型输入的具体构成形式: prompt + problem descriptionbenchmark_file_name
: 大模型输入中 problem description 对应的文件名。例如在 ASAC 中可能是task_e.md
或task_e.mzn
等。
$ python3 main.py
result
文件夹中存放大模型生成的 C++ 程序,以及编译得到的可执行文件
每道题目测试结束后输出的数据:
test_num
: 该题目包含多少个测试点correct_num
: 大模型生成的程序通过了多少个测试点
测试全部结束后输出的数据:
test_num_sum
: 用于测试的题目一共包含多少个测试点correct_num_sum
: 大模型生成的程序一共通过了多少个测试点pass_all_test_num
: 大模型生成的程序中有多少能通过对应的所有测试点