ตูนคืออะไร?
เราทุกคนเคยไปที่นั่น คุณกำลังออกแบบพรอมต์สำหรับ 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 นำเสนอสามวิธีในการจัดการอาร์เรย์อย่างมีประสิทธิภาพ โดยเลือกวิธีที่มีประสิทธิภาพสูงสุดโดยอัตโนมัติ:
- Inline Primitives: สำหรับรายการตัวเลขหรือสตริงอย่างง่าย TOON จะทำให้มันกะทัดรัด
แท็ก[3]: ผู้ดูแลระบบ,ปฏิบัติการ,dev
- รายการมาตรฐาน: สำหรับประเภทผสม จะใช้ไวยากรณ์รายการแบบยัติภังค์คล้ายกับ YAML
- วัตถุแบบตาราง: นี่คือตัวเปลี่ยนเกม
หากคุณมีอาร์เรย์ของออบเจ็กต์ที่ใช้คีย์เดียวกัน ซึ่งเป็นรูปแบบทั่วไปในบันทึกฐานข้อมูล 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 ดู