TOON là gì?
Tất cả chúng tôi đã ở đó. Bạn đang thiết kế lời nhắc cho Mô hình ngôn ngữ lớn (LLM) và bạn cần truyền dữ liệu có cấu trúc. Bạn tiếp cận JSON. Rốt cuộc thì đó là tiêu chuẩn của ngành. Nhưng khi bạn nhìn thấy cửa sổ ngữ cảnh của mình tràn ngập các dấu ngoặc nhọn vô tận, các phím lặp lại và dấu ngoặc kép xung quanh các số nguyên đơn giản, bạn bắt đầu tự hỏi: Có cách nào tốt hơn không?
YAML cung cấp khả năng đọc nhưng có sự mơ hồ. CSV dày đặc nhưng thiếu thứ bậc.
Nhập TOON.
TOON là một định dạng tuần tự hóa dữ liệu mang lại cảm giác như một luồng gió mới cho các nhà phát triển và là ngôn ngữ bản địa cho các mô hình AI. Nó thu hẹp khoảng cách giữa khả năng đọc của con người và hiệu quả của máy. Hôm nay, chúng ta hãy đi sâu vào cú pháp và cơ chế của TOON để hiểu lý do tại sao nó nhanh chóng trở thành phương tiện trao đổi dữ liệu hiệu quả cao được yêu thích.
Triết lý: Ngữ nghĩa JSON, Thẩm mỹ YAML
Về cốt lõi, TOON chia sẻ mô hình dữ liệu giống hệt như JSON. Nếu bạn có thể biểu diễn nó bằng JSON—các giá trị nguyên thủy (chuỗi, số, boolean, null), đối tượng và mảng—bạn có thể biểu diễn nó bằng TOON. Tuy nhiên, cách trình bày lại hoàn toàn khác.
TOON bỏ niềng răng. Nó sử dụng thụt lề để thể hiện thứ bậc, giống như YAML. Một đối tượng đơn giản trông sạch sẽ và dễ tiếp cận:
Tuy nhiên, không giống như YAML, TOON nghiêm ngặt về loại. Không thể đoán được no có nghĩa là false hay chuỗi "no". Trong TOON, các chuỗi chỉ yêu cầu dấu ngoặc kép khi thực sự cần thiết—chẳng hạn như khi chúng chứa các ký tự đặc biệt, giống với số hoặc trống. Nếu bạn gõ tin nhắn: Hello World, bạn sẽ nhận được một chuỗi. Nếu bạn gõ count: 42, bạn sẽ nhận được một số.
mã số: 123
tên: Ada
hoạt động: đúng
Sức mạnh của mảng: Độ dài và bảng
Điểm TOON thực sự tách biệt khỏi gói là khả năng xử lý mảng. Đây là "tính năng tuyệt vời" để tối ưu hóa mã thông báo.
Mỗi mảng trong TOON đều khai báo rõ ràng độ dài của nó trong ngoặc, như items[3]. Điều này có vẻ dư thừa đối với con người, nhưng đối với LLM, nó là một siêu năng lực. Nó cho phép mô hình xác nhận cấu trúc ngay lập tức và phát hiện việc cắt bớt. Nếu luồng bị cắt sau hai mục nhưng tiêu đề lại hứa hẹn ba mục thì trình phân tích cú pháp sẽ biết đã xảy ra lỗi.
TOON cung cấp ba cách hiệu quả để xử lý mảng, tự động chọn cách hiệu quả nhất:
- Nguyên thủy nội tuyến: Đối với các danh sách số hoặc chuỗi đơn giản, TOON giữ cho nó nhỏ gọn.
tags[3]: quản trị viên,ops,dev
- Danh sách tiêu chuẩn: Đối với các loại hỗn hợp, nó sử dụng cú pháp danh sách có dấu gạch nối tương tự như YAML.
- Đối tượng dạng bảng: Đây là yếu tố thay đổi cuộc chơi.
Nếu bạn có một mảng đối tượng có chung khóa—một mẫu rất phổ biến trong bản ghi cơ sở dữ liệu—TOON sẽ chuyển sang Định dạng bảng. thay vì lặp lại các khóa cho mỗi hàng, nó khai báo các khóa một lần trong tiêu đề.
Trong ví dụ trên, users[2]{id,name,role}: cho chúng ta biết chúng ta có 2 hàng và xác định lược đồ. Dữ liệu theo cấu trúc giống như CSV. Điều này giúp loại bỏ chi phí sử dụng mã thông báo lớn khi lặp lại "id":, "name": và "role": cho mọi người dùng.
người dùng[2]{id,name,role}:
1,Alice quản trị viên,quản trị viên
2,Bob Smith,người dùng
Dấu phân cách và hiệu quả của mã thông báo
Bạn có thể nhận thấy việc sử dụng dấu phẩy trong các ví dụ trên. TOON thực sự hỗ trợ ba dấu phân cách: dấu phẩy (mặc định), tab và dấu dẫn (|).
Tại sao điều này lại quan trọng? Token hóa.
Trong nhiều mã thông báo LLM, dấu phẩy theo sau là dấu ngoặc kép có thể được chia thành nhiều mã thông báo. Tuy nhiên, một ký tự tab thường được mã hóa rất rõ ràng. TOON cho phép bạn chuyển đổi các dấu phân cách ở cấp tiêu đề mảng. Nếu sử dụng dấu phân cách tab, bạn thậm chí thường không cần trích dẫn các chuỗi chứa dấu cách, điều này sẽ khiến dữ liệu của bạn bị nén thêm.
Định dạng này đủ thông minh để xử lý "va chạm". Nếu dữ liệu của bạn chứa dấu phân cách hoạt động, TOON chỉ trích dẫn giá trị cụ thể đó.
item[2]{sku,name,qty}:
A1, Tên tiện ích, 2
B2,Tên tiện ích,1
Gập phím: Làm phẳng đường cong
Một tính năng khác làm nổi bật sự tập trung vào tính hiệu quả của TOON là Gấp chìa khóa. Các đối tượng được lồng sâu thường tạo ra một "cầu thang" thụt vào chiếm hết không gian theo chiều ngang và các mã thông báo.
Nếu bạn có hệ thống phân cấp sâu trong đó các đối tượng trung gian không có anh chị em, TOON có thể thu gọn chúng thành đường dẫn ký hiệu dấu chấm.
Thay vì viết:
Bạn có thể viết:
dữ liệu:
siêu dữ liệu:
mục[2]: a,b
Tính năng này, có sẵn kể từ thông số kỹ thuật v1.5, làm giảm đáng kể số lượng dòng và mã thông báo thụt lề. Điều quan trọng là điều này hoàn toàn có thể đảo ngược. Khi bạn giải mã dữ liệu có bật tính năng mở rộng đường dẫn, nó sẽ xây dựng lại hệ thống phân cấp đối tượng sâu một cách hoàn hảo.
data.metadata.items[2]: a,b
Tính nghiêm ngặt và an toàn
Mặc dù có vẻ ngoài ngắn gọn nhưng TOON không hề thiếu dữ liệu. Nó tuân thủ một bộ quy tắc nghiêm ngặt để trích dẫn và thoát.
Các chuỗi thường không được trích dẫn, điều này rất tốt cho khả năng đọc. Tuy nhiên, TOON thực thi trích dẫn đối với các trường hợp đặc biệt để đảm bảo tính toàn vẹn dữ liệu. Nếu một chuỗi trông giống như một số (ví dụ: "05" hoặc "1e-6"), thì chuỗi đó sẽ được trích dẫn để ngăn việc phân tích cú pháp thành một số. Nếu một chuỗi là một từ dành riêng như true hoặc null, thì chuỗi đó sẽ được trích dẫn.
Hơn nữa, TOON bình thường hóa các con số. Nó phát ra các dạng thập phân chuẩn—không có ký hiệu khoa học hoặc các số 0 ở cuối trong đầu ra—đảm bảo tính nhất quán. Nó thậm chí còn xử lý BigInt một cách an toàn; nếu một số vượt quá phạm vi số nguyên an toàn, nó sẽ được tuần tự hóa dưới dạng một chuỗi để tránh mất độ chính xác trong quá trình vận chuyển.
Biểu mẫu gốc
Trong khi hầu hết chúng ta làm việc với Root Objects thì TOON lại linh hoạt. Tài liệu không nhất thiết phải bắt đầu bằng cặp khóa-giá trị. Nó hỗ trợ Mảng gốc (bắt đầu ngay lập tức bằng [N]:) hoặc thậm chí là một Root Primitive duy nhất. Tính chẵn lẻ này với JSON có nghĩa là bạn có thể hoán đổi TOON thành hầu hết mọi đường dẫn hiện đang sử dụng JSON, miễn là bạn có trình phân tích cú pháp ở đầu bên kia.
Suy nghĩ cuối cùng
TOON không chỉ là "định dạng khác". Nó là một công cụ chuyên dụng cho thời đại mà dữ liệu được sử dụng bởi các mô hình xác suất thường xuyên như mã xác định. Bằng cách kết hợp mô hình dữ liệu cứng nhắc của JSON với mật độ CSV và khả năng đọc của YAML, nó giải quyết được vấn đề cụ thể về tối ưu hóa cửa sổ ngữ cảnh mà không ảnh hưởng đến độ an toàn của loại.
Nếu bạn đang xây dựng tác nhân, tinh chỉnh mô hình hoặc cảm thấy mệt mỏi khi phải cuộn qua vô số dấu ngoặc đóng, thì đã đến lúc bạn nên xem qua TOON.