SafeAgent-KR — 공개 산출물 (KoTIP-Bench + 온디바이스 레일 head)

도구 채널을 보는 한국어 AI 에이전트 안전 런타임. 핵심 논지: 강제(enforcement)는 결정적 per-tool 정책 게이트(Tier A)에 두고, 분류기는 log-only 텔레메트리로 강등해 "어디서 뚫리는지"(언어·난독화·도구채널)를 측정한다.

이 저장소는 재배포가 안전한 산출물만 담습니다. 학습형 인코더 파인튜닝 가중치(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) 로 투영한 파생물이다. domain grouped 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}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support