- Token-Oriented Object Notation
- ฟอร์แมตการซีเรียลไลซ์ที่ออกแบบมาเพื่อลดการใช้โทเค็น เมื่อนำข้อมูลเข้า LLM
- แสดงข้อมูล JSON ได้โดยไม่สูญเสียข้อมูล พร้อมคงทั้ง ประสิทธิภาพด้านโทเค็นและความอ่านง่าย
- โครงสร้างที่เหมาะกับ อาร์เรย์ของอ็อบเจ็กต์ที่มีรูปแบบสม่ำเสมอ โดยตัดคีย์ที่ซ้ำกันออก จึงช่วย ลดโทเค็นได้ 30~60%
- เป็น ฟอร์แมตไฮบริด ที่ผสานโครงสร้างแบบย่อหน้าด้วยการเยื้องของ YAML เข้ากับรูปแบบตารางของ CSV
- หากเป็นข้อมูลที่มีโครงสร้างซ้อนลึกหรือไม่สม่ำเสมอ JSON จะมีประสิทธิภาพมากกว่า
- มี ข้อมูลโครงสร้างแบบชัดเจน ทำให้ LLM สามารถ พาร์สและตรวจสอบข้อมูลได้อย่างเสถียร
- ระบุความยาวอาร์เรย์ (
[N]) และคำจำกัดความของฟิลด์ ({id,name,role}) อย่างชัดเจน เพื่อช่วยให้รับรู้โครงสร้างได้ดีขึ้น
- ออกแบบเป็น ไวยากรณ์แบบย่อ ที่ตัดวงเล็บ เครื่องหมายอัญประกาศ และเครื่องหมายวรรคตอนที่ไม่จำเป็นออก
- รองรับการแสดงลำดับชั้นด้วยการเยื้อง และสตรีมข้อมูลแบบรายแถวคล้าย CSV
- รองรับ การแปลงสองทางระหว่าง JSON ↔ TOON ผ่าน เครื่องมือ CLI
- มีตัวเลือกอย่างการตรวจจับฟอร์แมตอัตโนมัติ การกำหนดตัวคั่น(
,, \t, |) และการแสดงสถิติการประหยัดโทเค็น
- องค์ประกอบของ API
- ใช้
encode() สำหรับซีเรียลไลซ์ JSON และ decode() สำหรับดีซีเรียลไลซ์กลับ
- สามารถกำหนดการเยื้อง ตัวคั่น และตัวบ่งชี้ความยาว (
#) ได้ผ่านออปชัน
- ผลการเบนช์มาร์ก แสดงว่าช่วยลดโทเค็นได้เฉลี่ย 21~60% เมื่อเทียบกับ JSON และมีความแม่นยำในการคิวรีกับ LLM 73.9%
- แม้จะมีขนาดใหญ่กว่า CSV เล็กน้อย แต่มีฟังก์ชันตรวจสอบเชิงโครงสร้างที่ช่วย เพิ่มความน่าเชื่อถือของ LLM
- กฎของรูปแบบ
- สตริงจะใส่เครื่องหมายอัญประกาศเฉพาะเมื่อจำเป็น และหากมีตัวคั่นรวมอยู่ด้วยจะใส่อัญประกาศให้อัตโนมัติ
- ตัวเลข บูลีน วันที่ ฯลฯ จะถูกแปลงให้อยู่ในรูปแบบที่เป็นมิตรกับ LLM
- มี อิมพลีเมนเทชันหลายภาษา
- ทางการ: Python, Rust (อยู่ระหว่างพัฒนา)
- คอมมูนิตี้: Go, Java, Swift, C++, .NET, Ruby เป็นต้น
3 ความคิดเห็น
กำลังใช้ function calling อยู่เหมือนกัน เดี๋ยวต้องลองทดสอบดูครับ
จากตัวอย่างบางส่วน ดูเหมือนว่าเมื่อเอาช่องว่างออกแล้ว มาตรฐาน JSON จะช่วยลดจำนวนโทเคนได้มากกว่ามากครับ.. ตอนนี้ก็ยังไม่ค่อยแน่ใจนักว่าเป็นฟอร์แมตที่น่าเอาไปใช้งานจริงจังหรือเปล่า
เปรียบเทียบความแม่นยำแยกตามโมเดล
ถ้าเชื่อผลเบนช์มาร์กอย่างเดียว ก็ดูเหมือนว่าไม่มีเหตุผลที่จะไม่ใช้ เพราะมันลดการใช้ token ลงได้โดยที่ความแม่นยำไม่ลดลง