Bỏ qua để đến nội dung
Level 2 — Prompt & Context Engineering Bài 6/10
Thời gian đọc: 6-8 phút

Structured Output

Phân biệt 'yêu cầu JSON bằng lời' (best-effort) và Structured Outputs (ép buộc bằng constrained decoding) — khi nào cần độ tin cậy 100%.

🎯 Bản chất cốt lõi ⚡️ Thực chiến ứng dụng 🛠️ Quy trình chuẩn 💡 Tối ưu hiệu suất
Chế độ đọc:
Tóm Tắt Nhanh Trong 3 Phút — Trọng Tâm Bài Học
1. Bản chất cốt lõi

Nắm vững nguyên lý và khái niệm nền tảng trước khi đi vào công cụ thực tế.

2. Thực thi chuẩn xác

Áp dụng quy trình từng bước, case study thực chiến và template mẫu có sẵn.

3. Tối ưu & Vận hành

Kiểm tra checklist hoàn thành, né tránh các sai lầm kinh điển để vận hành bền vững.

CHẶNG 1 · BẢN CHẤT & NGUYÊN LÝ

Phần 1: Bản chất & Nguyên lý

Nắm vững các khái niệm nền tảng, cơ chế hoạt động và mô hình tư duy cốt lõi.

1. Mục tiêu học tập

Sau bài này, bạn có thể:

🎯 BẢN CHẤT
Phân biệt rõ “yêu cầu JSON bằng lời” (best-effort, có thể sai) và “Structured Outputs” (ép buộc schema, gần như không thể sai).
🏗️ CẤU TRÚC
Biết cả Anthropic và OpenAI đều có tính năng tương đương, dựa trên “JSON Schema + ràng buộc kỹ thuật ở tầng sinh văn bản”.
⚡️ NGUYÊN LÝ
Nhận diện đúng tình huống cần Structured Output: khi kết quả sẽ được hệ thống khác xử lý tự động.
🛠️ THỰC CHIẾN
Biết các giới hạn kỹ thuật cụ thể để không kỳ vọng sai.

2. Khái niệm cốt lõi

  • Structured Output — tính năng API ép buộc phản hồi AI tuân theo 1 JSON Schema cụ thể, đảm bảo output luôn hợp lệ và parse được.
  • Cơ chế: constrained decoding — sinh theo “ngữ pháp” khiến model chỉ có thể sinh token khớp schema, khác hẳn cách “prompt-based” (chỉ yêu cầu model cố gắng theo định dạng).
  • Không phải đặc thù 1 vendor: cả Anthropic (Structured Outputs) và OpenAI (response_format) đều có tính năng tương đương — đây là khái niệm cấp ngành.

3. Tại sao nội dung này quan trọng

  • Yêu cầu JSON bằng lời văn (bài 14) không đảm bảo tuyệt đối. Nếu kết quả được 1 hệ thống khác xử lý tự động, 1 lần JSON lỗi cú pháp có thể làm sập cả quy trình.
  • Hiểu khác biệt “yêu cầu” và “ép buộc” giúp chọn đúng công cụ theo mức độ rủi ro.
  • Cầu nối quan trọng từ “dùng AI qua chat” sang “dùng AI như 1 thành phần trong hệ thống tự động” — nền tảng cho Level 8.

4. Cơ chế hoạt động

Theo Anthropic, Structured Outputs gồm 2 thành phần: JSON outputs (output_config.format — ép response tuân theo JSON Schema) và Strict tool use (strict: true — validate schema cho tool khi AI gọi tool).

Không có Structured Outputs, model có thể sinh JSON lỗi cú pháp, thiếu trường, sai kiểu dữ liệu — buộc lập trình viên viết thêm logic retry. Với Structured Outputs, lỗi này về nguyên tắc không thể xảy ra vì constrained decoding chặn từ gốc.

OpenAI mô tả cùng ý tưởng: bản nâng cấp của “JSON mode” cũ, đảm bảo thêm tuân thủ đúng schema.

Giới hạn kỹ thuật: KHÔNG hỗ trợ schema đệ quy; KHÔNG hỗ trợ ràng buộc số học (minimum, maximum, độ dài chuỗi); có giới hạn quy mô theo thời điểm; nếu AI từ chối vì lý do an toàn, output có thể không khớp schema — an toàn luôn ưu tiên hơn tuân thủ schema.

5. Mental model

Hình dung như “nhờ ai đó điền tờ khai” (yêu cầu bằng lời) so với “đưa họ 1 tờ mẫu in sẵn ô trống” (Structured Outputs): yêu cầu bằng lời — người điền có thể quên 1 mục, viết sai định dạng. Structured Outputs — về mặt vật lý người điền không thể bỏ sót ô nào, vì cấu trúc đã định sẵn.

CHẶNG 2 · THỰC CHIẾN ỨNG DỤNG

Phần 2: Thực chiến ứng dụng

Quy trình thực thi từng bước, case study cụ thể và bộ prompt/template áp dụng ngay.

6. Hướng dẫn từng bước

