
Structured output đang trở thành tính năng quan trọng nhất khi tích hợp LLM vào ứng dụng thực tế. Thay vì để model trả về văn bản tự do rồi tự bốc thuốc parse JSON bằng regex, structured output ép model tuân theo JSON schema đã khai báo từ trước, giúp code tích hợp chắc chắn và giảm lỗi runtime. Bài viết này sẽ giải thích structured output là gì, các cách triển khai phổ biến và lúc nào nên dùng cách nào.

Structured Output là gì?
Structured output (đầu ra có cấu trúc) là cơ chế ràng buộc LLM chỉ sinh ra dữ liệu đúng định dạng đã khai báo, thường là JSON theo một JSON schema cụ thể. Khác với cách prompt “hãy trả về JSON” thông thường — vốn vẫn có thể sinh markdown, text thừa hoặc JSON sai kiểu dữ liệu — structured output đảm bảo hợp lệ ở tầng sinh token, không phải ở tầng hậu xử lý.
Lợi ích rõ ràng: không cần viết code sửa lỗi JSON lặt vặt, không phải retry khi model sai định dạng, schema là điểm kiểm tra rõ ràng giữa prompt và lời gọi API. Với ứng dụng production, đây là khác biệt giữa bản demo chạy được và hệ thống vận hành ổn định.
Ba cách tiếp cận chính
Hiện có ba hướng triển khai structured output phổ biến, mỗi hướng có mức đảm bảo khác nhau:
| Cách tiếp cận | Cơ chế | Đảm bảo hợp lệ |
|---|---|---|
| JSON Mode | Prompt yêu cầu JSON + model cố gắng trả JSON | Thấp, có thể sai schema |
| Structured Outputs / response_format | Khai báo JSON schema trong API, model tôn trọng schema | Cao, theo schema chặt chẽ |
| Function Calling / Tool Use | Model chọn gọi hàm với tham số đúng định dạng khai báo | Cao, kèm luôn ngữ nghĩa hành động |
OpenAI cung cấp Structured Outputs qua tham số response_format kết hợp với cấu hình JSON schema trên tài liệu chính thức. Khi bật, model chỉ sinh token hợp lệ với schema, kể cả các ràng buộc như enum, kiểu lồng nhau hay danh sách phần tử. Anthropic đi theo hướng tool use: định nghĩa hàm với tham số JSON schema, model tự quyết định gọi hàm nào và sinh tham số đúng cấu trúc — phù hợp với agent có nhiều hành động thực tế.
Constrained decoding cho model nguồn mở
Với model chạy local, cách tiếp cận gọi là constrained decoding: trong lúc sinh token, hệ thống tính toán và cấm mọi token khiến output lệch khỏi grammar đã khai báo, nên kết quả luôn hợp lệ về mặt cú pháp. Các framework phổ biến:
- Outlines — thư viện Python dùng với mọi model, hỗ trợ JSON schema, regex và grammar. Xem tài liệu Outlines.
- vLLM — serving engine thông lượng cao, tích hợp backend xgrammar và guidance để sinh output có cấu trúc trong tham số
structured_outputs. Xem hướng dẫn vLLM. - llama.cpp — dùng GBNF grammar file để ràng buộc token ở tầng C++ thuần, chạy được trên cả CPU yếu.

Điểm mạnh của hướng này là minh bạch, không phụ thuộc vendor và không tốn phí API; nhược điểm là phải tự vận hành hạ tầng và grammar không hiểu ngữ nghĩa, chỉ đảm bảo cú pháp.
Use case thực tế
Structured output xuất hiện ở khắp nơi trong ứng dụng AI hiện đại:
- Trích xuất dữ liệu — đọc hóa đơn, hợp đồng, email rồi trả về các field chuẩn hóa.
- Phân loại — sentiment, spam, gán topic phải nằm trong danh sách enum cố định.
- Agent gọi công cụ — model quyết định gọi tool với tham số đúng kiểu, nền tảng của mọi agent tự động hóa.
- Trả dữ liệu cho UI — frontend render trực tiếp JSON từ API LLM mà không cần lớp chuyển đổi.
Chọn cách nào?
Nếu dùng API đám mây và cần độ chắc chắn cao, Structured Outputs hoặc tool use là lựa chọn đúng vì nhà cung cấp lo phần ràng buộc token. Nếu chạy model nguồn mở, cần kiểm soát hạ tầng hoặc muốn tránh khóa vendor, constrained decoding với Outlines hoặc vLLM là con đường hợp lý. JSON Mode đơn giản chỉ phù hợp cho prototype, nơi sai format không gây hậu quả.
Kết luận
Structured output không còn là tùy chọn nâng cao mà là yêu cầu cơ bản khi đưa LLM vào production. Từ JSON schema khai báo trong API đám mây đến grammar ràng buộc token trên model local, mọi hướng đều hội tụ ở một mục tiêu: output phải đúng cấu trúc ngay từ lần sinh đầu tiên. Bắt đầu từ bài toán nhỏ như trích xuất dữ liệu, sau đó mở rộng dần sang agent phức tạp — nền tảng structured output sẽ giúp bạn tránh được lớp bùa chú sửa lỗi JSON tốn thời gian nhất.
Nguồn tham khảo: OpenAI Structured Outputs · Anthropic Tool Use · vLLM Structured Outputs
