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 を使用する例を紹介します。コンテナを構築するための Dockerfile を用意していますので、Docker コマンドを使用することもできます。
CharlieCloud のデフォルトの img ディレクトリは /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 形式)。モデルによっては、関数シグネチャ、docstring、問題の説明を明示的に含めるなど、プロンプトの形式を多少変更する必要があります。誤ったプロンプト形式を使用すると、無効または不完全な解決策が生成され、前処理またはユニットテストに失敗する可能性があります。
前処理
ユニットテストを実行する前に、前処理スクリプトを実行して、コードを各ユニットテストフォルダーに振り分けてください。
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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。