Structured Output Trong LLM: JSON Mode, Function Calling Và Cách Nhận Dữ Liệu Đáng Tin Cậy

Structured Output Trong LLM: JSON Mode, Function Calling Và Cách Nhận Dữ Liệu Đáng Tin Cậy

Sơ đồ pipeline LLM Structured Output: Text Prompt → LLM → Structured JSON → Code Processing → Application Logic

LLM sinh văn bản tự nhiên, nhưng trong production, ta thường cần output có cấu trúc cố định: JSON, database records, API calls. Structured Output là kỹ thuật buộc LLM output đúng schema đã định — không cần retry, không cần parse lại. Bài viết này phân tích các phương pháp từ đơn giản đến nâng cao, kèm so sánh chi tiết.

1. JSON Mode — Đảm Bảo JSON Hợp Lệ

OpenAI JSON mode (có từ GPT-3.5-turbo) yêu cầu model output đúng định dạng JSON bằng cách truyền response_format: {type: "json_object"}. Tuy nhiên, JSON mode chỉ đảm bảo output là JSON hợp lệ, KHÔNG đảm bảo dữ liệu đúng schema:

  • Thiếu trường bắt buộc (required fields bị bỏ)
  • Sai kiểu dữ liệu (string thay vì number)
  • Enum value không đúng
  • Cần thêm bước validate + retry

OpenAI khuyến nghị rõ ràng: “JSON mode đảm bảo output là JSON hợp lệ, Structured Outputs đảm bảo tuân theo schema.” Nói cách khác, JSON mode là bước đầu, Structured Outputs là giải pháp hoàn chỉnh.

2. Structured Outputs — Đảm Bảo Đúng Schema

Structured Outputs (OpenAI, từ GPT-4o trở đi) là bước tiến: API ép model output vừa đúng JSON vừa đúng schema (kiểu dữ liệu, trường bắt buộc, giá trị enum). Cú pháp:

  • response_format: {type: "json_schema", json_schema: {strict: true, schema: {...}}}
  • Đảm bảo output không cần validate lại — không cần retry cho schema violations
  • Model được hỗ trợ: GPT-4o, GPT-4o-mini, GPT-5.6+

Lợi ích chính theo tài liệu OpenAI:

  • Reliable type-safety: Không cần validate hoặc retry responses sai format
  • Explicit refusals: Model từ chối vì lý do an toàn được phát hiện chương trình được
  • Simpler prompting: Không cần prompts mạnh mẽ để đạt format nhất quán

3. Function Calling / Tool Use — Gọi External Function

Function Calling khác Structured Output ở một điểm quan trọng: model tự quyết định khi nào gọi function. Khi gọi, model tạo JSON đúng schema cho function parameters. Anthropic gọi đây là Tool Use, Google gọi Function Calling.

Hai tính năng thường kết hợp: Structured Output đảm bảo dữ liệu đầu ra đúng format, Tool Use cho phép LLM tương tác bên ngoài (tìm kiếm web, tính toán toán học, gọi API). Ví dụ: một chatbot có thể tự động call weather API khi user hỏi thời tiết, dùng Structured Output để đảm bảo response trả về đúng format “city”, “temperature”, “forecast”.

4. Constrained Decoding — Kiểm Soát Ở Cấp Inference

Phương pháp này hoạt động ở level sinh token: grammar/schema được biên dịch thành bộ lọc grammar, giới hạn tập token hợp lệ tại mỗi bước sinh. Anthropic mô tả: “compile JSON schemas into a grammar that constrains Claude’s output.”

  • Outlines (dottxt-ai/outlines): thư viện Python, hoạt động với mọi model — OpenAI, Ollama, vLLM
  • llama.cpp GBNF: formal grammar hỗ trợ full Unicode, token-level constraints
  • xgrammar (MLC AI): engine nhanh, portable, backend cho vLLM

Sơ đồ kiến trúc Structured Output Converter: Raw Input → Format Instructions → LLM Call → Raw Text → Text-to-Structured → Structured Output

5. So Sánh Prompt-based vs API-level

Bảng so sánh chi tiết dưới đây giúp chọn phương pháp phù hợp:

Tiêu chí Prompt-based API-level (Structured Outputs)
Reliability Phụ thuộc instruction-following Guaranteed tại generation time
Retry logic Cần validate + retry loop Không cần retry schema violations
Token cost Prompt dài hơn, waste token retry Output chính xác, tiết kiệm token
Setup Đơn giản, không cần SDK mới Cần SDK hỗ trợ (Python/JS SDK)
Model support Mọi model GPT-4o+, Claude Opus 5+, Gemini 3.7+
Validation Cần thư viện validate riêng Schema enforcement server-side

Xu hướng industry rõ ràng: từ “retry on error” sang “guarantee at generation time”. Cả OpenAI, Anthropic, Google đều đã triển khai trên model mới nhất.

6. Ứng Dụng Thực Tế

  • Data extraction: Trích xuất thông tin từ research paper, hóa đơn, email thành JSON — không cần validate lại. Xem hướng dẫn tại OpenAI Structured Outputs
  • Chain-of-thought tutoring: OpenAI dùng Structured Outputs cho tutoring math, đảm bảo mỗi bước tuân theo format bài giảng
  • Content moderation: Output classification đúng schema cho hệ thống kiểm duyệt tự động
  • HTML generation: Tạo HTML đúng cấu trúc từ prompt, không bị sai tag
  • Database insertion: Output trực tiếp thành INSERT statements đúng format

Tham khảo thêm: Outlines cho phép áp dụng structured output với mọi model chạy cục bộ.

7. Xu Hướng Industry

Cả ba nhà cung cấp lớn (OpenAI, Anthropic, Google) đều đã có Structured Outputs trên model mới nhất. Anthropic Claude Opus 5+ hỗ trợ JSON outputs và strict tool use riêng biệt hoặc kết hợp. Google Gemini 3.7 Flash+ hỗ trợ qua response_format API.

Về phía open source, Outlines và xgrammar cho phép áp dụng với mọi model, kể cả chạy cục bộ qua llama.cpp hay vLLM. Điều này đặc biệt quan trọng cho các tổ chức muốn dùng LLM private, không gửi data qua API.

Xu hướng chung rõ ràng: structured output không còn là “nice to have” — nó là yêu cầu bắt buộc cho bất kỳ ứng dụng LLM nào trong production.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

LangGraph vs AutoGen vs CrewAI: Framework AI Agent So Sánh Chi Tiết

Trong lĩnh vực AI Agent, ba framework LangGraph, AutoGen và CrewAI đã nổi lên như những công cụ hàng đầu để xây dựng hệ thống tác nhân thông minh. Mỗi…

Xem thêm

Diffusion Language Model: Cơ Chế Sinh Ngôn Ngữ Mới Cho AI

Diffusion Language Model: Cơ Chế Sinh Ngôn Ngữ Đột Phá Bỏ Autoregressive Diffusion Language Model là phương thức sinh văn bản mới, sử dụng cơ chế diffusion tương tự các…

Xem thêm

vLLM: Phục Vụ LLM Hiệu Suất Cao Cho Production

vLLM: Phục Vụ LLM Hiệu Suất Cao Cho Production Trong thế giới AI hiện đại, việc triển khai mô hình ngôn ngữ lớn (LLM) vào production đặt ra nhiều thách…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất