ตูนคืออะไร?

ตูน
เจสัน
การเพิ่มประสิทธิภาพ

เราทุกคนเคยไปที่นั่น คุณกำลังออกแบบพรอมต์สำหรับ Large Language Model (LLM) และคุณต้องส่งผ่านข้อมูลที่มีโครงสร้าง คุณเข้าถึง JSON มันเป็นมาตรฐานอุตสาหกรรมเลย แต่เมื่อคุณดูหน้าต่างบริบทเต็มไปด้วยวงเล็บปีกกาไม่มีที่สิ้นสุด คีย์ซ้ำๆ และเครื่องหมายคำพูดรอบจำนวนเต็มธรรมดา คุณเริ่มสงสัยว่า: มีวิธีที่ดีกว่านี้ไหม

YAML นำเสนอให้อ่านง่ายแต่ประสบปัญหาความคลุมเครือ CSV มีความหนาแน่นแต่ขาดลำดับชั้น

ป้อน ตูน

TOON เป็นรูปแบบการจัดลำดับข้อมูลที่ให้ความรู้สึกเหมือนได้สูดอากาศบริสุทธิ์สำหรับนักพัฒนาและเป็นภาษาท้องถิ่นสำหรับโมเดล AI มันเชื่อมช่องว่างระหว่างความสามารถในการอ่านของมนุษย์และประสิทธิภาพของเครื่องจักร วันนี้ เราจะมาเจาะลึกเกี่ยวกับไวยากรณ์และกลไกของ TOON เพื่อทำความเข้าใจว่าเหตุใด TOON จึงกลายเป็นที่ชื่นชอบอย่างรวดเร็วสำหรับการแลกเปลี่ยนข้อมูลที่มีประสิทธิภาพสูง

ปรัชญา: ความหมาย JSON, YAML Aesthetics

โดยที่แกนหลัก TOON แบ่งปันโมเดลข้อมูลเดียวกันกับ JSON หากคุณสามารถแสดงมันในรูปแบบ JSON—พื้นฐาน (สตริง, ตัวเลข, บูลีน, null), อ็อบเจ็กต์ และอาร์เรย์— คุณสามารถแสดงมันใน TOON อย่างไรก็ตาม การนำเสนอแตกต่างอย่างสิ้นเชิง

TOON ทิ้งเหล็กจัดฟัน ใช้การเยื้องเพื่อแสดงลำดับชั้น เช่นเดียวกับ YAML วัตถุที่เรียบง่ายดูสะอาดตาและเข้าถึงได้:

อย่างไรก็ตาม TOON นั้นต่างจาก YAML ตรงที่เคร่งครัดเกี่ยวกับประเภทต่างๆ ไม่มีการคาดเดาว่า 'no' หมายถึง 'false' หรือสตริงที่ 'no' ใน TOON สตริงต้องการเครื่องหมายคำพูดเมื่อจำเป็นจริงๆ เท่านั้น เช่น เมื่อมีอักขระพิเศษ มีลักษณะคล้ายตัวเลข หรือว่างเปล่า หากคุณพิมพ์ ข้อความ: สวัสดีชาวโลก คุณจะได้รับสตริง หากคุณพิมพ์ count: 42 คุณจะได้รับตัวเลข

รหัส: 123 
ชื่อ: เอด้า 
ใช้งานอยู่: จริง 
-

พลังของอาร์เรย์: ความยาวและตาราง

ที่ TOON แยกตัวเองออกจากแพ็คอย่างแท้จริงคือการจัดการอาร์เรย์ นี่คือ "คุณลักษณะนักฆ่า" สำหรับการเพิ่มประสิทธิภาพโทเค็น

ทุกอาร์เรย์ใน TOON จะประกาศความยาวอย่างชัดเจนในวงเล็บ เช่น items[3] สิ่งนี้อาจดูซ้ำซ้อนสำหรับมนุษย์ แต่สำหรับ LLM มันเป็นมหาอำนาจ ช่วยให้โมเดลตรวจสอบโครงสร้างได้ทันทีและตรวจจับการตัดทอน หากกระแสข้อมูลถูกตัดออกหลังจากสองรายการ แต่ส่วนหัวสัญญาไว้สามรายการ โปรแกรมแยกวิเคราะห์จะรู้ว่ามีบางอย่างผิดปกติ

