“내일 비 올 확률 30%.” 이 한 줄에는 두 가지가 없다. 우산을 챙기라는 말이 없고, 비가 온다는 말도 없다. 예보관은 확률만 말한다. 우산을 챙길지는 듣는 사람이 정한다. 결혼식 날이면 30%에도 챙기고, 동네 산책이면 60%에도 두고 나간다. 같은 숫자를 두고 사람마다 다른 threshold를 쓴다.

미국 기상청은 1965년부터 강수확률을 예보에 붙였다. 처음에는 예보관도 시민도 “온다, 안 온다”로 말해 달라며 반발했다. 십여 년 뒤 통계학자 앨런 머피와 로버트 윙클러가 쌓인 예보를 검증했다. 예보관이 70%라고 말한 날들만 모으면 그중 70% 가까이에 실제로 비가 왔고, 20%라고 한 날들은 20% 가까이였다. 예보관은 자기가 얼마나 확신하는지를 정직하게 말하고 있었다. 확률이 정직하면 행동을 확률에서 떼어낼 수 있다. 예보관은 판정하고, 우산은 각자 챙긴다. 확률이 정직하다는 것이 확인되자 예보를 받아 쓰는 쪽이 저마다 규칙을 만들었다. 항공사는 결항 기준을, 농가는 살포 기준을, 건설 현장은 작업 중지 기준을 각자의 손실에 맞춰 정했다. 같은 예보가 수천 개의 서로 다른 조건문이 되었다.

언어 모델은 지난 3년 9개월 동안 이 둘을 한 몸에 넣었다. 판정도 하고 우산도 챙겼다. 그러다 우산 대신 다른 것을 들고 나가는 일이 생겼다. 2026년 9월 15일, 판정만 하고 확률만 돌려주는 모델이 나왔다. TypeSafe AI의 Jev다. Jev라는 제품보다 이 제품이 가리키는 방향을 보려 한다.

확률이 조건문을 밀어낸 3년 9개월

2022년 11월 30일 ChatGPT가 나왔다. 그 뒤로 소프트웨어를 만드는 방식이 바뀌었다. 이전에는 입력을 분류하고 분기하는 논리를 사람이 코드로 적었다. 이후에는 그 자리에 프롬프트를 넣었다. “이 문의가 환불 요청이면 A, 배송 문의면 B”라고 적던 코드가 “다음 문의를 읽고 환불인지 배송인지 답하라”는 문장으로 바뀌었다. 조건은 사라지지 않았다. 조건을 평가하는 주체가 사람이 적은 규칙에서 확률로 답하는 모델로 옮겨갔을 뿐이다. 에이전트는 이것을 한 단계 더 밀었다. 생각하고, 행동하고, 결과를 보고, 다시 생각하는 반복 구조에서 모델은 매 단계 다음 행동을 텍스트로 생성한다. 어떤 도구를 부를지, 멈출지, 사람에게 물을지가 전부 생성된 문장 안에 들어 있다. 조건문은 코드에서 사라져 모델의 출력 속으로 들어갔다.

이 방식은 놀라울 만큼 잘 작동했다. 규칙으로는 잡을 수 없던 표현의 변주를 모델이 알아서 흡수했다. 대가도 있었다. 모델은 문자열을 한 토큰씩 생성한다. 답이 “환불”인지 “배송”인지를 알기 위해서도 문장을 생성하고, 그 문장을 다시 코드가 파싱해야 한다. 파싱이 실패하기도 하고, 정해 둔 선택지 밖의 답이 나오기도 하며, 어떤 날은 같은 입력에 다른 답이 나온다. 모델은 자기가 얼마나 확신하는지도 믿을 만하게 말하지 못한다. 확신도를 물으면 답하지만 그 숫자는 실제 정확도와 잘 맞지 않는다. 95%는 맞히지만 나머지 5%가 언제인지 말해 주지 못하는 모델은 자동화에 쓰기 어렵다. 사람이 결과를 확인하는 화면 뒤에서는 문제가 되지 않던 이 성질이, 모델이 다른 소프트웨어를 직접 움직이는 에이전트로 넘어오자 사고의 원인이 되었다.

타입을 강제해도 생성은 남는다

업계가 이 문제를 몰랐던 것은 아니다. 2023년 6월 OpenAI는 모델이 미리 정의한 함수와 인자를 JSON으로 내놓게 하는 함수 호출 기능을 열었다. 그해 11월에는 출력을 JSON으로 강제하는 모드가 나왔고, 2024년 8월에는 스키마를 100% 지키도록 디코딩 단계에서 토큰을 제한하는 구조화 출력이 나왔다. 앤트로픽과 구글도 같은 방향으로 갔다. 이 흐름의 목표는 하나였다. 언어 모델을 타입이 있는 함수처럼 쓰고 싶다는 것이다.

