1.6. Structured Output: Trả Lời Đúng Format
Agenda
Thời gian đọc ước tính: ~18 phút
Learning outcome:
- Hiểu được sự cần thiết của Structured Output trong việc tích hợp trí tuệ nhân tạo vào hệ thống phần mềm truyền thống.
- Thiết kế được các lược đồ dữ liệu chặt chẽ bằng thư viện Zod.
- Sử dụng được phương thức
withStructuredOutputđể trích xuất dữ liệu. - Phân biệt được cơ chế Provider Strategy (Hỗ trợ trực tiếp) và Tool Calling Strategy (Gọi công cụ mô phỏng).
- Phân tích được cơ chế tự động sửa lỗi (Intelligent Error Handling) của LangChain.
Glossary & Vocabulary
1. Technical Terms (Thuật ngữ kỹ thuật):
| Term | Vietnamese Meaning & Quick Explain |
|---|---|
| Structured Output | Kết quả đầu ra có cấu trúc (thường là định dạng JSON), thay vì văn bản tự nhiên (Natural Language). |
| Zod Schema | Lược đồ Zod — thư viện TypeScript dùng để định nghĩa, mô tả và xác thực cấu trúc dữ liệu. |
| Provider Strategy | Phương pháp ép định dạng dựa trên sự hỗ trợ trực tiếp từ API của các nhà cung cấp như OpenAI, Gemini. |
| Tool Calling Strategy | Phương pháp fallback cho các mô hình không hỗ trợ trả về JSON tự nhiên. Hệ thống sẽ ép mô hình gọi một "công cụ ảo" mang theo tham số là cấu trúc cần thiết. |
| Fallback | Phương án dự phòng — cách hệ thống xử lý khi phương pháp chính thất bại hoặc không khả dụng. |
2. Vocabulary Support (Từ vựng học thuật/B1+):
| Word | Meaning in Context (Nghĩa trong ngữ cảnh) |
|---|---|
| Predictable (adj) | Có thể dự đoán được — Kết quả đầu ra luôn tuân theo một quy tắc nhất định, đảm bảo tính nhất quán. |
| Constrain (v) | Ép buộc / Giới hạn — Buộc LLM phải tuân theo định dạng khắt khe mà không được phép diễn giải lan man. |
| Propagate (v) | Lan truyền — Trong lập trình, "let exceptions propagate" nghĩa là không bắt lỗi (catch), để lỗi tự dội ngược ra ngoài. |
| Seamlessly (adv) | Một cách mượt mà — Tích hợp hệ thống mà không gây ra xung đột dữ liệu. |
Vấn đề & Giải pháp
Vấn đề (Problem Statement):
- LLM vốn được huấn luyện để giao tiếp bằng ngôn ngữ tự nhiên. Tuy nhiên, các hệ thống cơ sở dữ liệu (như SQL, MongoDB) và các API hiện đại (REST, GraphQL) chỉ chấp nhận dữ liệu có cấu trúc định sẵn (như JSON, XML).
- Khi bạn yêu cầu LLM trích xuất tên khách hàng từ email, nó thường trả về nội dung thừa thãi: "Dạ vâng, thông tin tôi tìm thấy là: Tên: Nguyễn Văn A. Chúc bạn một ngày tốt lành!".
- Nếu bạn dùng mã nguồn truyền thống (ví dụ:
JSON.parse()) để xử lý câu trả lời trên, ứng dụng sẽ lập tức báo lỗi và sụp đổ vì chuỗi trả về không phải là JSON hợp lệ.
Giải pháp (Solution):
Tính năng Structured Output (Đầu ra có cấu trúc) của LangChain giải quyết triệt để vấn đề này. Nó đóng vai trò như một bộ lọc Constrain (Giới hạn), ép buộc mô hình ngôn ngữ phải bỏ qua mọi lời chào hỏi lề thói, chỉ trả về duy nhất một đối tượng JSON tuân thủ tuyệt đối cấu trúc mà lập trình viên đã định nghĩa từ trước.