TOON นำเสนอสามวิธีในการจัดการอาร์เรย์อย่างมีประสิทธิภาพ โดยเลือกวิธีที่มีประสิทธิภาพสูงสุดโดยอัตโนมัติ:

  1. Inline Primitives: สำหรับรายการตัวเลขหรือสตริงอย่างง่าย TOON จะทำให้มันกะทัดรัด แท็ก[3]: ผู้ดูแลระบบ,ปฏิบัติการ,dev
  1. รายการมาตรฐาน: สำหรับประเภทผสม จะใช้ไวยากรณ์รายการแบบยัติภังค์คล้ายกับ YAML
  1. วัตถุแบบตาราง: นี่คือตัวเปลี่ยนเกม

หากคุณมีอาร์เรย์ของออบเจ็กต์ที่ใช้คีย์เดียวกัน ซึ่งเป็นรูปแบบทั่วไปในบันทึกฐานข้อมูล TOON จะหมุนไปเป็น รูปแบบตาราง แทนที่จะทำซ้ำคีย์สำหรับทุกแถว จะประกาศคีย์หนึ่งครั้งในส่วนหัว

ในตัวอย่างด้านบน users[2]{id,name,role}: บอกเราว่าเรามี 2 แถวและกำหนดสคีมา ข้อมูลจะตามมาในโครงสร้างคล้าย CSV วิธีนี้จะช่วยลดค่าใช้จ่ายโทเค็นจำนวนมากในการทำซ้ำ "id":, "name": และ "role": สำหรับผู้ใช้ทุกคน

ผู้ใช้[2]{id,ชื่อ,บทบาท}: 
1, ผู้ดูแลระบบอลิซ, ผู้ดูแลระบบ 
2,บ็อบ สมิธ,ผู้ใช้ 
-

ตัวคั่นและประสิทธิภาพของโทเค็น

คุณอาจสังเกตเห็นการใช้เครื่องหมายจุลภาคในตัวอย่างด้านบน TOON รองรับตัวคั่นสามตัวจริงๆ ได้แก่ จุลภาค (ค่าเริ่มต้น) แท็บ และไปป์ (|)

ทำไมเรื่องนี้ถึงสำคัญ? โทเค็น

ในโทเค็น LLM จำนวนมาก เครื่องหมายจุลภาคที่ตามด้วยเครื่องหมายคำพูดอาจถูกแบ่งออกเป็นโทเค็นหลายรายการ อย่างไรก็ตาม อักขระแท็บมักจะสร้างโทเค็นได้อย่างหมดจด TOON ช่วยให้คุณสามารถสลับตัวคั่นที่ระดับส่วนหัวของอาร์เรย์ หากคุณใช้ตัวคั่นแท็บ คุณไม่จำเป็นต้องอ้างอิงสตริงที่มีการเว้นวรรคด้วยซ้ำ เพื่อบีบอัดข้อมูลของคุณเพิ่มเติม

รูปแบบนี้ฉลาดพอที่จะรองรับ "การชนกัน" หากข้อมูลของคุณมีตัวคั่นที่ใช้งานอยู่ TOON จะเสนอราคาตามค่าเฉพาะนั้น

รายการ[2]{sku,ชื่อ,จำนวน}: 
A1,ชื่อวิดเจ็ต,2 
B2,ชื่ออุปกรณ์,1 
-

การพับกุญแจ: ทำให้เส้นโค้งเรียบขึ้น

คุณสมบัติอีกอย่างที่เน้นย้ำถึงการมุ่งเน้นประสิทธิภาพของ TOON ก็คือ การพับกุญแจ วัตถุที่ซ้อนกันลึกมักส่งผลให้เกิด "บันได" ของการเยื้องที่กินพื้นที่แนวนอนและโทเค็น

หากคุณมีลำดับชั้นที่ลึกซึ่งวัตถุที่อยู่ตรงกลางไม่มีพี่น้องกัน TOON สามารถยุบวัตถุเหล่านั้นให้เป็นเส้นทางที่มีเครื่องหมายจุดได้

แทนที่จะเขียน:

