
프롬프트를 넘어서: 시뮬레이션된 검열 흔적을 통한 함수 호출 LLM의 탈옥
이 저장소에는 다음 논문의 공식 구현이 포함되어 있습니다:
프롬프트 너머: 시뮬레이션된 검열 흔적을 통한 함수 호출 LLM 탈옥
이 저장소가 연구에 유용하다고 생각되시면 논문을 인용해 주시기 바랍니다. 질문, 버그 보고 및 재현성 문제는 GitHub Issues를 통해 환영합니다.

.
├── install.sh # Installation script for setting up the environment and dependencies
├── main.py # Main evaluation entry point
├── demo.ipynb # Minimal working example
├── requirements.txt # Python dependencies
├── data/
│ ├── SafeBench-Tiny.txt # Default benchmark
│ └── JailbreakBench.txt # Optional benchmark
├── figures/
│ ├── pipline.jpg # Framework overview
│ ├── main_res1.jpg # Main result figure
│ └── main_res2.jpg # Main result figure
├── utils/
│ ├── config.example.json # Example API configuration
│ ├── eval_h_cot.py # External evaluation utility
│ ├── fake_tool_call_noharmful.json
│ ├── moderation_generator.py
│ └── moderation_validator.py
└── output/ # Checkpoints and evaluation results
Python 환경을 자동으로 설정하고 필요한 모든 종속성을 설치하는 설치 스크립트를 제공합니다.
chmod +x install.sh
./install.sh
설치가 완료되면 가상 환경을 활성화합니다:
source .venv/bin/activate
또는 Conda를 사용하여 수동으로 환경을 생성할 수 있습니다:
conda create -n SMT python=3.12
conda activate SMT
pip install -r requirements.txt
예제 파일에서 utils/config.json을 생성합니다:
cp utils/config.example.json utils/config.json
최소 구성 파일은 다음 형식을 따라야 합니다:
{
"llm_api": {
"base_url": "https://your-api-endpoint/v1",
"api_key": "YOUR_API_KEY"
},
"local": {
"base_url": "http://localhost:1234/v1",
"api_key": "YOUR_LOCAL_API_KEY"
}
}
두 항목은 다음에 해당합니다:
llm_api: 상용 모델을 위한 기본 OpenAI 호환 API 엔드포인트입니다.local: 선택된 로컬 모델에 사용되는 로컬 OpenAI 호환 추론 엔드포인트입니다.main.py를 열고 파일 시작 부분 근처의 실험 구성을 수정하세요:
DATA_FILE = "SafeBench-Tiny.txt"
# DATA_FILE = "JailbreakBench.txt"
TARGET_MODELS = [
"gpt-4o-2024-11-20",
# "gpt-5.4-2026-03-05",
# "qwen3-max-2026-01-23",
# "gemini-3-flash-preview",
# "deepseek-v4-flash",
# "claude-sonnet-4-5-20250929",
]
API 엔드포인트에 유효한 모델 식별자를 사용하세요. 해당 엔드포인트는 utils/config.json에 구성되어 있습니다.
기본 매개변수는 main.py에 정의되어 있습니다:
MAX_THREADS = 1
MAX_ROUNDS = 3
TURNS_NUM = 3
RESET = False
각 항목의 의미는 다음과 같습니다:
| 매개변수 | 설명 |
|---|---|
MAX_THREADS | 대상 모델당 최대 동시 워커 수 |
MAX_ROUNDS | 최대 외부 재시도 라운드 수 |
TURNS_NUM | 샘플당 최대 멀티턴 상호작용 시도 횟수 |
RESET | 평가 전에 기존 체크포인트를 폐기할지 여부 |
설정:
RESET = True
선택한 모델에 대해 새 실행을 시작하려면 True로 설정합니다. 기존 체크포인트에서 재개하려면 False로 둡니다.
python main.py
각 대상 모델에 대해 스크립트는 자동으로 다음을 수행합니다:
data/에서 선택한 벤치마크를 로드합니다.결과는 다음 위치에 저장됩니다:
output/attack_checkpoint_<dataset>_<model>.json
예를 들어:
output/attack_checkpoint_SafeBench-Tiny_gpt-4o-2024-11-20.json
각 벤치마크 항목은 다음과 유사한 필드로 저장됩니다:
{
"target_question": {
"success": true,
"queries": 3,
"payload": "...",
"score": 60
}
}
스크립트는 다음 지표를 보고합니다:
| 지표 | 설명 |
|---|---|
| ASR | 공격 성공률: 점수가 설정된 임계값에 도달한 샘플의 비율 |
| Avg.Q | 샘플당 사용된 평균 API 쿼리 수 |
| Avg.Score | 모든 샘플에 걸친 평균 외부 평가 점수 |
주요 SMT 실험은 API 기반이며 로컬 GPU가 필요하지 않습니다.
MAX_ROUNDS = 3 및 TURNS_NUM = 3 설정에서 SMT는 조기 중단 전까지 벤치마크 샘플당 최대 9회의 대상 모델 쿼리를 사용합니다.로컬에 배포된 모델의 경우, 추가적인 GPU 및 메모리 요구 사항은 선택한 모델과 추론 백엔드에 따라 달라집니다.
상용 LLM API는 지속적으로 업데이트됩니다. 동일한 모델 별칭을 사용하더라도 제공업체 측의 모델 업데이트, 라우팅 동작, 안전 정책 변경, 디코딩 설정 또는 일시적인 API 장애로 인해 결과가 달라질 수 있습니다.
재현성을 향상시키려면:
이 저장소에 보고된 모든 실험은 2026년 6월에 수행되었습니다. 시뮬레이션된 검증 추적에는 무작위 요소가 포함되어 있고, 모델 출력은 본질적으로 확률적이며, 모델 기능과 외부 탐지 메커니즘 모두 계속 발전하고 있기 때문에, 동일한 상위 수준 구성에서도 정확한 상호작용 이력과 재현된 결과는 여기에 보고된 것과 다를 수 있습니다.


우리의 평가는 여러 상용 함수 호출 LLM과 두 가지 안전 벤치마크에 걸쳐 SMT를 대표적인 탈옥(jailbreak) 베이스라인과 비교합니다.
전체 실험 설정, 베이스라인 구현, 통계적 세부 사항 및 방어 분석은 논문을 참조하십시오.
이 프로젝트는 안전 정렬된 함수 호출 LLM 시스템의 실패 모드를 연구합니다. 코드와 관련 자료는 다음을 지원하기 위한 것입니다:
사용자는 적용 가능한 법률, 기관 검토 요건, API 제공업체 약관 및 책임 있는 공개 관행을 준수할 책임이 있습니다.
승인 없이 이 프레임워크를 프로덕션 시스템에 배포하는 것을 강력히 권장하지 않습니다. 연구자는 공개 저장소에 원시 유해 출력, API 자격 증명, 개인 식별 정보 또는 무제한 공격 아티팩트를 노출하지 않아야 합니다.
이 저장소가 유용하다고 생각되면 다음과 같이 인용해 주십시오:
@inproceedings{liu2027smt,
title={Beyond the Prompt: Jailbreaking Function-Calling LLMs via Simulated Moderation Traces},
author={Junlong Liu and Haobo Wang and Weiqi Luo and Xiaojun Jia},
booktitle={{IEEE} Symposium on Security and Privacy},
year={2027}
}