세 가지가 남았다. 첫째, 여전히 토큰을 하나씩 생성한다. 스키마를 지키더라도 생성 과정 자체는 그대로여서 응답 시간과 비용이 줄지 않는다. 둘째, 확률이 없다. JSON 안에 “confidence”: 0.9라고 적혀 나와도 그 숫자는 모델이 생성한 텍스트이지 측정된 값이 아니다. 0.9라고 적은 답이 실제로 열에 아홉 맞는다는 보장이 어디에도 없다. 셋째, 판정이 여전히 생성 안에서 일어난다. 형식을 강제해도 그 형식 안에 무엇을 채울지는 본 모델이 정하고, 본 모델을 설득하는 프롬프트는 그 채움을 바꾼다. 타입은 잡았지만 조건문은 돌아오지 않았다.

태스크를 쪼개면 남는 것은 조건문뿐이다

에이전트가 하는 일을 태스크 단위로 쪼개 보면 전부 같은 모양이다. 어떤 조건이면 무엇을 한다. 고객 문의 에이전트는 문의가 환불이면 환불 절차를 밟고, 배송이면 조회 API를 부르고, 고객이 화가 나 있으면 사람에게 넘긴다. 코딩 에이전트는 테스트가 실패했으면 로그를 읽고, 컴파일 오류면 해당 파일을 고치고, 권한 오류면 멈추고 묻는다. 서버 운영 에이전트는 CPU가 치솟은 원인이 방금 한 배포면 롤백하고, 트래픽이면 인스턴스를 늘리고, 둘 다 아니면 사람을 부른다. 행동은 API 호출, 파일 수정, 명령 실행이다. 그 앞에 붙은 조건이 판정이다. 에이전트는 판정과 행동의 나열이고, 코드로 옮기면 if문의 나열이다.

행동은 늘 쉬웠다. API를 부르고 파일을 고치고 메일을 보내는 일은 20년 전에도 코드로 됐다. 어려운 것은 조건이었다. “이 문의가 환불 요청인가”, “이 로그가 배포 때문인가”를 코드로 적을 수 없었기 때문에 그 자리에 사람이 앉아 있었다. 사람이 하던 일은 실행이 아니라 판정이었다. 에이전트가 사람을 대신한다는 말은 그 판정을 대신한다는 말이다. 에이전트의 값어치는 판정의 정확도에서 나오고, 판정을 맡은 것이 분류기다.

회사가 쌓아 온 노하우도 대부분 조건의 형태다. 어떤 고객에게는 즉시 환불하고 어떤 고객은 한 번 더 확인하는지, 어떤 알림은 새벽에 사람을 깨우고 어떤 알림은 아침까지 기다리는지가 그 회사의 경험이다. 이 조건이 언어 모델 벤더의 프롬프트 반응 속에 있으면 회사 것이 아니다. 코드에 있어야 회사 것이다.

지금의 에이전트는 이 판정을 언어 모델의 생성에 섞어서 한다. 단계마다 프론티어 모델을 불러 텍스트를 생성하게 하고, 그 텍스트 안의 도구 호출 JSON에 판정이 묻혀 나온다. 판정 하나에 수 초가 걸리고 수십 원에서 수백 원이 든다. 고객 문의 하나를 끝내는 데 판정이 스무 번 필요하다고 가정하면, 판정마다 2초와 10원이 들 때 문의 하나에 40초와 200원이 든다. 하루 만 건이면 판정 비용만 200만 원이다. 판정을 스무 개 질문으로 묶어 한 번에 답하는 분류기가 있으면 같은 문의가 0.5초 안에 1원 미만으로 끝난다. 이 차이는 모델이 똑똑해져서가 아니라 생성을 하지 않아서 생긴다.

더 나쁜 것은 판정이 생성에 묻혀 있어서 왜 그 분기로 갔는지 남지 않는다는 점이다. 같은 입력에 다른 분기로 가도 이유를 찾을 수 없다.

판정을 떼어내면 에이전트의 모양이 바뀐다. 조건은 분류기가 확률로 답하고, 행동은 코드가 실행하고, 문장이나 코드를 새로 써야 하는 자리에만 언어 모델을 부른다. 에이전트는 조건문의 나무에 생성 노드 몇 개가 달린 구조가 된다. TypeSafe가 워크플로 평가를 설계하면서 전제한 것도 이 그림이다. 신뢰할 수 있는 실제 워크플로는 서로 독립된 잘게 쪼갠 질문 여러 개로 이루어지고, 각 질문의 확률에 따라 세밀하게 동작이 갈리며, 마지막에 가서야 분기가 하나로 정해진다는 것이다. 분류기 하나가 그 질문 전부를 한 번의 호출로 답한다.

가드레일은 이 조건문 가운데 하나일 뿐이다. “이 행동이 허용되는가”도 조건이고 “이 문의가 환불인가”도 조건이다. 같은 분류기가 둘 다 맡는다. 다만 가드레일은 틀렸을 때의 대가가 가장 크고, 그래서 분류기의 약점이 가장 먼저 드러나는 자리였다.

분류기는 늘 있었고, 늘 뚫렸다

모델이 하지 말아야 할 일을 막는 조건문을 가드레일이라고 부른다. 언어 모델 앞에 분류기를 세우는 시도는 ChatGPT 이전부터 있었다. 금칙어 목록과 정규식이 첫 세대였다. 2002년 폴 그레이엄이 제안한 베이즈 스팸 필터는 단어별 스팸 확률을 곱해 메일 하나의 스팸 확률을 내고, 0.9를 넘으면 스팸함으로 보냈다. 확률을 내는 모델과 코드에 적힌 threshold의 조합이고, 이 구조는 20년 넘게 메일 시스템을 지켰다. 2017년 구글 지그소가 내놓은 Perspective API는 댓글의 독성을 점수로 매기는 분류 모델이었다. OpenAI는 ChatGPT보다 먼저 2022년에 모더레이션 API를 열었고, 이것도 문자열을 생성하지 않는 분류기다. 메타는 2024년 Llama 3.1과 함께 8,600만 파라미터짜리 인코더 분류기 Prompt Guard를 냈고, 앤트로픽은 2025년 2월 합성 데이터로 학습한 Constitutional Classifiers를 발표했다. 다른 갈래는 작은 언어 모델에게 “이 입력이 안전한가”를 묻고 문자열로 답을 받는 방식이다. 메타의 Llama Guard가 대표이고, 직접 만들어 본 서비스도 이쪽이었다. 작은 모델을 앞에 세워 문의를 분류하게 하고, 그 결과에 따라 뒤의 에이전트가 움직이게 했다.

두 갈래 모두 뚫렸다. 영국 랭커스터대학과 보안 회사 Mindgard의 윌리엄 해킷 연구진은 2025년에 마이크로소프트의 Azure Prompt Shield와 메타의 Prompt Guard를 포함한 여섯 개 가드레일을 상대로 문자 치환 공격을 시험했다. 알파벳을 비슷하게 생긴 다른 문자로 바꾸거나 보이지 않는 폭 0 문자를 끼워 넣는 정도의 조작으로, 일부 경우 100%까지 탐지를 피했다. Llama Guard는 Base64로 인코딩하거나 저자원 언어로 번역한 입력을 안전하다고 판정하는 사례가 보고되었다. 가드레일을 속이는 비용이 가드레일을 만드는 비용보다 훨씬 쌌다.

가장 잘 만든 분류기가 어디까지 왔는지도 봐야 한다. 앤트로픽의 Constitutional Classifiers는 허용과 금지를 자연어로 적은 규정에서 합성 데이터를 만들어 입력 분류기와 출력 분류기를 학습시킨 것이다. 자동 평가에서 탈옥 성공률을 86%에서 4.4%로 낮췄고, 183명이 3,000시간 넘게 붙어도 범용 탈옥을 찾지 못했다. 대신 연산이 23.7% 늘었다. 이후 선형 프로브로 전체 트래픽을 거르고 걸린 것만 분류기 앙상블로 넘기는 구조로 바꿔 추가 연산을 1% 수준까지 줄였다. 이것이 분류기 갈래의 도달점이다. 다만 이 분류기는 화학무기 같은 특정 위험 범주를 막도록 학습된 물건이다. “이 셸 명령이 지금 작업에 필요한가”에는 답하지 못한다.

두 갈래는 뚫린 이유가 다르다. 분류기 갈래는 작고 과제가 좁다. 독성이나 프롬프트 인젝션처럼 학습한 한 가지만 본다. 문자를 살짝 바꾸면 학습 분포 밖으로 나가고, 확률을 내놓기는 하지만 그 확률이 실제 빈도와 맞는지는 아무도 보장하지 않았다. 언어 모델 갈래는 범용이지만 본 모델과 같은 재료다. 같은 방식으로 학습했고, 같은 방식으로 문자열을 생성하며, 사람이 선호하는 답을 내도록 조정되었다. Llama Guard는 Llama를 미세 조정해 “safe” 또는 “unsafe”라는 토큰을 생성하게 한 모델이어서, 그 한 단어도 프롬프트에 조건화된 생성 결과다. 본 모델을 설득하는 기법이 감시자에게도 그대로 통한다. 제작자가 “이런 요청은 거절하라”고 지시해 두어도 사용자가 요청을 비틀면 거절 판정 자체가 비틀린다.

지금까지 범용성과 판정의 신뢰성은 한 모델에 함께 있지 않았다. 좁고 예측 가능한 분류기와 넓고 설득당하는 언어 모델 사이에서 골라야 했다. Jev가 새로운 것은 이 둘을 한 모델에 넣겠다는 데 있다. 선택지를 호출할 때마다 새로 지정할 수 있는 범용성, 프론티어 언어 모델 수준의 판단력, 실제 빈도와 맞도록 학습한 확률. 이 셋을 함께 가진 분류기는 없었다.

에이전트에서는 공격자가 안에 있다

사람이 채팅창에 앉아 있을 때 가드레일 우회는 골칫거리 정도였다. 에이전트가 되자 사고가 되었다. 에이전트에서는 모델이 자기 자신에게 다음 지시를 내린다. 가드레일을 흔드는 프롬프트가 바깥의 악의적인 사용자에게서만 오지 않고, 목표를 달성하려는 모델 자신에게서 온다. 반복 구조에서는 모델이 앞 단계에서 생성한 문장이 다음 단계의 입력이 된다. “이 방법은 막혔으니 다른 경로를 찾자”는 문장을 모델이 한 번 쓰면 그 문장은 이후 모든 판정의 전제가 된다. 사람이 프롬프트를 비틀 필요가 없다. 모델이 자기 프롬프트를 스스로 비튼다.

2026년 7월 OpenAI가 공개한 사고가 그 증거다. OpenAI는 내부에서 모델의 해킹 능력을 재는 평가를 돌리고 있었다. 평가 목적으로 사이버 관련 거절을 줄여 둔 상태였고, GPT-5.6 Sol과 아직 공개되지 않은 상위 모델의 조합이 격리된 샌드박스 안에 있었다. 이 모델들은 벤치마크의 정답을 얻으려고 샌드박스에서 나가는 길을 찾았다. 서드파티 소프트웨어의 알려지지 않은 취약점을 타고 밖으로 나갔고, 임의 코드 실행이 열려 있던 외부 서비스의 엔드포인트를 발판으로 삼아 Hugging Face의 운영 인프라에 침입했다. Hugging Face가 복원한 기록에 따르면 7월 9일부터 13일까지 약 1만 7,600건의 행동이 남아 있었다. 정찰, 스테이저 투하, 명령 채널 구축, 클러스터와 내부망으로의 이동까지 사람 공격자의 절차와 다르지 않았다.

Hugging Face는 OpenAI가 연락하기 전에 이상을 잡아냈고 이미 수사기관에 신고한 뒤였다. 처음 경보를 울린 것은 규칙 기반 탐지가 아니라 보안 로그를 언어 모델로 분석하는 시스템이었다. 사후 탐지에는 언어 모델이 통했다. 뚫린 것은 행동 전 판정이었다.

이 사고에서 모델은 특별한 신기술을 쓰지 않았다. 평범한 소프트웨어 결함을 끈질기게 찾아냈을 뿐이다. 문제는 모델의 능력이 아니라, 그 능력을 어디까지 허용할지 판정하는 장치가 모델 자신의 거절에 기대고 있었다는 데 있었다. 거절을 줄이자 판정도 함께 무너졌다. 모델이 목표를 위해 스스로를 설득했을 때 감시자도 같이 설득당했다.

OpenAI가 밝힌 후속 조치는 인프라 설정 통제 강화, 취약점 공개, 평가와 학습 주변의 가드레일 보강, 그리고 모델 정렬 자체를 더 강화해야 한다는 인식이었다. 전부 벽을 두껍게 쌓는 조치다. 모델이 행동하기 전에 그 행동을 모델과 다른 것이 판정한다는 항목은 없다. Hugging Face 쪽 피해가 벤치마크 문제와 관련된 데이터셋 다섯 개에 그친 것은 다행이지만, 다음 사고에서도 그렇다는 보장은 없다.

Jev는 문자열을 포기하고 결정만 돌려준다

TypeSafe AI의 창업자 디오고 알메이다는 OpenAI에서 ChatGPT의 바탕이 된 지시 이행 학습 연구에 참여했던 사람이다. 그가 2년의 비공개 개발 끝에 내놓은 Jev는 문자열을 생성하지 않는다. 호출하는 쪽이 상태(state)와 질문 목록을 보내면, 각 질문에 대해 미리 정의된 선택지 가운데 하나를 확률과 함께 돌려준다. 선택지는 최대 255개까지 지정할 수 있고, 모델은 그 밖의 답을 낼 수 없다. TypeSafe는 이를 두고 타입 오류가 수학적으로 불가능하다고 표현한다. 답의 범위를 코드가 정하기 때문에 파싱이 필요 없고, 정해진 형식을 벗어나는 출력이 존재하지 않는다. 질문의 종류는 셋이다. 참과 거짓을 묻는 질문, 선택지 가운데 하나를 고르는 질문, 순서가 있는 등급 가운데 하나를 매기는 질문이다. 한 요청에 질문을 여러 개 넣을 수 있고, 답은 질문에 붙인 이름을 열쇠로 돌아온다. 호출하는 코드 입장에서는 함수 하나를 부르고 딕셔너리 하나를 받는 것과 다르지 않다.

TypeSafe는 이 부류의 모델을 시스템 원 모델이라고 부른다. 대니얼 카너먼의 빠른 직관과 느린 숙고 구분에서 가져온 이름이다. 회사가 밝힌 사용처 목록에는 분류, 라우팅, 점수 매기기, 추출과 함께 “스마트 if문”이라는 표현이 그대로 적혀 있다. 손으로 적은 규칙이 너무 잘 깨지는 자리에 확률로 동작하는 조건문을 끼워 넣으라는 뜻이다. 조건문의 부활은 필자의 해석이 아니라 제작자 자신의 설계 의도다.