1
Xác định: kết quả sẽ được con người đọc hay hệ thống khác xử lý tự động? Nếu tự động, tiếp tục; nếu chỉ đọc bằng mắt, cách “yêu cầu bằng lời” (bài 14) thường đã đủ.
2
Định nghĩa rõ JSON Schema: trường nào bắt buộc, kiểu dữ liệu từng trường.
3
Kiểm tra schema có nằm trong giới hạn hỗ trợ không.
4
Cấu hình Structured Outputs của vendor (output_config.format ở Anthropic, response_format ở OpenAI) — bước kỹ thuật, cần code.
5
Luôn có kế hoạch xử lý trường hợp AI từ chối (refusal).

7. Ví dụ thực tế

Hệ thống tự động trích xuất thông tin liên hệ từ email khách hàng (tên, email, gói dịch vụ, có yêu cầu demo không) để đưa vào CRM. Chỉ yêu cầu “trả lời bằng JSON gồm các trường này” (bài 14) có thể khiến 1 số email cấu trúc bất thường trả về JSON thiếu trường hoặc sai kiểu ("có" thay vì true). Với Structured Outputs, schema quy định rõ 4 trường bắt buộc và đúng kiểu, output luôn parse được.

8. Prompt/template/workflow

{
"type": "object",
"properties": {
"ten_truong_1": {"type": "string"},
"ten_truong_2": {"type": "boolean"},
"ten_truong_3": {"type": "number"}
},
"required": ["ten_truong_1", "ten_truong_2", "ten_truong_3"],
"additionalProperties": false
}

Nguyên tắc: liệt kê đủ mọi trường bắt buộc trong required, cân nhắc additionalProperties: false.

9. Visual hoặc diagram cần thiết

Yêu cầu bằng lờiCó thể quên ô, sai định dạngStructured OutputsKhông thể sai cấu trúc⚠️JSON hợp lệ 100%Parse được luônHệ thống downstreamKhông cần retry
Hình 2.5 — Structured Outputs: từ tờ khai miệng dễ lỗi tới tờ mẫu in sẵn không thể sai cấu trúc.

10. Bài tập thực hành

  1. Nghĩ ra 1 tác vụ trích xuất thông tin (ví dụ: trích tên/giá/danh mục từ mô tả sản phẩm).
  2. Viết 1 JSON Schema tối giản theo khung ở mục 8.
  3. Thử yêu cầu AI trả lời theo schema đó chỉ bằng lời văn với 3-5 input khác nhau, quan sát có lần nào JSON lỗi/thiếu trường không.
CHẶNG 3 · TỐI ƯU & BẢO TRÌ

Phần 3: Tối ưu & Checklist

Checklist kiểm tra mức độ sẵn sàng, nhận diện các bẫy sai lầm và nguyên tắc vàng vận hành.

11. Checklist

12. Lỗi thường gặp

(Suy luận từ nguyên tắc trong [S62, S63], không phải khảo sát lỗi người dùng đã ghi nhận chính thức.)

⚠️ LƯU Ý QUAN TRỌNG
Dùng Structured Outputs cho mọi tác vụ — có chi phí kỹ thuật (biên dịch schema, độ trễ lần đầu).
⚠️ LƯU Ý QUAN TRỌNG
Thiết kế schema vượt quá giới hạn hỗ trợ (schema đệ quy) rồi bất ngờ khi không hoạt động.
⚠️ LƯU Ý QUAN TRỌNG
Quên xử lý trường hợp refusal — giả định output luôn khớp schema 100%.

15. Best practices

Nguyên tắc 1
Chỉ dùng Structured Outputs khi kết quả sẽ được hệ thống khác xử lý tự động.
Nguyên tắc 2
Thiết kế schema tối giản, đủ dùng.
Nguyên tắc 3
Luôn có logic xử lý riêng cho trường hợp refusal.
Nguyên tắc 4
Nhớ đây là khái niệm chung của ngành — không phải lý do để chọn vendor.
16. Nội dung nâng cao (không bắt buộc)
  • Anthropic hỗ trợ định nghĩa schema bằng kiểu dữ liệu bản địa (Pydantic cho Python, Zod cho TypeScript).
  • Grammar biên dịch cho schema được cache 24 giờ ở phía Anthropic — thay đổi schema làm mất cache và tăng độ trễ.
Thông tin chuyên sâu & Nguồn tham khảo
⚠️ 13. Giới hạn & khi nào KHÔNG nên áp dụng
  • Nếu kết quả chỉ để con người đọc trực tiếp, yêu cầu bằng lời (bài 14) thường đã đủ.
  • Đây là tính năng ở tầng API/kỹ thuật, không phải thứ bật/tắt trong giao diện chat thông thường.
  • Với schema quá phức tạp, tính năng có giới hạn.
🔐 14. An toàn & quản trị (Safety/Governance)

An toàn luôn được ưu tiên hơn tuân thủ schema — nếu AI cần từ chối trả lời, nó sẽ từ chối dù điều đó phá vỡ schema. Bất kỳ hệ thống nào dùng Structured Outputs để xử lý tự động phải có logic kiểm tra riêng cho stop_reason: "refusal" trước khi giả định output luôn parse được.

📚 17. Nguồn tham khảo

Structured Outputs, Claude Platform Docs (Anthropic) · Structured model outputs, OpenAI API Docs (OpenAI).