Cách sử dụng TOON với LLM

LLM
Kỹ thuật nhanh chóng

Nếu bạn đã từng dán một mảng JSON lớn vào ChatGPT hoặc Claude, bạn có thể cảm thấy khó chịu khi cửa sổ ngữ cảnh đóng lại. JSON rất tuyệt vời đối với các API web, nhưng đối với Mô hình ngôn ngữ lớn (LLM), điều đó cực kỳ lãng phí. Việc lặp lại các tên trường như "id":, "name":"timestamp": cho mỗi bản ghi không chỉ là dư thừa; nó đốt cháy các token tiêu tốn tiền thật và không gian ngữ cảnh có giá trị.

Đây là nơi TOON (Ký hiệu đối tượng bảng) tỏa sáng. Nó không chỉ là một định dạng dữ liệu; đó là một chiến lược để tối ưu hóa các tương tác LLM. Bằng cách loại bỏ thuế cú pháp của JSON và thêm các tiêu đề cấu trúc rõ ràng, TOON cho phép bạn chuyển nhiều dữ liệu hơn đến các mô hình của mình và đổi lại nhận được kết quả đầu ra có cấu trúc đáng tin cậy hơn.

Kinh tế mã thông báo của TOON

Tại sao phải chuyển đổi định dạng? Toán học rất đơn giản. Trong một mảng đối tượng JSON tiêu chuẩn, lược đồ được lặp lại cho mỗi hàng. Nếu bạn có danh sách 50 người dùng, bạn sẽ phải trả tiền cho tên trường 50 lần.

TOON loại bỏ sự dư thừa này bằng cách khai báo lược đồ một lần trong tiêu đề. Dữ liệu theo sau ở định dạng dày đặc, được sắp xếp hợp lý. Trong thực tế, điều này thường giúp giảm 30-60% mức sử dụng mã thông báo cho các mảng thống nhất so với JSON được định dạng. Khi bạn đang xử lý các cửa sổ ngữ cảnh lớn hoặc các lệnh gọi API số lượng lớn, hiệu quả đó sẽ trực tiếp dẫn đến giảm chi phí và độ trễ thấp hơn.

Gửi dữ liệu: Quy tắc "Show, Don't Tell"

Khi bạn cần LLM để phân tích dữ liệu, chiến lược kịp thời của bạn là rất quan trọng. Người mới bắt đầu thường viết những đoạn văn dài giải thích định dạng dữ liệu. Với TOON, bạn không cần phải làm điều đó.

LLM là công cụ khớp mẫu. Họ hiểu TOON một cách trực quan vì nó trông giống như sự kết hợp giữa YAML và CSV—các định dạng mà họ đã thấy hàng tỷ lần trong quá trình đào tạo.

Để gửi dữ liệu, chỉ cần bọc nó trong một khối mã có rào chắn. Bạn có thể gắn nhãn nó là toon, nhưng ngay cả khi công cụ tô sáng cú pháp của mô hình không chính thức hỗ trợ nó, mô hình sẽ hiểu cấu trúc ngay lập tức.

Ví dụ đầu vào

Thay vì mô tả lược đồ, chỉ cần cung cấp khối:

Tiêu đề users[3]{id,name,role,lastLogin} cho mô hình biết mọi thứ nó cần biết: loại thực thể, số lượng (3 hàng) và thứ tự của các trường. Việc thụt lề xử lý hệ thống phân cấp. Tính chất "tự ghi tài liệu" này giải phóng lời nhắc của bạn để tập trung vào nhiệm vụ logic thực tế thay vì hướng dẫn phân tích cú pháp.

Đây là nhật ký hoạt động của người dùng. Dữ liệu ở định dạng TOON (thụt lề 2 dấu cách, tiêu đề rõ ràng). 

người dùng[3]{id,name,role,lastLogin}: 
1,Alice,quản trị viên,2025-01-15T10:30:00Z 
2,Bob,người dùng,2025-01-14T15:22:00Z 
3,Charlie,người dùng,2025-01-13T09:45:00Z 

Nhiệm vụ: Phân tích nhật ký và xác định người dùng nào chưa đăng nhập trong vòng 24 giờ qua. 

Tạo đầu ra đáng tin cậy

Việc nhận dữ liệu LLM để read thật dễ dàng; làm cho nó generate dữ liệu có cấu trúc hợp lệ là một phần khó khăn. Người mẫu thích tạo ảo giác, cắt bớt JSON hoặc quên đóng dấu ngoặc nhọn.

TOON thêm một lớp an toàn thông qua cú pháp tiêu đề của nó, cụ thể là số lượng [N]. Khi bạn yêu cầu một mô hình xuất TOON, bạn đang yêu cầu mô hình đó cam kết với một cấu trúc trước khi tạo dữ liệu.

Nhắc nhở thế hệ

Để có kết quả tốt nhất, hãy cung cấp định dạng tiêu đề mà bạn mong đợi và hướng dẫn mô hình điền vào các hàng.

Bằng cách yêu cầu mô hình tính toán [N], bạn buộc phải thực hiện một quy trình "chuỗi suy nghĩ" trong đó mô hình phải lập kế hoạch cho kích thước đầu ra. Ràng buộc có vẻ nhỏ này làm giảm đáng kể khả năng mô hình bị cắt bỏ giữa chừng trong danh sách.

Tác vụ: Trả về danh sách người dùng đang hoạt động với vai trò "người dùng". 
Định dạng: Sử dụng TOON. Đặt giá trị [N] trong tiêu đề để khớp với số hàng chính xác bạn tạo. 

Định dạng dự kiến: 
người dùng[N]{id,name,role,lastLogin}: 

Xác thực bằng Chế độ nghiêm ngặt

Khi nhận được phản hồi từ LLM, bạn không nên chỉ tin tưởng vào nó. Đây là lúc chế độ nghiêm ngặt của thư viện TOON trở thành siêu năng lực cho các ứng dụng sản xuất.

Nếu bạn đang sử dụng thư viện TypeScript, việc giải mã bằng chế độ nghiêm ngặt sẽ xác thực rằng các hàng được tạo khớp với số lượng tiêu đề:

Điều này cho phép bạn phát hiện ngay lập tức các kết quả đầu ra của mô hình "lười biếng" hoặc việc cắt bớt mạng thay vì phát hiện dữ liệu xấu ở hạ lưu trong ứng dụng của bạn.

nhập { giải mã } từ '@toon-format/toon'; 

thử { 
// Nếu mô hình nói [5] nhưng cung cấp 4 hàng thì sẽ báo lỗi. 
const data = giải mã(modelOutput, { strict: true }); 
console.log('Dữ liệu hợp lệ đã nhận:', data); 
} bắt (lỗi) { 
console.error('Đã phát hiện ảo giác hoặc cắt ngắn mô hình:', error.message); 
} 

Tối ưu hóa nâng cao: Thủ thuật tab

Nếu bạn bị ám ảnh bởi việc tối ưu hóa (và trong thế giới LLM, có lẽ bạn nên như vậy), bạn có thể đạt được hiệu quả cao hơn nữa bằng cách chọn dấu phân cách một cách khôn ngoan.

Dấu phẩy là tiêu chuẩn, nhưng các tab (\t) thường được biểu thị dưới dạng một mã thông báo duy nhất trong nhiều từ vựng về mã thông báo. Hơn nữa, các tab hiếm khi xuất hiện bên trong các trường văn bản tự nhiên, điều này làm giảm nhu cầu ký tự thoát (như gói chuỗi trong dấu ngoặc kép).

Bạn có thể mã hóa dữ liệu của mình bằng các tab trước khi gửi dữ liệu đến mô hình:

Chỉ cần nhớ thông báo cho mô hình trong lời nhắc: "Dữ liệu được phân tách bằng tab TOON." Điều này tạo ra một biểu diễn siêu nhỏ gọn mà mô hình có thể phân tích và tạo cực kỳ dễ dàng.

const toonPrompt = mã hóa(dữ liệu, { dấu phân cách: '\t' }); 

Ví dụ về quy trình làm việc hoàn chỉnh

Hãy xem xét một tình huống thực tế: lọc nhật ký hệ thống. Bạn muốn gửi nhật ký thô đến mô hình và nhận lại danh sách lỗi có cấu trúc.

Lời nhắc:

Đầu ra mô hình:

Nhật ký hệ thống ở định dạng TOON (được phân tách bằng tab): 

sự kiện[4]{id,level,message,timestamp}: 
1,lỗi,Hết thời gian kết nối,2025-01-15T10:00:00Z 
2,cảnh báo,Truy vấn chậm,2025-01-15T10:05:00Z 
3,thông tin,Người dùng đăng nhập,2025-01-15T10:10:00Z 
4,lỗi,Lỗi cơ sở dữ liệu025-01-15T10:15:00Z 

Nhiệm vụ: Trích xuất tất cả các sự kiện có cấp độ 'lỗi'. Trả về kết quả là TOON hợp lệ với số lượng tiêu đề được cập nhật. 

Kết quả:

sự kiện[2]{id,level,message,timestamp}: 
1,lỗi,Hết thời gian kết nối,2025-01-15T10:00:00Z 
4,lỗi,Lỗi cơ sở dữ liệu,2025-01-15T10:15:00Z 

Mô hình đã lọc chính xác danh sách và quan trọng là đã cập nhật tiêu đề thành events[2]. Bằng cách giải mã phản hồi này, bạn sẽ có được một mảng sạch, an toàn kiểu sẵn sàng cho logic ứng dụng của mình.

Bản tóm tắt

TOON 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. Nó tôn trọng các hạn chế về chi phí của LLM trong khi cung cấp cấu trúc cần thiết để phát triển phần mềm mạnh mẽ.

  1. Giữ kích thước nhỏ: Sử dụng 2-5 hàng trong ví dụ của bạn; mô hình sẽ khái quát hóa.
  1. Hãy rõ ràng: Xác định các tiêu đề rõ ràng để mô hình biết lược đồ.
  1. Xác thực nghiêm ngặt: Sử dụng siêu dữ liệu của định dạng để phát hiện lỗi phát sinh.

Bằng cách loại bỏ JSON cho tải trọng nhanh chóng, bạn không chỉ tiết kiệm mã thông báo mà còn đang xây dựng một quy trình AI đáng tin cậy hơn.