LLM(Language Model) 사용, JSON 최적화로 비용 절감!

by DD
4개월 전
조회수 18

LLM(Language Model) 기반 기능 개발 시 JSON 토큰 사용량(Token Usage)을 줄이기 위한 다양한 최적화 기법 소개

UUID를 짧은 ID로 대체, JSON 포맷팅 제거, 키 이름 축약 등 구체적인 방법론 제시

Kollabe의 회고 및 스탠드업 요약 기능에 실제 적용하여 토큰 사용량 50% 감소 효과를 확인

TOON(Token-Oriented Object Notation)과 같은 표준화된 압축 방식도 존재하지만, 유연한 커스터마이징(Customization)을 위해 자체적인 최적화 방식 선택

데이터 구조 단순화, 불필요한 메타데이터 제거 등을 통해 LLM(Language Model)의 추론 속도(Inference Speed) 향상 및 비용 절감 가능

UUID를 짧은 ID로 대체하는 방법

본문에서는 UUID(Universally Unique Identifier)를 짧은 ID로 대체하여 토큰 사용량을 줄이는 방법을 제시한다. UUID는 데이터베이스(Database)에서 고유 식별자로 유용하지만, LLM(Language Model)에게는 불필요한 토큰을 소모하는 원인이 된다.

UUID를 u-1, u-2와 같은 짧은 ID로 매핑: 동일한 사용자를 나타내는 경우, 짧은 ID를 재사용하여 토큰 절약

접두사(Prefix) 사용: 사용자(u), 질문(q), 답변(a) 등, 각 객체 유형에 따라 다른 접두사를 사용하여 LLM(Language Model)이 문맥을 이해하도록 돕는다.

구현: 데이터 처리 시, UUID와 짧은 ID 간의 매핑 테이블을 구축하여 관리한다. 이 방법은 JSON 데이터 크기(JSON Data Size)를 줄이는 효과를 가져온다.

JSON 포맷팅 제거 및 키 이름 축약

글에서는 JSON 포맷팅 제거와 키 이름 축약을 통해 토큰 사용량을 줄이는 방법을 설명한다. JSON.stringify()의 두 번째, 세 번째 인자를 활용하여 JSON 데이터 크기(JSON Data Size)를 최적화한다.

JSON.stringify() 활용: 공백 제거를 통해 데이터 압축(Data Compression) 효과를 얻는다.

키 이름 축약: odUserId를 uid로, userName을 name으로 변경하는 등, 의미를 해치지 않는 범위 내에서 키 이름을 줄인다.

구현: 개발자는 JSON 직렬화 시 포맷팅 옵션을 제거하고, 키 이름을 축약하는 규칙을 정의하여 적용한다. 이러한 방법은 JSON 파싱(JSON Parsing) 속도 향상에도 기여한다.

데이터 구조 단순화 및 불필요한 데이터 제거

본문에서는 중첩된 구조를 평탄화하고, null 또는 빈 값을 제거하여 토큰 사용량을 줄이는 방법을 소개한다. LLM(Language Model)에 불필요한 정보를 전달하지 않도록 데이터 전처리(Data Preprocessing)를 수행한다.

중첩 구조 평탄화: user -> profile -> name과 같은 중첩 구조를 name으로 변경하여 구조적 토큰(Structural Token) 사용을 줄인다.

null 및 빈 값 제거: 존재하지 않는 데이터는 LLM(Language Model)에 전달하지 않음으로써 토큰 낭비를 방지한다.

구현: 데이터 구조를 분석하고, 불필요한 중첩과 값을 제거하는 로직을 구현한다. 이러한 최적화는 LLM(Language Model)의 추론 정확도(Inference Accuracy) 향상에도 기여할 수 있다.

배열 사용 및 불리언 표현 최적화

글에서는 유사한 항목들을 배열로 표현하고, 불리언 값을 효율적으로 나타내는 방법을 제시한다. 데이터 구조를 변경하여 토큰 사용량(Token Usage)을 절감하고, LLM(Language Model)의 이해도를 높인다.

반복되는 객체 대신 배열 사용: 동일한 구조를 가진 객체들의 경우, 헤더 행과 데이터 행으로 구성된 배열을 사용하여 중복되는 키(Key)를 제거한다.

불리언 값 표현 최적화: false인 경우 필드를 생략하거나, true인 값만 배열에 포함하여 토큰 사용량을 줄인다.

구현: 데이터 구조를 분석하고, 배열로 표현하는 것이 효율적인지 판단한다. 불리언 값은 긍정적인 경우만 포함하도록 로직을 변경한다. 이러한 방법은 LLM(Language Model)의 성능 향상에 기여한다.

실제 사례: Kollabe의 회고 요약 기능

본문에서는 Kollabe의 회고 요약 기능에 적용된 JSON 최적화 사례를 보여준다. 실제 데이터를 기반으로 최적화 전후의 차이점을 비교 분석하여 최적화의 효과(Optimization Effect)를 시각적으로 제시한다.

최적화 전: UUID, 긴 키 이름, 중첩 구조, null 값, 타임스탬프(Timestamp) 등, 불필요한 데이터가 포함되어 토큰 사용량 증가

최적화 후: 짧은 ID, 축약된 키 이름, 구조 단순화, null 값 제거, 불필요한 데이터 제거를 통해 JSON 데이터 크기 50% 감소

결과: 토큰 비용 절감, 추론 속도 향상, LLM(Language Model)의 성능 향상

이러한 사례는 LLM(Language Model) 기반 서비스를 개발하는 개발자들에게 실질적인 가이드라인(Practical Guideline)을 제공한다.

Optimizing JSON for LLMs