이전 포스팅에서는 GPT API에서 파라미터 설정을 효율적으로 하는 법에 대해 작성했었다.
이번에는 좀 더 사람들이 관심있어할만한 비용 최적화하는 방법에 대해 공유해보려고 한다.
비용 최적화에 대해 찾아보니, 생각보다 거창한 방법은 없었고 대부분 사소한 디테일들이다. 하지만 이런 디테일도 API 사용량이 많은 경우 유의미한 결과를 낼 수 있으니 적용해보는 것을 추천한다!
GPT API 비용
Pricing 페이지에서 API 비용 확인이 가능하다. 1M 토큰당 비용으로 작성되어있다.
여기서 토큰은 생성형 AI가 텍스트를 처리하는 기본 단위를 의미한다
입, 출력 토큰 계산
비용 최적화 이전에 비용 계산을 미리 해보려면 입, 출력 토큰을 계산할 수 있어야한다
이전 포스팅에서 이야기한대로 Tokenizer를 사용하면 내 입력과 출력의 token수를 세어볼 수 있다.
비용 최적화 방법들
- 입력 프롬프트 최적화
- 응답 길이 제한 (max_tokens 활용)
- 영어 vs 한글
- 캐싱
- 모델 선정
- 응답 포맷 설정 (json)
1. 입력 프롬프트 최적화
가장 쉽게 적용해볼 수 있는 방법이다.
프롬프트를 쓸 때 주로 한글로 쓰다보니 구구절절 쓰게 되는 경향이 있는데, 핵심만 간단히 하는 것이 좋다!
왜냐면 입력 값이 길어질 수록 토큰이 많아지므로, API 비용이 더 늘어날 수 밖에 없다.
입력은 출력에 비해 비용이 저렴한편이지만, 입력은 한번 설정해둔대로 여러번 사용되기 때문에 한번 개선 시 지속적인 비용절감 효과를 볼 수 있다.
Bad
소비자들은 제품을 선택할 때 여러 요소를 고려합니다.
특히 실용성과 가격 대비 가치를 중요하게 생각하는 소비자들이 많습니다.
이러한 소비자들에게 적합한 제품을 소개하는 문구를 작성하려고 합니다.
주어진 정보를 활용하여, 해당 소비자들에게 매력적으로 다가갈 수 있는
제품 소개 문구를 5개 작성해 주세요.
📌 조건:
- 명확하고 직관적인 표현 사용
- 예시는 아래 스타일 참고
(예시) 직관적인 디자인과 강력한 기능을 갖춘 스마트 가전입니다.
Good
실용적인 제품을 찾는 소비자를 위한 제품 소개 문구 5개 작성.
- 20자 이내
- 직관적이고 간결한 표현 사용
물론 위 예시가 모든 경우에 Bad/Good 케이스는 아니지만, 핵심은 짧고 명확하게 표현할 수 있는 문장을 길게 늘여 쓰고 있지는 않은지 확인하는게 필요하다. 프롬프트 최적화는 GPT에게 질문하여 진행하는 것도 추천!
2. 응답 길이 제한 (max_tokens)
위에서 입력을 줄였으니, 이제 출력을 줄여볼 차례이다.
GPT API를 사용할 때 전달할 수 있는 파라미터에는 max_tokens라는 값이 있다. 이 값을 지정하면 GPT가 이 token을 넘어가지 않게 출력하므로, GPT의 응답이 너무 길어져 비용이 많이 나오게 되는걸 방지할 수 있다.
하지만 max_tokens를 낮게 설정하면 응답이 중간에 끊겨서 어색한 응답을 받을 수 있으니 주의해서 사용해야한다.
응답이 끊기면 안되는 서비스의 경우 max_tokens 값을 충분하게 설정하고, 입력 프롬프트를 이용하여 '30 자로 답해줘' 와 같은 방식을 쓰는게 더 좋을 수도 있다.
// Node.js로 max_tokens 파라미터 사용 예시
const response = await openai.createChatCompletion({
model: "gpt-4", // ChatGPT 모델 사용
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Explain the concept of machine learning in simple terms." }
],
max_tokens: 100, // 최대 100 토큰으로 응답 제한
});
3. 영어 vs 한글
입력 프롬프트는 영어로 쓰는게 좋을까, 한글로 쓰는게 좋을까?
예전에는 영어가 한글보다 더 좋다는 이야기가 있었는데, GPT-4o부터는 한글을 더 잘 이해할 수 있게 되었고, 한글 토큰 처리가 개선되어 한글/영어 토큰 수의 차이가 거의 없어졌다.
Tokenizer를 보면 GPT-4o & GPT-4o mini 와 GPT-3.5 & GPT-4 가 나뉘어져있는데,
똑같이 한글로 'GPT 사용법 알려주세요'를 입력하면 GPT-4o에서 인식하는 토큰이 더 적은걸 확인할 수 있다.
영어로 'Please tell me how to use GPT'를 입력하면 GPT-3.5 & GPT-4 에서 한글로 했을 때보다 token이 적지만, GPT-4o보다는 많은 토큰이 사용되는걸 볼 수 있다.
결론 = GPT-4o부터는 영어로 쓴다고 토큰 수가 크게 줄어드는게 아니니, 한글이 필요한 경우 한글로, 영어가 필요한 경우 영어로 작성하면 된다!
4. 캐싱
입력이 같은 경우엔, 그걸 API에 여러번 보내는 것보다 응답을 저장해뒀다가 사용하면 비용을 절감할 수 있다.
예를들어 챗봇에서 같은 경우 같은 질문이 여러번 들어올 수 있는데, 이럴땐 입, 출력을 캐시에 저장해두었다가 사용해두면 API 호출 횟수를 줄일 수 있다.
자체적으로 캐싱을 하지 않는 경우에도 똑같은 입력 값을 보내면 GPT 내부적으로 캐싱된 답을 반환하므로 일반 입력보다 비용이 절감 된다.
Pricing을 보면 그냥 input과 cached input의 비용이 나뉘어져 있고, cached input은 거의 절반의 비용만 든다.
5. 적절한 모델 사용
GPT 최신 모델의 비용을 보면 GPT-4o-mini가 가장 저렴하고, GPT-4o, GPT-4.5-preview로 갈 수록 약 10배, 15배씩 비싸진다
결과의 퀄리티, 모델 성능이 중요한 경우 GPT-4o 또는 GPT-4.5를 사용하면 좋을 것 같고
단순한 질문, 예를 들어 'A, B, C라는 문장에서 A에 해당하는 부분만 추출해줘.' 라는 질문은 쉽고, 결과의 퀄리티가 중요한게 아니기때문에 gpt-4o-mini도 충분하다.
한 프로젝트에서 하나의 모델만 사용할 필요 없고, 유형에 따라 모델을 선택해서 사용할 수 있으니 여러개를 섞어서 사용하는 것도 방법이다.
6. 응답 포맷 설정
GPT-4o부터는 json 응답 형식을 지정할 수 있다, GPT-4와 GPT-3.5는 프롬프트에 json으로 응답해달라는 문구를 넣어서 이야기해서 정확도도 떨어지고 그만큼 입력 토큰을 추가로 사용했었다.
실제로 프로젝트를 진행하게되면, json으로 데이터를 받아야하는 경우가 꽤 있는데, 파라미터로 응답 포맷을 전달하는 경우, 더 편하고 확실하게 json 응답을 받을 수 있다.
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Give me a JSON response with a user's name and age." }
],
response_format: "json", // JSON 응답 강제
});
json으로 응답해달라는 문구를 넣어서 이야기하면, 가끔 일반 text와 섞어서 줘서 파싱 실패하는 케이스가 꽤 있어서 불편했다..
여기까지 어떻게보면 사소한? 비용 최적화 방법들을 이야기해보았다.
요즘 AI기능이 들어있는 서비스가 많아서, 대부분 API 방식으로 사용하고 있을 것 같은데, GPT가 아니더라도 대부분 비슷하게 동작할 거기때문에 적용 가능할 것 같다.
'AI > 생성형 AI' 카테고리의 다른 글
GPT API 효율적으로 사용하기 (1) - 파라미터 설정 (0) | 2025.03.02 |
---|