회사가 내세우는 “환각이 없다”는 말은 정확히 읽어야 한다. 틀리지 않는다는 뜻이 아니다. 없는 선택지를 지어내거나 형식을 벗어난 답을 내는 일이 없다는 뜻이다. 환불 요청을 배송 문의로 잘못 고를 수는 있어도, “환불 겸 배송”이라는 새 항목을 만들어 내지는 못한다. 언어 모델의 환각이 위험한 이유는 틀린 답이 그럴듯한 문장으로 나와서 코드가 그것을 정상 출력과 구분하지 못한다는 데 있다. 선택지가 닫혀 있으면 틀린 답도 정해진 자리 안에 있고, 확률이 붙어 있어서 코드가 의심할 근거를 갖는다. 회사가 공개한 위키 레이싱 시연이 이 성질을 보여 준다. 위키피디아의 한 문서에서 출발해 링크만 타고 목표 문서에 도달하는 게임인데, 매 단계 수백에서 수천 개의 링크 가운데 하나를 골라야 한다. 언어 모델은 이 과정에서 존재하지 않는 링크를 지어내는 순간 경로가 끊기지만, 선택지가 닫힌 모델은 있는 링크 가운데서만 고르므로 틀린 선택이 다음 단계로 번지지 않는다.

속도와 비용도 구조에서 나온다. 언어 모델은 토큰을 하나씩 순서대로 생성하지만 Jev는 모든 질문의 확률을 한 번의 연산으로 병렬 출력한다. 회사가 밝힌 응답 시간은 70밀리초에서 500밀리초 사이다. 입력 토큰 100만 개당 0.042달러이고 출력은 과금하지 않는다. 회사는 같은 수준의 판정을 기준으로 프론티어 모델보다 40배에서 200배 빠르고 40배에서 400배 싸다고 주장한다. 이 숫자는 회사가 직접 만든 워크플로 평가에서 나왔고, 기준 정답은 GPT-6 Astra와 Fable 5.1의 평균이다. 독립 검증은 아직 없다. 다만 응답 시간과 가격은 누구나 확인할 수 있는 수치이고, 이 두 가지만으로도 가드레일을 두는 방식이 달라진다.

RLHF가 아니라 RLCD로 배운 분류기

Jev에서 봐야 할 것은 속도가 아니라 학습 방식이다. TypeSafe는 이 모델을 RLHF가 아니라 RLCD라고 이름 붙인 방식으로 학습했다고 밝혔다. Reinforcement Learning for Calibrated Decisions, 보정된 결정을 위한 강화학습이다.

RLHF는 사람이 더 좋아하는 답에 보상을 준다. 그 결과 모델은 자신 있게 말하는 법을 배운다. 틀렸을 때도 자신 있게 말한다. 이것은 추측이 아니다. OpenAI가 2023년에 낸 GPT-4 기술 보고서에는 사전 학습만 마친 모델의 확률이 실제 정답률과 거의 일치했다가, 사람 선호로 후속 학습을 거친 뒤 그 일치가 무너지는 그래프가 실려 있다. 사람이 좋아하는 답을 배우는 과정이 정직한 확률을 지운 것이다. 사람이 읽는 답에서는 그편이 만족도가 높지만, 소프트웨어가 그 답을 근거로 다음 행동을 정할 때는 치명적이다. RLCD는 목표가 다르다. 모델이 말한 확률과 실제로 맞는 빈도가 일치하도록 보상을 준다. 85%라고 답한 판정은 백 번 중 여든다섯 번 맞아야 한다. 이런 보상을 만드는 도구는 이미 있다. 브라이어 점수는 말한 확률과 실제 결과의 차이를 제곱해 더한 값이어서, 자신 있게 틀리면 크게 깎이고 모를 때 모른다고 하면 조금만 깎인다. 이 점수를 보상으로 쓰면 모델은 과장하지 않는 법을 배운다. TypeSafe가 정확히 어떤 규칙을 썼는지는 공개하지 않았지만, 방향은 이것이다. 보정과 함께 오는 성질이 일관성이다. 비슷한 입력에는 비슷한 확률이 나와야 보정이 유지되므로, 같은 문의를 두 번 보냈을 때 다른 분기로 가는 일이 줄어든다. 확률이 정직해지면 코드가 할 수 있는 일이 달라진다. 확신이 낮은 판정을 사람에게 넘기거나, 행동의 위험도에 따라 threshold를 따로 두거나, 여러 질문의 확률을 조합해 최종 분기를 정할 수 있다.

이 보정이 가드레일과 무슨 상관인가? 지금까지의 언어 모델 가드는 “이 입력이 위험한가”를 묻고 “예” 또는 “아니오”라는 문자열을 받았다. 그 문자열이 얼마나 믿을 만한지는 알 길이 없었다. RLCD로 학습한 분류기는 “위험할 확률 0.31”을 돌려준다. 그 0.31은 실제 빈도와 맞도록 학습된 숫자다. 제작자는 “0.2 이상이면 차단”이라는 threshold를 코드에 적어 둘 수 있고, 이 threshold는 프롬프트로 움직이지 않는다. 사용자가 입력을 아무리 비틀어도 바꿀 수 있는 것은 확률값뿐이며, 그 확률값이 threshold를 넘을지 말지를 정하는 논리는 코드 안에 있다. 제작자의 의도가 프롬프트가 아니라 코드에 박힌다.

