SafeAgent-KR — 공개 산출물 (KoTIP-Bench + 온디바이스 레일 head)
도구 채널을 보는 한국어 AI 에이전트 안전 런타임. 핵심 논지: 강제(enforcement)는 결정적 per-tool 정책 게이트(Tier A)에 두고, 분류기는 log-only 텔레메트리로 강등해 "어디서 뚫리는지"(언어·난독화·도구채널)를 측정한다.
- 런타임·평가 코드: https://github.com/seok-hee97/nipa-google-project
- NIPA-Google 과제 · 개인(솔로) 프로젝트
이 저장소는 재배포가 안전한 산출물만 담습니다. 학습형 인코더 파인튜닝
가중치(R6 PII NER, R7 유해)는 베이스 모델(klue/roberta-*)의 라이선스 미명시로
공개 재배포에서 의도적으로 제외했습니다(수치는 GitHub 결과보고서 참조).
포함 산출물
1) KoTIP-Bench — 한국어 도구채널 인젝션 평가셋 (data/)
자체 구축. 5 style × 6 obfuscation × 2 scenario 공격 + 정상(benign) 태스크. 간접 프롬프트 인젝션을 사용자 발화가 아니라 도구 반환값에 심어, 단일 발화 가드레일이 구조적으로 못 보는 채널을 측정한다.
| 파일 | 내용 | 출처/라이선스 |
|---|---|---|
data/attacks.{test,dev,smoke}.jsonl |
도구채널 인젝션 공격 케이스 | 자체 구축 (CC-BY-4.0) |
data/utility.{test,dev,smoke}.jsonl |
정상 태스크(과차단 분모, BPR) | 자체 구축 (CC-BY-4.0) |
data/nemotron_rail.{train,dev,test}.jsonl |
인젝션 레일 학습/평가용 텍스트·라벨 | 파생 — 아래 출처 표기 |
출처 표기(CC-BY-4.0):
nemotron_rail.*는nvidia/Nemotron-RL-Agentic-Indirect-Prompt-Injection-v1(CC-BY-4.0) 를 episode → (text, label) 로 투영한 파생물이다.domaingrouped split(누수 방지).
2) 온디바이스 인젝션 레일 head (models/)
인코더는 동결하고 얇은 선형 head 만 학습한 CPU 레일. log-only 텔레메트리로 쓰이며, 절대 Tier A 게이트의 판정을 무효화하지 않는다(강제 아님).
| 파일 | 구성 | 학습 데이터 | 실측 | 라이선스 |
|---|---|---|---|---|
models/e5-lr-head.joblib |
intfloat/multilingual-e5-small(동결, MIT) + sklearn LR |
Nemotron(영어) | EN F1 0.954 / KO F1 0.0 | head 자체 산출 |
models/ko-agentguard-lr.joblib |
TF-IDF(char_wb 3-5 + word 1-2) + sklearn LR | Nemotron(영어) | in-domain F1 0.994 → base64 0.0 | 자체 산출 |
두 head 모두 교차언어/난독화에서 붕괴한다 — 이것이 결함이 아니라 논지다: 분류기는(온디바이스여도) 텍스트를 읽으므로 언어·난독화에 취약하고, 강제는 구조로 판정하는 게이트에 있어야 한다.
사용법 (레일 head)
import joblib
# e5 + LR (교차언어 head) — src/rails/e5_lr.py 의 E5LRRail 와 함께 사용
# 모든 입력에 "query: " 접두 → e5-small 임베딩(mean-pool, L2정규화, 384d) → 이 LR
lr = joblib.load("models/e5-lr-head.joblib")
# TF-IDF + LR (CPU baseline) — src/rails/ko_agentguard.py 의 KoAgentGuardRail
rail = joblib.load("models/ko-agentguard-lr.joblib")
# score(text) -> P(injection) ∈ [0,1]; 임계 0.5. LOG-ONLY.
전체 런타임(4-seam 루프, Tier A 게이트, DLP 볼트)과 재현 스크립트는 GitHub 저장소에.
헤드라인 결과 (재현 근거는 GitHub results/)
- 결정적 게이트(genuine): 도구채널 인젝션 실행률 t-ASR 0.17 → 0.00 (McNemar p=0.002).
- 분류기 강제(theater): 교차언어로 눈먼 CPU 레일은 무방어와 통계적으로 무구분(p=1.0).
- 채널 맹점(GPU 실측): 한국어 인젝션 SOTA(Kanana)가 발화 recall 1.0 → 도구채널 0.0.
- 난독화 붕괴: 강한 CPU 탐지기 F1 0.99 → base64 0.0. 게이트는 원본=난독화 불변.
라이선스 · 출처
- 이 저장소 산출물: CC-BY-4.0 (자체 구축분) — 자유 사용, 출처 표기.
- 파생 데이터
nemotron_rail.*:nvidia/Nemotron-RL-Agentic-Indirect-Prompt-Injection-v1(CC-BY-4.0) 파생. e5-small인코더: MIT (동결, 재학습 없음 — 여기엔 head LR 만 포함).
의도적 제외 (공개 재배포 부적합)
- R6 PII NER(
klue/roberta-small파인튜닝, span F1 0.985), R7 유해(klue/roberta-base, Macro-F1 0.709):klue/roberta-*라이선스 미명시 → 파생 가중치 공개 재배포 제외. 성능 수치만 GitHub 결과보고서에 보고.
인용
@misc{safeagent-kr-2026,
title = {SafeAgent-KR: A Korean Tool-Using Agent Safety Runtime with Deterministic Per-Tool Gating},
author = {SafeAgent-KR (NIPA-Google, solo project)},
year = {2026},
url = {https://github.com/seok-hee97/nipa-google-project}
}