문서

코드에 있어야 하는 것

게이팅 페이지는 임계값을 코드가 가져야 한다고 주장했습니다. 이 페이지는 한 단계 더 나아갑니다. 어떤 검사는 모델에 물어보지도 말아야 합니다.

공개된 가장 강한 경계 선언

가장 강한 선은 에이전트 루프 구현 하나에서 나옵니다.

위험 점수가 높은 도구 호출은 사람의 승인을 강제하며, 어떤 확률도 그것을 뒤집을 수 없습니다.

“어떤 확률도 그것을 뒤집을 수 없다”는 문장은 따로 떼어낼 가치가 있습니다. “신뢰도가 아주 높아야 한다”고 말하지 않습니다. 이 규칙은 확률 공간에 있지 않다고 말합니다. 이 구분이 중요합니다.

  • “0.95 이상이면 자동 승인”은 임계값 규칙입니다. 원칙적으로 충분히 높은 확률이면 통과합니다.
  • “고위험이면 사람의 승인이 필요하다”는 구조적 규칙입니다. 모델이 무엇을 말하든 참입니다.

둘은 똑같이 믿을 만하지 않습니다. 당신의 시스템은 어떤 검사가 어느 쪽인지 분명히 해야 하고, 구조적 규칙은 가능한 한 많이 있어야 합니다.

결정론적 규칙을 먼저 돌리고, 모델에는 회색 영역만 맡긴다

같은 패턴의 다른 표현입니다.

결정론적 규칙을 먼저 돌립니다. 결정할 수 있는 것은 즉시 차단하거나 허용하고, 모델은 선택적인 백엔드일 뿐입니다. 일상적인 명령은 로컬에서 결정되고 모델에 아예 전송되지 않습니다.

규칙을 먼저 돌리는 데는 저평가된 이점이 있습니다. 공격 표면을 줄입니다. 순전히 모델에 의존하는 판정자는 프롬프트 주입 아래에서 예측 불가능하게 행동합니다. 규칙을 먼저 돌리는 판정자는 주입을 규칙이 결정하지 못하는 작은 조각에 가둡니다.

공개된 주입 테스트 하나는 주입 시도 300건을 보고하면서 게이트가 무엇을 잡았고 무엇이 빠져나갔는지 분명히 밝힙니다. “주입 방어”라는 맨 주장보다 훨씬 유용합니다.

비밀과 민감 데이터: 로컬에서 먼저 차단

비밀 탐지기 하나는 순서를 명확히 제시합니다.

경우 처리
알려진 비밀 형식 로컬에서 차단, 모델에 전혀 전송하지 않음
알 수 없는 고엔트로피 문자열 먼저 마스킹, 그다음 마스킹된 텍스트를 모델로 전송
모델이 ≥ 0.80이라고 말함 차단
모델이 ≥ 0.30이라고 말함 사람에게 문의
모델 사용 불가 그래도 사람에게 문의

기억할 두 가지 결정입니다.

  • 마스킹이 먼저입니다. 그것이 비밀인지 알아내려고 외부 서비스로 무언가를 보낼 수는 없습니다. 검사 자체가 유출입니다.
  • 모델이 죽어도 허용이 아니라 사람에게 문의합니다. 이것이 구체적인 형태의 fail-closed입니다 — 서비스 불가가 보안 기준을 조용히 낮출 이유는 아닙니다.

측정값: 비밀 6/6 차단, 정상 입력 0/6 오차단.

예산 상한, 서명된 영수증, 감사

어떤 검사는 모델이 말하는 것과 무관하지만 같은 시스템에 있어야 합니다.

  • 런타임 하나는 위험 명령 차단과 예산 상한을 결정론적 코드에 맡기고, 모든 판정을 Ed25519 서명 영수증 체인에 기록합니다.
  • 또 하나는 위험 점수를 코드가 통제하는 0–100 척도에 가두고, 모든 판정을 ES256으로 서명합니다(호출 540건, 임계값 65–75에서 99.76%, 오탐 0).

서명의 목적은 모델로부터 보호하는 것이 아니라 나중에 무슨 일이 있었는지 알 수 있게 하는 것입니다. 자동 판단이 사고를 일으켰을 때, “모델이 무엇을 말했고 코드가 그것에 대해 무엇을 했는지”는 로그를 신뢰하는 문제가 아니라 독립적으로 검증 가능해야 합니다.

주입을 두 곳에서 거른다

가드 계층 하나의 설계는 놓치기 쉬운 두 지점을 짚기 때문에 따로 언급할 가치가 있습니다.

도구 호출이 실행되기 전에 한 번 거르고, 도구 결과가 에이전트에 읽히기 전에 다시 거릅니다.

둘째를 사람들이 잊습니다. 입력만 거르면 공격은 도구가 돌려주는 것 — 가져온 페이지, 파일 내용 — 에 숨을 수 있고, 그것은 입력 쪽 검사를 완전히 우회한 채 컨텍스트로 들어옵니다.

검색 증강 구현에서 나온 관련 규칙 하나: 인용한 출처에 없는 수치는 출력하지 마십시오.

샌드박싱과 권한

콘텐츠를 거르는 것 외에 다른 층은 피해 범위를 제한하는 것입니다. 보호된 경로는 항상 사람의 확인을 거치고, 에이전트 실행은 격리된 워크스페이스에서 돌아가며(한 구현은 Docker를 씁니다), 하위 에이전트의 권한은 상위와 분리됩니다.

참조 표

검사 종류 오류 시 어느 쪽으로 기우는가
알려진 비밀 형식 결정론적 규칙 차단
고위험 작업 승인 구조적 규칙 거부(사람이 승인해야 함)
읽기 전용 명령 자동 승인 임계값 규칙 프롬프트로 폴백
도구 출력 내부의 주입 결정론적 필터 + 모델 차단
“에이전트가 끝났는가?” 효율 게이트 허용(fail-open)
형식·스타일 검사 효율 게이트 허용

가운데 열이 핵심입니다. 위에 가까울수록 모델이 개입할 여지가 적어야 합니다.

한 문장으로

확률로 뒤집힐 수 있는 검사는 결국 뒤집힙니다. 어떤 검사가 뒤집히면 안 되는지부터 정하고, 그다음에야 임계값을 조정하십시오.