คุณสามารถเขียน:

ข้อมูล: 
ข้อมูลเมตา: 
รายการ[2]: ก,ข 
-

คุณลักษณะนี้มีให้ใช้งานตั้งแต่ข้อมูลจำเพาะเวอร์ชัน 1.5 ช่วยลดจำนวนบรรทัดและโทเค็นการเยื้องลงอย่างมาก ที่สำคัญสามารถพลิกกลับได้เต็มที่ เมื่อคุณถอดรหัสข้อมูลโดยเปิดใช้งานการขยายเส้นทาง ระบบจะสร้างลำดับชั้นของออบเจ็กต์ระดับลึกขึ้นใหม่อย่างสมบูรณ์

data.metadata.items[2]: ก,ข 
-

ความเข้มงวดและความปลอดภัย

แม้จะมีรูปลักษณ์ที่กระชับ แต่ TOON ก็ไม่สูญเสียข้อมูล เป็นไปตามชุดกฎที่เข้มงวดสำหรับการอ้างอิงและการหลบหนี

โดยทั่วไปสตริงจะไม่มีเครื่องหมายคำพูด ซึ่งเหมาะสำหรับการอ่าน อย่างไรก็ตาม TOON บังคับใช้การเสนอราคาสำหรับกรณี Edge เพื่อรับรองความสมบูรณ์ของข้อมูล หากสตริงดูเหมือนตัวเลข (เช่น "05" หรือ "1e-6") สตริงนั้นจะถูกยกมาเพื่อป้องกันไม่ให้แยกวิเคราะห์เป็นตัวเลข หากสตริงเป็นคำสงวน เช่น 'จริง' หรือ 'null' คำนั้นจะถูกยกมา

นอกจากนี้ TOON ยังทำให้ตัวเลขเป็นมาตรฐานอีกด้วย โดยปล่อยรูปแบบทศนิยมตามรูปแบบบัญญัติ—ไม่มีสัญลักษณ์ทางวิทยาศาสตร์หรือเลขศูนย์ต่อท้ายในเอาต์พุต—รับประกันความสม่ำเสมอ มันยังจัดการ BigInt ได้อย่างปลอดภัยอีกด้วย หากตัวเลขเกินช่วงจำนวนเต็มที่ปลอดภัย ตัวเลขนั้นจะถูกซีเรียลไลซ์เป็นสตริงเพื่อป้องกันการสูญเสียความแม่นยำระหว่างการขนส่ง

แบบฟอร์มรูท

ในขณะที่พวกเราส่วนใหญ่ทำงานกับ Root Objects แต่ TOON ก็มีความยืดหยุ่น เอกสารไม่จำเป็นต้องเริ่มต้นด้วยคู่คีย์-ค่า รองรับ Root Arrays (เริ่มต้นทันทีด้วย [N]:) หรือแม้แต่ Root Primitive ตัวเดียว ความเท่าเทียมกันกับ JSON นี้หมายความว่าคุณสามารถสลับ TOON เป็นไปป์ไลน์ใดๆ ก็ตามที่มีการใช้ JSON อยู่ในปัจจุบัน โดยที่คุณมี parser ที่ปลายอีกด้านหนึ่ง

ความคิดสุดท้าย

TOON ไม่ใช่แค่ "รูปแบบอื่น" มันเป็นเครื่องมือเฉพาะสำหรับยุคที่ข้อมูลถูกใช้โดยแบบจำลองความน่าจะเป็นบ่อยพอๆ กับที่เป็นด้วยโค้ดที่กำหนด ด้วยการรวมโมเดลข้อมูลที่เข้มงวดของ JSON เข้ากับความหนาแน่นของ CSV และความสามารถในการอ่านของ YAML จะช่วยแก้ปัญหาเฉพาะของการเพิ่มประสิทธิภาพหน้าต่างบริบทโดยไม่กระทบต่อความปลอดภัยของประเภท

หากคุณกำลังสร้างเอเย่นต์ ปรับแต่งโมเดลอย่างละเอียด หรือเพียงแค่เบื่อกับการเลื่อนดูวงเล็บปิดแบบไม่มีที่สิ้นสุด ถึงเวลาที่จะให้ TOON ดู