토크나이저 안전 예제
최신 안정판 Text 0.2.1 릴리스 기준
이 예제는 한국어·일본어 프로세서 앞에 작은 서비스 경계를 둔다. 제출 본문을 노출하지 않으면서 잘못된 입력, 길이 초과, 성공, 예상하지 못한 프로세서 실패를 구분한다.
실행하기
섹션 제목: “실행하기”./gradlew :examples:tokenizer-safety-examples:run프로그램은 한국어·일본어 토큰화와 금칙어 요청 네 개를 성공시킨 뒤 최대 길이를 넘는 한국어 토큰화 값을 보낸다. 성공한 줄에는 언어와 token 수 또는 masked length가 나오고, 초과 입력에는 상태 413, 실제 길이, 최대 길이가 나온다.
검증 순서
섹션 제목: “검증 순서”TokenizerSafetyHandler는 다음 순서로 처리한다.
- 해당 연산의 최대 길이를 넘으면
413 - 빈 텍스트면
400 - 프로세서가 성공하면
200 - 프로세서가 예외를 던지면 정제된
500
토큰화는 MAX_TOKENIZE_TEXT_LENGTH, 마스킹은 MAX_BLOCKWORD_TEXT_LENGTH를 사용한다. 0.2.1에서는 둘 다 100_000이다.
주입할 수 있는 프로세서 함수
섹션 제목: “주입할 수 있는 프로세서 함수”handler 생성자는 한국어·일본어 함수를 받는다. 테스트에서는 실제 모델을 올리지 않고도 프로세서 실패를 만들고, 응답에 processor error는 있지만 제출한 sentinel은 없는지 확인할 수 있다.
이 구조는 경계 테스트를 빠르게 유지하고 adapter 정책과 토크나이저 정확성을 분리한다.
Coroutine 주의점
섹션 제목: “Coroutine 주의점”예제는 동기 프로세서 호출을 runCatching으로 감싼다. 주입 함수가 suspend로 바뀐다면 CancellationException을 먼저 다시 던지는 명시적 try/catch를 사용해야 한다.
HTTP에 적용하기
섹션 제목: “HTTP에 적용하기”SafetyResponse.status를 framework 응답으로 변환하고 body에는 원문을 넣지 않는다. decoding 전에는 transport byte 제한을, decoding 뒤에는 라이브러리 문자 제한을 적용하고 정책상 안전한 request id만 붙인다.
유지할 테스트
섹션 제목: “유지할 테스트”- 빈 입력과 공백 입력
- 정확히 최대 길이와 한 글자 초과
- 각 언어와 각 연산
- 주입한 프로세서 실패
- 모든 오류와 보고서에 sentinel 원문이 없는지
입력 안전성, 실패 계약, Tokenizer Core로 이어서 살펴보자.