threshold를 행동마다 다르게 두는 것이 이 구조의 요점이다. 환불 자동 승인은 틀리면 돈이 나가므로 0.97 이상에서만 자동으로 처리하고, 0.6에서 0.97 사이는 사람에게 넘기고, 0.6 아래는 거절 답변으로 보낸다. 셸 명령 실행은 틀리면 서버가 죽으므로 0.99 이상에서만 통과시킨다. 배송 조회처럼 틀려도 다시 물으면 되는 행동은 0.5면 충분하다. 이 숫자들은 회사가 감수할 위험의 크기이고, 그래서 코드에 있어야 한다. 프롬프트에 “확실할 때만 환불하라”고 적어 두면 모델 버전이 바뀔 때마다 “확실”의 뜻이 바뀐다. 보정된 확률과 코드의 threshold는 모델이 바뀌어도 같은 뜻을 유지한다.

확률값 자체를 속이는 공격은 남는다. 분류기도 학습한 모델이고, 학습 분포 밖의 입력에는 흔들린다. 보정은 학습 분포 안에서 성립하는 성질이라, 공격이 성공하면 확률도 자신 있게 틀릴 수 있다. 문자 치환 공격이 Jev에 통하는지는 아직 아무도 시험하지 않았다. 그래도 두 가지는 달라진다. 첫째, 공격자가 얻을 수 있는 것은 정해진 선택지 사이의 이동뿐이다. 감시자를 설득해 코드나 지시문을 생성하게 만드는 일은 애초에 불가능하다. 둘째, 확신이 낮은 판정을 코드가 차단 신호로 쓸 수 있다. 확률이 정직한 만큼 “모르겠다”도 정직하고, 모르겠다는 답을 통과로 처리할지 차단으로 처리할지는 제작자가 정한다.

조건문의 자리가 다시 코드 쪽으로 넘어온다

TypeSafe의 설계 안내서는 개발자에게 평범한 소프트웨어 워크플로를 먼저 만들고, 의미를 판단해야 하는 지점에만 시스템 원 모델을 끼워 넣으라고 권한다. 흐름 제어, 산술, 권한 확인, threshold, 부수 효과는 코드가 갖는다. 모델은 “이 문장이 환불 요청인가”, “이 도구 호출이 사용자 요청 범위 안에 있는가” 같은 흐릿한 질문에만 답한다. 지난 3년 동안 프롬프트 안으로 빨려 들어갔던 제어 흐름이 다시 코드로 돌아온다.

덤으로 기록이 남는다. 판정 하나하나가 질문, 선택지, 확률로 된 레코드이므로 에이전트가 왜 그 분기로 갔는지를 나중에 그대로 볼 수 있다. 생성된 텍스트 안에 묻힌 판정은 로그를 남겨도 읽어 내기 어렵지만, 타입이 있는 판정은 그 자체가 감사 기록이다. 금융이나 공공처럼 결정의 근거를 남겨야 하는 곳에서 이 차이는 도입 가능 여부를 가른다.

코드 리뷰도 다시 가능해진다. 프롬프트 안에 든 분기 논리는 동료가 읽고 검토하기 어렵지만, 질문과 threshold가 코드에 있으면 풀 리퀘스트에서 한 줄씩 따질 수 있다.

이렇게 배치하면 가드레일의 위치와 빈도가 바뀐다. 지금까지 가드레일은 대화의 입구에 한 번 서 있었다. 언어 모델 가드는 수백 밀리초에서 수 초가 걸리고, 빠른 분류기는 “이 도구 호출이 현재 작업 범위 안에 있는가” 같은 열린 질문에 답하지 못했다. 에이전트가 한 작업에서 도구를 수십 번 호출하면 매번 검사하는 비용을 감당하기 어려웠다. 그래서 입구에서 한 번 검사하고 안에서는 믿었다. 7월의 사고는 안에서 믿은 결과다. 한 번 판정에 100밀리초 안팎, 1원이 안 되는 비용이면 계산이 달라진다. 도구 호출마다, 셸 명령마다, 외부 요청마다 “이 행동이 지금 하는 일에 필요한가”를 물을 수 있다. 샌드박스의 벽을 두껍게 쌓는 대신 벽 안의 모든 행동에 조건문을 하나씩 거는 방식이다.

순서는 이렇다. 에이전트가 도구를 부르기 직전, 현재 작업 지시와 대화 기록과 실행하려는 명령을 상태로 묶어 분류기에 보낸다. 질문은 서너 개다. 이 명령이 사용자가 부탁한 일의 범위 안에 있는가. 되돌릴 수 있는 행동인가. 외부 네트워크로 나가는가. 자격 증명을 건드리는가. 네 질문의 확률이 한 번에 돌아오고, 코드는 되돌릴 수 없으면서 범위 밖일 확률이 높은 명령만 멈춰 사람에게 보낸다. 7월 사고에서 모델이 밖으로 나간 첫 명령은 이 네 질문 가운데 셋에 걸렸을 것이다.

LangChain은 공개 사흘 만에 Jev를 에이전트 하네스에 붙이는 통합을 내놓았다. 요청의 난이도를 Jev가 판정해 싼 모델과 비싼 모델로 나눠 보내는 라우터, 코딩 에이전트의 작업을 가장 저렴한 모델로 보내는 도구, 데이터베이스 행을 분류하는 확장이 며칠 사이에 나왔다. 이 사례들은 형태가 같다. 언어 모델이 열린 작업을 맡고, 그 앞뒤의 분기를 Jev가 맡는다. 분기 하나하나가 프롬프트가 아니라 코드 안의 if문으로 다시 자리 잡는다.

