티스토리 뷰
"This model's maximum context length is 4097 tokens. However, you requested 4162 tokens (66 in the messages, 4096 in the completion). Please reduce the length of the messages or completion."
GPT를 쓰다보면 이런 에러를 만나는 경우가 있을 것이다.
이 에러는 왜 나는 걸까?
모델에 입력할 수 있는 최대 토큰 수를 초과했기 때문에 나는 에러이다.
토큰 수는 일반적으로 텍스트의 길이를 비율을 정해서 본다면, 어느정도는 맞을 수 있다.
다만, 토큰 수 = 텍스트 길이는 참이 아니다.
그렇다면 토큰 수는 어떻게 세면 될까?
OpenAI에서는 공식적으로 토큰 수를 셀 수 있는 페이지를 제공한다.
그러나 페이지를 잘 뜯어보면,
GPT-3 기준이다.
2023.11.27 업데이트
위 사이트에 GPT-3.5와 GPT-4 모델의 토큰을 세는 옵션이 추가되었습니다.
하지만, 여전히 코드 내에서
GPT-3.5 의 토큰 수를 세려면 외부 라이브러리를 사용해야 한다.
GPT-3.5의 토큰 수를 가장 직관적으로 계산할 수 있는 토크나이저를 찾아 다녔는데,
개인적으로 jtokkit 이 가장 맘에 들어서 이 라이브러리를 사용했다.
JTokkit 사용법
설치부터 시작
build.gradle
implementation 'com.knuddels:jtokkit:0.5.0'
java
public int getTokenSize(String text) {
EncodingRegistry registry = Encodings.newDefaultEncodingRegistry();
Encoding enc = registry.getEncodingForModel(ModelType.GPT_3_5_TURBO);
List<Integer> encoded = enc.encode(text);
return encoded.size();
}
사실 github 페이지에 다 나와있는 내용인데, 토큰 크기가 인코딩된 배열의 사이즈라는게 제대로 명시되어 있지 않은 것 같다.
결론은 토큰 사이즈는 encoded 배열의 사이즈이다.
따라서 문자열의 토큰 크기 계산은 위 코드와 같이 쓰면 된다.
만약 GPT-3.5가 아닌 GPT 토큰 수 계산 페이지와 같은 GPT-3의 토크나이저를 쓰고 싶다면, 아래와 같이 쓰면 된다.
registry.getEncoding(EncodingType.CL100K_BASE);
주의할 점
어떤 이유에서인지 chat API 에서 max_tokens 파리미터를 각 model의 최대 파라미터로 설정하면 무조건 maxmum token(토큰 허용량 초과) 에러가 난다.
null로 둬도 되니까 null로 두고 사용하거나 적당한 크기로 두고 사용하자.
(첫 예시도 max_token 사이즈로 두고 사용했을 때 발생하는 에러)
마치며
내가 jtokkit에 등록한 이슈에 대한 답변과 이것저것 써본 내용이다.
한 질문을 거의 그대로 가져왔다.
만약 유료 플랜을 쓰고 있다면, 토큰 당 과금이 되기 때문에 토큰 계산식이 꽤나 중요하다.
나름 잘 정리한 것 같으니 잘 활용해주세요.
'개발 > chatGPT' 카테고리의 다른 글
ChatGPT Function calling 기능 소개 및 Spring Boot에서 사용해보기 (0) | 2023.07.07 |
---|---|
Chat GPT API에서 이전 대화 기억하게 하기 (9) | 2023.06.25 |
Chat GPT API에서 사용하는 SSE(Server-Sent Events) 뜯어보기 (2) | 2023.05.14 |
ChatGPT API의 새기능? chat API를 써보자 - 2 (프롬프트와 SSE) (1) | 2023.05.13 |
ChatGPT API의 새기능? chat API를 써보자 - 1 (간단 사용법) (0) | 2023.04.24 |
- Total
- Today
- Yesterday
- cache
- Log
- terraform
- Spring
- CloudFront
- serverless
- EKS
- lambda
- openAI API
- 후쿠오카
- JWT
- AWS EC2
- java
- 스프링부트
- 티스토리챌린지
- GIT
- Elastic cloud
- ChatGPT
- elasticsearch
- 람다
- OpenFeign
- S3
- Kotlin
- MySQL
- AOP
- 오블완
- springboot
- OpenAI
- docker
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |