tiktoken 인코딩 — 공개 목록과 커스텀 등록

tiktoken 인코딩

tiktoken은 OpenAI가 쓰는 인코딩들을 openai_public 확장에 정의해 두고 있어요. cl100k_base처럼 익숙한 이름이 여기서 나오고, 모델별로 어떤 인코딩을 쓸지 결정하는 로직도 담겨 있죠.

새 인코딩 지원하기

tiktoken을 확장해 새 인코딩을 지원하는 방법은 두 가지예요.

① 원하는 대로 Encoding 객체를 직접 만들어 넘겨주기. 특수 토큰을 바꿀 때는 반드시 다른 이름을 써야 한다는 점이 포인트예요.

cl100k_base = tiktoken.get_encoding("cl100k_base")

enc = tiktoken.Encoding(
    name="cl100k_im",
    pat_str=cl100k_base._pat_str,
    mergeable_ranks=cl100k_base._mergeable_ranks,
    special_tokens={
        **cl100k_base._special_tokens,
        "<|im_start|>": 100264,
        "<|im_end|>": 100265,
    }
)

tiktoken_ext 플러그인 메커니즘으로 등록하기. tiktoken.get_encoding이 내 인코딩을 찾게 하려면 이 방식을 써요. tiktoken_ext 네임스페이스 패키지를 만들고, ENCODING_CONSTRUCTORS라는 딕셔너리를 정의하는 모듈을 넣는 구조예요. 딕셔너리의 키는 인코딩 이름, 값은 인자 없이 호출하면 tiktoken.Encoding 생성 인자를 돌려주는 함수예요. 예시는 tiktoken_ext/openai_public.py, 자세한 규칙은 tiktoken/registry.py에 있어요.

단순히 인코딩을 만들어 쓰는 것만 필요하다면 ①번이 낫고, 전역 등록이 필요하다면 ②번을 쓰면 돼요.

더 알아보기