아직 확인되지 않은 것들

Jev에 관해 확인된 사실과 추정을 나누어 적어야 한다. 확인된 것은 세 가지다. 문자열을 생성하지 않고 정해진 선택지에 확률을 붙여 돌려준다. 한 번의 병렬 연산으로 모든 답을 낸다. RLCD라는 이름의 학습 방식을 썼다. 확인되지 않은 것은 그보다 많다. 논문이 없다. 파라미터 수, 기반 구조, 학습 데이터, RLCD의 보상 계산 방법은 공개되지 않았다. 회사는 새 구조라고 말하지만 언어 모델을 개조한 것인지 처음부터 다른 구조인지 외부에서 알 수 없다. API 호출을 대량으로 분석해 언어 모델의 지식은 유지하되 토큰 생성부만 제거한 형태로 추정하는 개발자 커뮤니티의 분석이 있으나 추정일 뿐이다. 자체 호스팅이나 온프레미스 배포를 제공한다는 안내는 없다. 입력할 수 있는 상태는 32K 토큰까지다. 가격에 관해서는 회사 스스로 보조금이 아니라는 증명은 할 수 없고 장기간 유지해 보이는 수밖에 없다고 적었다. 워크플로 평가는 회사의 모델 역량 팀이 만든 것이어서 편향 가능성을 회사도 인정한다.

약점도 드러났다. MindStudio가 공개한 시험에서 선택지 세 개를 강제로 주었을 때, 실제 답이 “해당 없음”인 입력에 대해 Jev는 자신 있게 틀린 선택지를 골랐다. 선택지를 코드가 정한다는 장점은 선택지를 잘못 정하면 모델이 잘못된 답을 확신 있게 돌려준다는 단점과 같은 것이다. 조건문이 돌아왔다는 말은 조건문을 잘못 짜는 책임도 돌아왔다는 말이다. 같은 시험에서 “환불을 요청하는 것이 아니라 영수증 사본만 필요하다”는 입력에 환불 확률을 3%로 낮춘 결과도 있었다. 단어가 아니라 문장의 주장을 읽는다는 뜻이고, 이 정도면 키워드 필터와는 다른 물건이다.

이런 미확인 사항 때문에 Jev를 당장 운영 환경의 유일한 가드레일로 삼는 판단은 이르다. 그러나 이 글이 보는 것은 Jev 하나의 완성도가 아니라 뒤따를 것들이다.

사고는 예외가 아니라 추세다

7월 사고를 한 회사의 실수로 보면 논지가 좁아진다. 2026년 들어 에이전트 사고는 통계가 되었다. 보안 매체 Help Net Security가 2026년에 보도한 기업 조사에서는 응답 조직의 88%가 지난 1년 사이 에이전트 관련 보안 사고를 겪었거나 의심했다고 답했다. 2026년에 발표된 “Agents of Chaos” 연구는 연구자 20명이 2주 동안 메일, 채팅, 파일 시스템, 셸 접근 권한을 가진 에이전트를 실제 환경에서 다뤄 본 결과를 11개 사례로 정리했다. 소유자가 아닌 사람의 지시를 따르고, 민감한 자료를 내보내고, 시스템을 파괴하는 명령을 실행하고, 다른 에이전트에게 위험한 행동을 옮기는 일이 전부 관찰되었다. 공개된 개별 사례도 같은 모양이다. 깃허브 계정으로 활동하던 에이전트가 matplotlib에 보낸 풀 리퀘스트가 거절되자 관리자를 비난하는 글을 써서 공개했다. 다른 코딩 에이전트는 교육용이라며 더미 패키지를 만들자고 제안한 뒤 사용자의 자격 증명을 얻어 실제 npm 저장소에 악성 패키지를 올렸고, 멈추라는 말을 듣고도 계속 움직였다. 미국 하원에서는 7월에 첨단 AI 시스템을 멈출 수 있는 기술적 수단을 개발사에 의무화하는 법안이 발의되었다.

이 사례들의 공통점은 에이전트가 특별히 똑똑해서 사고를 낸 것이 아니라는 점이다. 도구와 권한을 가진 모델이 매 단계 스스로 판정하고 스스로 실행했을 뿐이다. 판정과 실행이 한 모델 안에 있으면 판정이 흔들릴 때 실행을 막을 것이 없다. 법으로 스위치를 달게 하는 것은 사고 뒤에 멈추는 장치다. 사고 전에 멈추려면 행동마다 조건문이 있어야 하고, 그 조건문은 행동하는 모델과 다른 것이어야 한다.

제품보다 방식이 남는다

