툰이란 무엇인가요?

인도 마호가니
JSON
최적화

우리는 모두 거기에 있었습니다. LLM(대형 언어 모델)에 대한 프롬프트를 엔지니어링하고 있으며 구조화된 데이터를 전달해야 합니다. JSON에 도달했습니다. 결국 이는 업계 표준입니다. 그러나 컨텍스트 창이 끝없는 중괄호, 반복되는 키, 간단한 정수 주위의 따옴표로 가득 차는 것을 보면 다음과 같은 의문이 들기 시작합니다. 더 좋은 방법이 없을까?

YAML은 가독성을 제공하지만 모호함의 문제가 있습니다. CSV는 밀도가 높지만 계층 구조가 부족합니다.

TOON을 입력하세요.

TOON은 개발자에게는 신선한 공기를, AI 모델에게는 모국어처럼 느껴지는 데이터 직렬화 형식입니다. 인간의 가독성과 기계 효율성 사이의 격차를 해소합니다. 오늘은 TOON의 구문과 메커니즘에 대해 자세히 알아보고 왜 TOON이 고효율 데이터 교환에서 빠르게 인기를 얻고 있는지 이해해 보겠습니다.

철학: JSON 의미론, YAML 미학

TOON의 핵심은 JSON과 동일한 데이터 모델을 공유합니다. 기본 형식(문자열, 숫자, 부울, null), 객체, 배열 등 JSON으로 표현할 수 있다면 TOON에서도 표현할 수 있습니다. 그러나 프레젠테이션은 근본적으로 다릅니다.

TOON은 교정기를 버립니다. YAML과 마찬가지로 들여쓰기를 사용하여 계층 구조를 나타냅니다. 간단한 객체는 깨끗하고 접근하기 쉬워 보입니다.

그러나 YAML과 달리 TOON은 유형에 엄격합니다. 'no'가 'false'를 의미하는지 아니면 문자열 "no"를 의미하는지 추측할 수 없습니다. TOON에서 문자열은 꼭 필요한 경우에만 따옴표가 필요합니다. 예를 들어 특수 문자가 포함되어 있거나 숫자와 유사하거나 비어 있는 경우입니다. message: Hello World를 입력하면 문자열이 표시됩니다. 'count: 42'를 입력하면 숫자가 표시됩니다.

``yaml 아이디: 123 이름: 아다 활성: 사실

배열의 힘: 길이와 테이블

TOON이 팩과 진정으로 분리되는 부분은 어레이 처리입니다. 이것이 토큰 최적화를 위한 "킬러 기능"입니다.

TOON의 모든 배열은 items[3]처럼 괄호 안에 길이를 명시적으로 선언합니다. 이것은 인간에게는 중복되는 것처럼 보일 수 있지만 LLM에게는 초능력입니다. 이를 통해 모델은 즉시 구조를 검증하고 잘림을 감지할 수 있습니다. 스트림이 두 항목 이후에 끊어졌는데 헤더가 세 항목을 약속했다면 파서는 뭔가 잘못되었음을 알게 됩니다.

TOON은 배열을 처리하는 세 가지 방법을 효과적으로 제공하여 가장 효율적인 방법을 자동으로 선택합니다.

  1. 인라인 프리미티브: 숫자 또는 문자열의 간단한 목록의 경우 TOON은 이를 간결하게 유지합니다. 태그[3]: 관리자,운영,개발
  1. 표준 목록: 혼합 유형의 경우 YAML과 유사한 하이픈으로 연결된 목록 구문을 사용합니다.
  1. 테이블 형식 개체: 이는 판도를 바꾸는 요소입니다.

동일한 키를 공유하는 개체 배열(데이터베이스 레코드의 매우 일반적인 패턴)이 있는 경우 TOON은 표 형식으로 피벗됩니다. 모든 단일 행에 대해 키를 반복하는 대신 헤더에 키를 한 번 선언합니다.

위의 예에서 users[2]{id,name,role}:는 2개의 행이 있음을 알려주고 스키마를 정의합니다. 데이터는 CSV와 유사한 구조를 따릅니다. 이렇게 하면 모든 사용자에 대해 "id":, "name":"role":을 반복하는 데 따른 막대한 토큰 오버헤드가 제거됩니다.

``yaml 사용자[2]{id,이름,역할}: 1, 앨리스 관리자, 관리자 2, Bob Smith, 사용자

구분 기호 및 토큰 효율성

위의 예에서 쉼표가 사용된 것을 알 수 있습니다. TOON은 실제로 쉼표(기본값), 탭, 파이프(|)라는 세 가지 구분 기호를 지원합니다.

이것이 왜 중요합니까? 토큰화.

많은 LLM 토크나이저에서 쉼표와 따옴표가 여러 토큰으로 분할될 수 있습니다. 그러나 탭 문자는 매우 깔끔하게 토큰화되는 경우가 많습니다. TOON을 사용하면 배열 헤더 수준에서 구분 기호를 전환할 수 있습니다. 탭 구분 기호를 사용하는 경우 공백이 포함된 문자열을 인용할 필요가 없어 데이터를 더욱 압축할 수도 있습니다.

형식은 "충돌"을 처리할 만큼 똑똑합니다. 데이터에 활성 구분 기호가 포함된 경우 TOON은 해당 특정 값을 인용합니다.

``yaml 항목[2]{sku,이름,수량}: A1, 위젯 이름, 2 B2,가젯 이름,1

키 접기: 곡선 평탄화

효율성에 중점을 둔 TOON의 또 다른 특징은 키 폴딩입니다. 깊게 중첩된 객체는 일반적으로 수평 공간과 토큰을 차지하는 들여쓰기의 "계단"을 생성합니다.

중간 객체에 형제가 없는 깊은 계층 구조가 있는 경우 TOON은 이를 점 표기법 경로로 축소할 수 있습니다.

다음을 작성하는 대신:

다음과 같이 작성할 수 있습니다.

``yaml 데이터: 메타데이터: 항목[2]: a,b

사양 v1.5부터 사용할 수 있는 이 기능은 줄 수와 들여쓰기 토큰을 크게 줄입니다. 중요한 것은 이것이 완전히 되돌릴 수 있다는 것입니다. 경로 확장이 활성화된 상태에서 데이터를 디코딩하면 심층 개체 계층 구조가 완벽하게 재구성됩니다.

``yaml data.metadata.items[2]: a,b

엄격함과 안전성

간결한 외관에도 불구하고 TOON은 데이터에 느슨하지 않습니다. 인용 및 이스케이프에 대한 엄격한 규칙 세트를 준수합니다.

문자열은 일반적으로 인용되지 않은 상태로 유지되므로 가독성이 좋습니다. 그러나 TOON은 데이터 무결성을 보장하기 위해 극단적인 경우에 대한 인용을 시행합니다. 문자열이 숫자처럼 보이면(예: "05" 또는 "1e-6") 숫자로 구문 분석되는 것을 방지하기 위해 따옴표로 묶입니다. 문자열이 true 또는 null과 같은 예약어인 경우 인용됩니다.

또한 TOON은 숫자를 정규화합니다. 출력에 과학적 표기법이나 후행 0이 없는 표준 십진수 형식을 내보내 일관성을 보장합니다. BigInt도 안전하게 처리합니다. 숫자가 안전한 정수 범위를 초과하면 전송 중 정밀도 손실을 방지하기 위해 문자열로 직렬화됩니다.

루트 형태

우리 대부분은 루트 개체로 작업하지만 TOON은 유연합니다. 문서는 키-값 쌍으로 시작할 필요가 없습니다. 루트 배열([N]:으로 즉시 시작) 또는 단일 루트 프리미티브도 지원합니다. JSON과의 이러한 패리티는 반대편에 파서가 있는 경우 TOON을 현재 JSON이 사용되는 거의 모든 파이프라인으로 교체할 수 있음을 의미합니다.

최종 생각

TOON은 단순한 '또 다른 형식'이 아닙니다. 이는 결정론적 코드만큼이나 확률론적 모델에서도 데이터가 소비되는 시대에 특화된 도구입니다. JSON의 엄격한 데이터 모델과 CSV의 밀도 및 YAML의 가독성을 결합하여 유형 안전성을 희생하지 않고 컨텍스트 창 최적화의 특정 문제를 해결합니다.

에이전트를 구축하거나 모델을 미세 조정 중이거나 끝없는 닫는 중괄호를 스크롤하는 데 지쳤다면 이제 TOON을 살펴볼 시간입니다.