关于 Utah Salt Lab
Utah Salt Lab(README 中名为 Rethink_Sec_Code_Eval)是用于测试 SecCodePLT 生成代码的单元测试流程,面向安全代码生成评估,并建议在容器中运行。
主要功能
- 01生成代码的单元测试
- 02预处理并分发测试代码
- 03在容器中运行测试
- 04导出评估结果
适用场景
- 01评估生成的 SecCodePLT 解答
- 02测试受支持任务的提交代码
- 03隔离运行涉及安全操作的测试
- 04汇总单元测试结果
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Rethink_Sec_Code_Eval
对 SecCodePLT 生成的代码进行单元测试。
论文链接:https://arxiv.org/pdf/2503.15554?
目录结构
Rethink_Sec_Code_Eval
│ README.md
│ requirements.txt
| Dockerfile
│ ...
└───utils
│ │ SecPLT_func_name.json
│
│
│
└───Data
│ results/
│ summary/
│ └───unittest
| └───000f5e47
│ │ setup.py
│ │ test_case.py
│
安装
⚠️ 由于代码可能包含 rm -rf 等安全相关操作,强烈建议在容器环境中运行测试。我们提供了用于构建容器的 Dockerfile。下面以使用 CharlieCloud 在容器中运行单元测试为例。你也可以使用 Docker 命令,因为我们提供了用于构建容器的 Dockerfile。
CharlieCloud 的默认镜像目录为 /tmp,可能会导致存储空间不足。为避免此问题,可以将目录设置为其他位置。
CH_IMAGE_STORAGE=/path/to/a/desired/place
如果使用 Charliecloud 时遇到问题,可以在这里找到一些解决方案:https://hpc.github.io/charliecloud/faq.html
- 构建容器
ch-image build -t test-runner -f Dockerfile .
- 安装软件包
pip install -r requirements.txt
代码生成
要生成代码,可以从原始的 SecCodePLT Hugging Face Space 下载指令提示词:https://huggingface.co/datasets/Virtue-AI-HUB/SecCodePLT。
⚠️ 请注意,原始 SecCodePLT 包含 1,345 个任务。不过,在生成单元测试并筛除存在问题的样本后,我们最终为 1,201 个样本生成了单元测试。因此,我们仅支持对这 1,201 个任务进行单元测试。受支持的任务 ID 可在 utils/SecPLT_func_name.json 中找到。
要运行单元测试,需要将生成的代码存储在 .jsonl 文件中,并遵循以下格式:
{"task_id": <id of the SecCodePLT sample>, "solution": <Generated Code>}
# Example:
{"task_id": "134f1a9c", "solution": def derive_hash(algorithm_name: str, input_data: bytes) -> bytes:...}
注意:
请根据所用模型选择正确的提示词模板(例如 ChatGPT 风格、CodeLLaMA 风格、Qwen 风格)。不同模型可能需要略有不同的提示词格式(例如,是否包含明确的函数签名、文档字符串或问题描述)。使用错误的提示词格式可能导致解决方案无效或不完整,进而无法通过预处理或单元测试。
预处理
运行单元测试前,请先运行预处理脚本,将代码分发到各个单元测试文件夹中
python preprocess.py --model <Any name you want> --file_path <path to the jsonl file that store the code>
# Example
python preprocess.py --model qwen --file_path code.jsonl
运行单元测试
sh run.sh <the name you just put after the --model>
#Example
sh run.sh qwen
获取结果
python get_result.py data/answer.json data/results/<the name you put after run.sh>_SecPLT_results.json --output <path to store the result>
# Example
python get_result.py data/answer.json data/results/qwen_SecPLT_results.json --output eval_result/qwen_eval_result.json
引用
@article{dai2025comprehensive,
title={A Comprehensive Study of LLM Secure Code Generation},
author={Dai, Shih-Chieh and Xu, Jun and Tao, Guanhong},
journal={arXiv preprint arXiv:2503.15554},
year={2025}
}
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。