AI 토큰 비용을 절감하는 두 가지 효율적인 기술: TOON 및 Microsoft의 LLMLingua-2
Source: Dev.to
위 링크에 포함된 전체 텍스트를 제공해 주시면, 해당 내용을 한국어로 번역해 드리겠습니다. 현재는 링크만 제공되어 있어 번역할 본문이 없습니다. 텍스트를 복사해서 붙여 주시면 바로 번역해 드리겠습니다.
토큰 비용이 중요한 이유
AI 애플리케이션 구축이 그 어느 때보다 쉬워졌습니다. OpenAI의 GPT‑4, Anthropic의 Claude, 그리고 Google의 Gemini는 몇 년 전만 해도 과학 소설처럼 느껴졌던 것을 일상적인 현실로 만들었습니다.
기업들은 이제 다음과 같은 것을 만들고 있습니다:
- 지능형 에이전트
- 검색 기반 생성(RAG) 시스템
- 대규모 비즈니스 과제를 해결하는 GenAI 애플리케이션
하지만 프로토타입 단계에서 프로덕션 단계로 넘어가면 토큰 비용이 크게 작용합니다:
- **대형 언어 모델(LLM)**에 대한 모든 API 호출은 토큰당 청구됩니다.
- 토큰은 대략 한 단어 또는 단어의 일부에 해당합니다.
- **입력(데이터 + 지시)**과 출력(모델의 응답) 모두에 대해 비용을 지불합니다.
결과: 많은 개발자들이—대개 너무 늦게—데이터 포맷팅과 프롬프트 설계 때문에 토큰 사용량이 40‑60 % 증가한다는 사실을 발견합니다.
토큰 낭비를 줄이는 두 기술
| 기술 | 기능 | 토큰 절감 |
|---|---|---|
| TOON (Token‑Oriented Object Notation) | LLM을 위해 설계된 데이터 직렬화 포맷. | 구조화된 데이터에서 토큰 30‑60 % 감소 |
| LLMLingua‑2 (Microsoft) | 의미를 유지하면서 프롬프트의 50‑80 %를 제거하는 프롬프트 압축 엔진. | 프롬프트에서 토큰 50‑80 % 감소 |
두 기술 모두 다른 문제를 해결하지만 동일한 목표를 공유합니다: AI 비용을 크게 낮추는 것.
Source: …
TOON – Token‑Oriented Object Notation
TOON이란?
TOON은 대형 언어 모델을 위해 설계된 직렬화 포맷입니다. 다음을 결합합니다:
- YAML‑스타일 들여쓰기를 이용한 중첩 객체
- CSV‑스타일 표 형식을 이용한 균일 배열
JSON처럼 배열 요소마다 필드 이름을 반복하지 않고, TOON은 필드 이름을 한 번 선언하고 값만 나열합니다.
JSON vs. TOON (직원 예시)
JSON (전통적인 방식)
{
"team": [
{"id": 1, "name": "Tej B", "role": "engineer"},
{"id": 2, "name": "Praveen V", "role": "designer"},
{"id": 3, "name": "Partha G", "role": "manager"}
]
}
TOON (효율적인 방식)
team[3]{id,name,role}:
1,Tej B,engineer
2,Praveen V,designer
3,Partha G,manager
동일한 데이터이지만 토큰 수가 훨씬 적습니다.
성능 하이라이트
- 73.9 % 정확도와 39.6 % 적은 토큰 사용, JSON의 69.7 % 정확도 대비.
- LLM이 실제로 JSON보다 TOON을 더 잘 이해합니다.
실제 비용 예시
| 데이터 | 포맷 | 대략적인 토큰 수 | 토큰 감소량 |
|---|---|---|---|
| 100개 제품 × 8필드 | JSON | ~12,000 | — |
| 100개 제품 × 8필드 | TOON | ~6,000 | ≈ 50 % |
수천 건의 호출을 매일 수행한다면 월 수백~수천 달러를 절감할 수 있습니다.
이상적인 사용 사례
- 균일한 객체 배열 (예: 고객 레코드, 제품 카탈로그, 거래 로그)
- AI 에이전트에 전달되는 데이터베이스 쿼리 결과
- 분석 대시보드, 판매 보고서, 재고 데이터
- LLM이 처리해야 하는 모든 표형식 또는 반표형식 데이터
참고: 매우 깊게 중첩되었거나 비균일한 구조의 경우 JSON이 여전히 더 효율적일 수 있습니다. TOON은 특정 목적에 최적화된 도구이며, 보편적인 대체재는 아닙니다.
설치
pip install toon-py
기본 Python 사용법
from toon_py import encode, decode
products = [
{"id": 101, "name": "Laptop", "price": 1299, "stock": 45},
{"id": 102, "name": "Mouse", "price": 29, "stock": 230},
{"id": 103, "name": "Keyboard", "price": 89, "stock": 156}
]
# TOON으로 인코딩
toon_data = encode(products)
print(toon_data)
# ──> [3]{id,name,price,stock}:
# 101,Laptop,1299,45
# 102,Mouse,29,230
# 103,Keyboard,89,156
# 프롬프트에 사용
prompt = f"Analyze this inventory:\n{toon_data}\n\nWhich products need restocking?"
# `prompt`를 OpenAI, Claude, Gemini 등에 전송
# → 토큰을 40‑60 % 절감!
명령줄 인터페이스
# JSON → TOON
toon input.json -o output.toon
# TOON → JSON
toon data.toon -o output.json
LLMLingua‑2 – Prompt Compression
What Is LLMLingua‑2?
LLMLingua‑2 (Microsoft)는 데이터 직렬화보다 프롬프트 길이를 다룹니다. 압축을 토큰‑분류 문제로 간주하고, Transformer 인코더를 사용해 전체 양방향 컨텍스트를 고려하여 어떤 토큰이 필수인지 결정합니다.
- GPT‑4로부터 데이터 증류를 통해 학습되어, LLM이 정확히 무엇을 필요로 하는지 알고 있습니다.
- 의미를 유지하면서 불필요한 단어, 중복 구문, 불필요한 컨텍스트를 제거하는 전문 편집자처럼 동작합니다.
Compression Power
- 최대 20배 압축, 최소한의 성능 손실.
- 원래 LLMLingua보다 3‑6배 빠름.
- 엔드‑투‑엔드 지연 시간을 ≈ 1.6배 개선.
When to Use It
- AI 에이전트를 위한 긴 시스템 지시문
- 문서의 컨텍스트 구절(예: 법률 텍스트, 연구 논문)
- Few‑shot 예시 또는 데모
- 모델의 토큰 제한에 근접하는 모든 프롬프트
Putting It All Together
| 목표 | 도구 | 어떻게 도움이 되는가 |
|---|---|---|
| 구조화된 데이터의 토큰 수 감소 | TOON | 필드 이름을 한 번만 선언하는 압축 직렬화 |
| 프롬프트 / 지시문의 토큰 수 감소 | LLMLingua‑2 | 의미를 유지하면서 중복 문구를 지능적으로 제거 |
| 전체 비용 절감 | 둘 다 | 50‑80 % 토큰 감소 → API 비용 감소, 지연 시간 단축 |
개발자를 위한 빠른 체크리스트
- Identify 균일한 배열로 전송되는 데이터를 식별 → TOON으로 전환.
- Run 500 토큰 이상인 모든 프롬프트에 LLMLingua‑2를 실행.
- Measure 변환/압축 전후의 토큰 사용량을 측정.
- Iterate: TOON의 필드 순서를 미세 조정하거나 LLMLingua‑2의 압축 강도를 조정.
2.9× 압축 (2×‑5× 비율)
1,000 토큰짜리 프롬프트를 200 토큰으로 압축하면 단순히 비용이 절감되는 것이 아니라 속도도 빨라집니다. 사용자는 더 빠른 응답을 받게 되고, 비용은 줄어들며 모두가 이득을 보게 됩니다.
Retrieval‑Augmented Generation (RAG) 시스템을 구축하고 있다면 LLMLingua‑2는 게임 체인저입니다. RAG 애플리케이션은 종종 하나의 질문에 답하기 위해 10‑20개의 문서 청크를 가져오는데, 이는 LLM에 전달해야 할 컨텍스트가 방대해짐을 의미합니다.
LLMLingua는 LLM에서 발생하는 “중간에 손실” 문제를 완화시켜 장기 컨텍스트 정보 처리를 향상시킵니다. 검색된 컨텍스트를 압축함으로써 중요한 정보를 모두 유지하면서 토큰 수를 크게 줄일 수 있습니다.
LLMLingua는 LangChain 및 LlamaIndex와 같은 널리 사용되는 RAG 프레임워크에 통합되어 있습니다.
설치
pip install llmlingua
기본 압축
from llmlingua import PromptCompressor
compressor = PromptCompressor(
model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank",
use_llmlingua2=True,
)
context = """
The quarterly financial report shows strong growth in Q4 2024.
Revenue increased by 28% compared to Q3, primarily driven by
enterprise sales. Operating costs decreased by 12% due to
improved efficiency measures. Customer retention improved to 96%,
while new customer acquisition grew by 34%. The product team
shipped five major features that significantly increased user
engagement metrics across all segments...
"""
question = "What were the main growth drivers in Q4?"
prompt = f"{context}\n\nQuestion: {question}"
compressed = compressor.compress_prompt(
prompt,
rate=0.5, # Target 50 % compression
force_tokens=['\n', '?'] # Preserve important formatting
)
print(f"Original: {compressed['origin_tokens']} tokens")
print(f"Compressed: {compressed['compressed_tokens']} tokens")
print(f"Ratio: {compressed['ratio']}")
print(f"Compressed prompt: {compressed['compressed_prompt']}")
LangChain RAG와 함께 사용
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMLinguaCompressor
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(documents, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 20})
compressor = LLMLinguaCompressor(
model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank"
)
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=retriever,
)
compressed_docs = compression_retriever.get_relevant_documents(
"What are the key findings from the research?"
)
에이전트형 AI용
from llmlingua import PromptCompressor
compressor = PromptCompressor(
model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank",
use_llmlingua2=True,
)
agent_instructions = """
You are a financial analysis agent with access to market data,
company financials, and industry reports. Your task is to identify
investment opportunities by analyzing revenue trends, profit margins,
market positioning, competitive advantages, and growth potential.
Consider both quantitative metrics and qualitative factors...
"""
compressed = compressor.compress_prompt(
agent_instructions,
rate=0.4 # 60 % compression
)
agent_prompt = f"{compressed['compressed_prompt']}\n\nTask: Analyze Tesla's Q4 performance"
TOON vs. LLMLingua‑2 사용 시점
| 사용 사례 | 추천 도구 |
|---|---|
| 반복 필드가 있는 구조화된 데이터(고객 목록, 제품 카탈로그, DB 결과) | TOON |
| 표 형식 또는 반표 형식 데이터(판매 보고서, 분석, 재고) | TOON |
| 동일 구조의 객체 배열을 처리하는 AI 에이전트 | TOON |
| API 응답(백엔드의 JSON) | TOON |
| 긴 텍스트 프롬프트(지시사항, 설명, 가이드라인) | LLMLingua‑2 |
| RAG 시스템(검색된 문서 컨텍스트 압축) | LLMLingua‑2 |
| 자연어(회의 기록, 보고서, 기사) | LLMLingua‑2 |
| 다단계 추론(복잡한 사고 사슬 프롬프트) | LLMLingua‑2 |
| 구조화된 데이터와 긴 지시를 결합한 정교한 GenAI 앱 | Both |
| 고볼륨 시스템(일일 수천 건 AI API 호출) | Both |
| 비용 민감 애플리케이션(토큰 효율성이 수익성에 영향) | Both |
TOON 및 LLMLingua‑2 결합
from toon_py import encode
from llmlingua import PromptCompressor
compressor = PromptCompressor(
model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank",
use_llmlingua2=True,
)
sales_data = [
{"month": "Oct", "revenue": 450_000, "customers": 1_245, "churn": 23},
{"month": "Nov", "revenue": 485_000, "customers": 1_312, "churn": 19},
{"month": "Dec", "revenue": 520_000, "customers": 1_398, "churn": 15},
]
toon_data = encode(sales_data)
instructions = """
Analyze the quarterly sales performance considering seasonal trends,
customer acquisition costs, competitive landscape changes, and
market conditions. Compare with historical data from the past
three years. Identify key growth drivers and potential risks.
Provide actionable recommendations for the sales team based on
data‑driven insights and market analysis...
"""
compressed_instructions = compressor.compress_prompt(instructions, rate=0.5)
final_prompt = f"""
{compressed_instructions['compressed_prompt']}
Q4 Sales Data:
{toon_data}
Question: What's the trend and what should we do next quarter?
"""
# Send `final_prompt` to your LLM of choice.
핵심 요약
AI와 함께 구축하는 것은 단순히 모델 성능에 관한 것이 아니라 지속 가능한 경제성에 관한 것입니다. LLMLingua‑2를 장문의 텍스트에, TOON을 구조화된 데이터에 활용하면 토큰 효율성을 최대화하고 비용을 낮추며 응답 속도를 빠르게 할 수 있습니다. 🚀
Source:
AI 애플리케이션 비용 vs. 수익
토큰 비용이 수익보다 빠르게 증가하면 AI 애플리케이션은 실패합니다. TOON과 LLMLingua‑2는 여유를 제공합니다. 이를 통해 다음을 할 수 있습니다:
- 토큰 비용을 지속적으로 최적화하지 않아도 기능을 더 빠르게 출시
- 사용자 기반이 성장함에 따라 지속 가능한 확장 가능
- 예산이 더 큰 기업과도 효과적으로 경쟁
- 토큰을 절약하기 위해 기능을 줄이지 않아도 더 풍부한 경험 제공
두 기술 모두 프로덕션 준비 완료, 오픈 소스, 그리고 활발히 유지 관리됩니다.
TOON
- 설치:
pip install toon-py - 여러 언어 구현 제공
- 통합 시간: 기존 애플리케이션에 추가하는 데 약 5 분
LLMLingua‑2
- 설치:
pip install llmlingua - LangChain 및 LlamaIndex와 통합
- Microsoft Research가 지원하며 지속적인 개발 진행
시작하기 (전체 재작성 필요 없음)
- 식별 가장 비용이 많이 드는 API 호출(엔드포인트당 토큰 로그)
- 테스트:
- 구조화된 데이터 엔드포인트에 TOON 사용
- 텍스트가 많은 프롬프트에 LLMLingua‑2 사용
- 측정 실제 절감량(전후 토큰 수)
- 점진적 배포 애플리케이션 전체에 적용
왜 중요한가
AI 혁신은 비용이 많이 듭니다. 현명한 개발자들은 이를 저렴하게 만들 방법을 찾고 있습니다. TOON과 LLMLingua‑2는 오늘날 사용할 수 있는 가장 효과적인 도구 두 가지입니다.
지금 바로 API 비용을 절감하세요.