LLM과 함께 TOON을 사용하는 방법
ChatGPT 또는 Claude에 대규모 JSON 배열을 붙여넣은 적이 있다면 컨텍스트 창이 닫히는 고통을 느꼈을 것입니다. JSON은 웹 API에는 환상적이지만 LLM(대형 언어 모델)에는 엄청나게 낭비됩니다. 모든 단일 레코드에 대해 "id":, "name": 및 "timestamp":와 같은 필드 이름을 반복하는 것은 중복되지 않습니다. 실제 돈과 귀중한 컨텍스트 공간이 필요한 토큰을 소모합니다.
TOON(Table Object Notation)이 빛나는 곳입니다. 이는 단순한 데이터 형식이 아닙니다. 이는 LLM 상호 작용을 최적화하기 위한 전략입니다. TOON을 사용하면 JSON의 구문 세금을 제거하고 명시적인 구조 헤더를 추가하여 모델에 더 많은 데이터를 전달하고 그 대가로 보다 안정적인 구조화된 출력을 얻을 수 있습니다.
TOON의 토큰 경제학
굳이 형식을 바꿔야 하는 이유는 무엇입니까? 수학은 간단합니다. 표준 JSON 객체 배열에서는 스키마가 모든 행에 대해 반복됩니다. 50명의 사용자 목록이 있는 경우 필드 이름에 대해 50번의 비용을 지불하게 됩니다.
TOON은 헤더에서 스키마를 한 번 선언하여 이러한 중복성을 제거합니다. 데이터는 조밀하고 효율적인 형식으로 이어집니다. 실제로 이는 일반적으로 형식화된 JSON에 비해 균일 배열의 토큰 사용량이 30~60% 감소합니다. 대규모 컨텍스트 창이나 대용량 API 호출을 처리할 때 이러한 효율성은 비용 절감과 대기 시간 단축으로 직접적으로 이어집니다.
데이터 전송: "보여주고 말하지 마세요" 규칙
데이터 분석을 위해 LLM이 필요한 경우 신속한 전략이 중요합니다. 초보자는 종종 데이터 형식을 설명하는 긴 단락을 작성합니다. TOON을 사용하면 그렇게 할 필요가 없습니다.
LLM은 패턴 일치 엔진입니다. TOON은 훈련 중에 수십억 번 본 형식인 YAML과 CSV의 하이브리드처럼 보이기 때문에 TOON을 직관적으로 이해합니다.
데이터를 보내려면 울타리가 있는 코드 블록으로 데이터를 래핑하면 됩니다. 'toon'이라는 라벨을 붙일 수 있지만 모델의 구문 강조 표시가 공식적으로 지원하지 않더라도 모델은 구조를 즉시 이해합니다.
입력 예
스키마를 설명하는 대신 블록만 제공하면 됩니다.
users[3]{id,name,role,lastLogin} 헤더는 엔터티 유형, 개수(3개 행), 필드 순서 등 모델이 알아야 할 모든 것을 모델에 알려줍니다. 들여쓰기는 계층 구조를 처리합니다. 이러한 "자체 문서화" 특성으로 인해 구문 분석 지침이 아닌 실제 논리 작업에 집중할 수 있는 프롬프트가 제공됩니다.
``MD 다음은 사용자 활동 로그입니다. 데이터는 TOON 형식(2칸 들여쓰기, 명시적 헤더)입니다.
사용자[3]{id,이름,역할,마지막 로그인}: 1,앨리스,관리자,2025-01-15T10:30:00Z 2,밥,사용자,2025-01-14T15:22:00Z 3,찰리,사용자,2025-01-13T09:45:00Z
작업: 로그를 분석하고 지난 24시간 동안 로그인하지 않은 사용자를 식별합니다.
신뢰할 수 있는 출력 생성
LLM을 통해 데이터를 읽는 것은 쉽습니다. 유효한 구조화된 데이터를 _생성_하는 것은 어려운 부분입니다. 모델은 환각을 느끼거나 JSON을 자르거나 닫는 중괄호를 잊어버리는 것을 좋아합니다.
TOON은 헤더 구문, 특히 [N] 개수를 통해 안전 계층을 추가합니다. 모델에 TOON 출력을 요청하는 것은 모델이 데이터를 생성하기 전에 구조에 커밋하도록 요청하는 것입니다.
세대를 촉구하다
최상의 결과를 얻으려면 예상하는 헤더 형식을 제공하고 모델에 행을 채우도록 지시하십시오.
모델에 [N]을 계산하도록 요청하면 모델이 출력 크기를 계획해야 하는 '사고 사슬' 프로세스가 강제됩니다. 이 겉보기에 작은 제약 조건은 모델이 목록 중간에 끊어질 가능성을 크게 줄입니다.
``MD 작업: "user" 역할을 가진 활성 사용자 목록을 반환합니다. 형식: TOON을 사용하세요. 생성하는 행의 정확한 수와 일치하도록 헤더의 [N] 값을 설정합니다.
예상 형식: 사용자[N]{id,이름,역할,마지막 로그인}:
엄격 모드로 유효성 검사
LLM으로부터 응답을 받았을 때 이를 단순히 신뢰해서는 안 됩니다. TOON 라이브러리의 엄격 모드가 프로덕션 애플리케이션의 초강력이 되는 곳입니다.
TypeScript 라이브러리를 사용하는 경우 엄격 모드로 디코딩하면 생성된 행이 헤더 수와 일치하는지 확인합니다.
이를 통해 애플리케이션에서 잘못된 데이터 다운스트림을 발견하는 대신 프로그래밍 방식으로 "지연" 모델 출력이나 네트워크 잘림을 즉시 포착할 수 있습니다.
'@toon-format/toon'에서 { 디코드 } 가져오기;
{를 시도해보세요
// 모델이 [5]라고 되어 있지만 4개의 행을 제공하는 경우 오류가 발생합니다.
const data = decode(modelOutput, { strict: true });
console.log('유효한 데이터 수신:', data);
} 잡기(오류) {
console.error('모델 환각 또는 잘림이 감지되었습니다:', error.message);
}
고급 최적화: 탭 트릭
최적화에 집착한다면(그리고 LLM의 세계에서는 아마도 그럴 것입니다) 구분 기호를 현명하게 선택하여 효율성을 더욱 높일 수 있습니다.
쉼표는 표준이지만 탭(\t)은 많은 토크나이저 어휘에서 단일 토큰으로 표시되는 경우가 많습니다. 또한 탭은 자연 텍스트 필드 내에 거의 나타나지 않으므로 이스케이프 문자(예: 문자열을 따옴표로 묶는 것)의 필요성이 줄어듭니다.
데이터를 모델로 보내기 전에 탭을 사용하여 데이터를 인코딩할 수 있습니다.
프롬프트에서 모델에 다음과 같이 알리는 것을 기억하세요. "데이터는 탭으로 구분된 TOON입니다." 이렇게 하면 모델이 구문 분석하고 생성하기가 매우 쉬운 초소형 표현이 생성됩니다.
const toonPrompt = encode(data, { 구분 기호: '\t' });
완전한 작업흐름 예시
실제 시나리오인 시스템 로그 필터링을 살펴보겠습니다. 원시 로그를 모델로 보내고 구조화된 오류 목록을 다시 받고 싶습니다.
프롬프트:
모델 출력:
``MD TOON 형식의 시스템 로그(탭으로 구분):
이벤트[4]{id,레벨,메시지,타임스탬프}: 1,오류,연결 시간 초과,2025-01-15T10:00:00Z 2,경고,느린 쿼리,2025-01-15T10:05:00Z 3,정보,사용자 로그인,2025-01-15T10:10:00Z 4,오류,데이터베이스 오류025-01-15T10:15:00Z
작업: '오류' 수준의 모든 이벤트를 추출합니다. 업데이트된 헤더 수를 사용하여 결과를 유효한 TOON으로 반환합니다.
결과:
``툰 이벤트[2]{id,레벨,메시지,타임스탬프}: 1,오류,연결 시간 초과,2025-01-15T10:00:00Z 4,오류,데이터베이스 오류,2025-01-15T10:15:00Z
모델은 목록을 올바르게 필터링했으며 결정적으로 헤더를 events[2]로 업데이트했습니다. 이 응답을 디코딩하면 애플리케이션 로직에 사용할 수 있는 깨끗하고 유형이 안전한 배열을 얻을 수 있습니다.
요약
TOON은 인간의 가독성과 기계 효율성 사이의 격차를 해소합니다. 강력한 소프트웨어 개발에 필요한 구조를 제공하면서 LLM의 비용 제약을 존중합니다.
- 작게 유지하세요. 예시에는 2~5개의 행을 사용하세요. 모델이 일반화됩니다.
- 명시적이어야 합니다. 모델이 스키마를 알 수 있도록 헤더를 명확하게 정의합니다.
- 엄격하게 검증: 형식의 메타데이터를 사용하여 생성 오류를 포착합니다.
프롬프트 페이로드를 JSON에서 벗어나면 단순히 토큰을 절약하는 것이 아니라 더욱 안정적인 AI 파이프라인을 구축할 수 있습니다.