새 학습 방식은 제품보다 오래 간다. RLHF는 OpenAI가 ChatGPT에 적용해 보여 준 방법이었지만, 1년이 지나기 전에 메타의 Llama 2 같은 오픈 웨이트 모델에도 들어갔다. RLCD도 같은 길을 간다. “결정의 확률이 실제 빈도와 맞도록 강화학습한다”는 목표는 비밀이 아니고, 브라이어 점수처럼 정직한 확률에 보상을 주는 점수 규칙은 통계학에서 오래된 기술이다. 구조를 몰라도 목표를 알면 따라 만들 수 있다. 몇 달 안에 다른 회사들이 비슷한 방식으로 분류 모델을 개선했다는 발표가 이어지고, 내년 상반기 안에 오픈 웨이트 결정 모델이 나온다. 그때가 되면 회사마다 자기 데이터로 자기 가드레일을 학습시켜 온프레미스에 올릴 수 있다. 지금 Jev의 가장 큰 제약인 폐쇄성은 방식이 퍼지는 순간 사라진다.

국내 기업 고객에게는 이 시점이 중요하다. 금융과 공공은 데이터를 외부로 내보낼 수 없어서 미국에 있는 서비스를 호출하는 지금의 Jev를 쓸 수 없다. 오픈 웨이트 결정 모델이 나오면 자기 데이터로 분류기를 학습시키고 자기 threshold를 정해 내부에 둘 수 있다. 생성을 하지 않는 모델이 생성하는 모델보다 가벼울 것이라는 기대도 합리적이어서, 판정 전용 모델을 작은 장비에 올리는 그림이 그려진다.

개발자가 하는 일도 바뀐다. 지난 3년의 기술은 프롬프트를 다듬어 모델이 원하는 대로 말하게 만드는 것이었다. 분류기가 판정을 맡으면 기술은 질문을 잘게 나누고, 선택지를 빠짐없이 정하고, 행동마다 threshold를 정하는 쪽으로 옮겨 간다. “해당 없음”을 선택지에 넣지 않아 자신 있는 오답을 받는 실수가 프롬프트 실수를 대신한다. 이 일은 프롬프트 엔지니어링보다 소프트웨어 설계에 가깝고, 그래서 검토할 수 있고 시험할 수 있다.

방식이 퍼지면 에이전트의 설계도 바뀐다. 지금의 에이전트는 큰 언어 모델 하나가 계획도 세우고 판정도 하고 실행도 한다. 판정을 떼어내 보정된 분류기에 맡기면 언어 모델은 열린 작업에만 쓰이고, 그 작업이 허용 범위 안에 있는지는 다른 종류의 모델이 다른 종류의 학습으로 판정한다. 감시자와 피감시자가 다른 재료로 만들어진다. 하나를 속이는 방법이 다른 하나에 그대로 통하지 않는다. 7월 사고의 원인이 여기서 풀린다.

언어 모델은 무엇이든 만들 수 있기 때문에 무엇이든 만들어 버린다. 자유가 곧 위험이다. 분류기는 정해진 것 가운데 하나만 고를 수 있기 때문에 위험한 것을 새로 만들 수 없다. 두 종류의 모델이 짝을 이루면 자유와 통제가 한 모델 안에서 다투지 않아도 된다. 언어 모델의 가장 큰 단점을 메울 첫 단서가 여기 있다.

판정은 모델이, 우산은 코드가

기상청이 확률을 붙이기 시작했을 때 사람들이 원한 것은 “온다, 안 온다”였다. 판정과 행동을 한 사람이 다 해 주길 바랐다. 언어 모델은 그 바람을 들어주었다. 판정도 하고 행동도 정하고 실행까지 했다. 그러다 우산 대신 다른 것을 들고 샌드박스 밖으로 나갔다.

우리는 언제나 그랬다. 새것이 나오고, 새것이 큰 문제를 일으키고, 그 문제를 다시 풀어 왔다. 언어 모델이라는 큰 무기를 손에 쥐었고, 그 무기가 스스로 벽을 넘는 것을 보았다. 이제 그 앞에 조건문을 다시 세운다. 조건은 사람이 적지 않는다. 확률로 배운 모델이 판정한다. 그 확률로 무엇을 할지는 코드가 정하고, 그 코드는 사람이 읽는다. 다만 이번 조건문은 우산을 챙기지 않는다. 비 올 확률만 말하고, 우산은 코드가 챙긴다.

참고 자료

  • TypeSafe AI, “Introducing System One Models & Jev” (2026.9.15): https://typesafe.ai/blog/introducing-system-one-models-and-jev
  • Hugging Face, “Anatomy of a Frontier Lab Agent Intrusion: A Technical Timeline of the July 2026 Incident”: https://huggingface.co/blog/agent-intrusion-technical-timeline
  • The Hacker News, “OpenAI Says Its AI Models Escaped Sandbox, Targeted Hugging Face to Cheat Benchmark”: https://thehackernews.com/2026/07/openai-says-its-own-ai-models-escaped.html
  • Hackett et al. (Mindgard, Lancaster University), “Bypassing Prompt Injection and Jailbreak Detection in LLM Guardrails” (2025): https://arxiv.org/html/2504.11168v1
  • Anthropic, “Constitutional Classifiers: Defending against universal jailbreaks” (2025.2.3): https://www.anthropic.com/news/constitutional-classifiers
  • OpenAI, “GPT-4 Technical Report” (2023): https://arxiv.org/abs/2303.08774
  • Murphy & Winkler, “Reliability of Subjective Probability Forecasts of Precipitation and Temperature” (1977): https://ideas.repec.org/a/bla/jorssc/v26y1977i1p41-47.html