TROISINH
Context EngineeringTool Use & Structured Output

Structured Output: Bắt AI trả JSON, schema chuẩn

Hướng dẫn ép buộc AI trả về JSON chuẩn xác với schema, giúp kết nối API và xây dựng ứng dụng production mà không cần regex parsing.

Định nghĩa

Structured Output là kỹ thuật buộc AI trả về dữ liệu theo định dạng có cấu trúc (thường là JSON) thay vì văn bản tự do, thông qua việc cung cấp schema rõ ràng để đảm bảo tính nhất quán và khả năng parse tự động.

Giải thích chi tiết

Vấn đề với "Text tự do"

Khi bạn yêu cầu AI "trả về JSON", không có gì đảm bảo AI sẽ trả đúng format. AI có thể:

  • Thêm markdown code block ```json vào đầu và cuối
  • Viết lời giải thích trước hoặc sau JSON
  • Sử dụng single quote thay vì double quote
  • Bỏ sót field bắt buộc hoặc sai kiểu dữ liệu

Việc parse text bằng regex hoặc string manipulation dễ gây lỗi khi production, đặc biệt khi dữ liệu đầu vào phức tạp.

JSON Schema là gì

JSON Schema là bản mô tả cấu trúc dữ liệu, định nghĩa:

  • Các field có mặt (properties)
  • Kiểu dữ liệu (string, number, boolean, array, object)
  • Field nào bắt buộc (required)
  • Mô tả cho từng field để AI hiểu ngữ cảnh

Ví dụ schema cho hóa đơn:

{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {"type": "string"},
          "price": {"type": "number"}
        }
      }
    },
    "total": {"type": "number"}
  },
  "required": ["items", "total"]
}

Các phương pháp structured output

JSON Mode OpenAI và nhiều provider hỗ trợ response_format: {type: "json_object"}. Mode này đảm bảo output là valid JSON, nhưng không validate theo schema cụ thể.

Strict Structured Output Với GPT-4o và Claude 3.5 Sonnet trở lên, bạn có thể cung cấp schema và hệ thống sẽ:

  • Validate output trước khi trả về
  • Tự động sửa lỗi format nếu có thể
  • Trả về lỗi nếu không thể generate đúng schema

Function Calling Thực chất cũng là structured output nhưng gói trong "tool call". AI trả về arguments dưới dạng JSON theo function schema. Khác biệt là semantic: function calling mang nghĩa "hành động", còn structured output mang nghĩa "trả lời có cấu trúc".

Ví dụ thực tế

Trích xuất thông tin hóa đơn

Bạn có ảnh hóa đơn cần nhập vào hệ thống kế toán:

Schema:

{
  "supplier": "string",
  "date": "string (ISO 8601)",
  "items": [{"name": "string", "qty": "number", "unit_price": "number"}],
  "total_amount": "number",
  "tax_id": "string"
}

Code (OpenAI):

from openai import OpenAI

client = OpenAI()

response = client.beta.chat.completions.parse(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "Trích xuất thông tin hóa đơn từ ảnh"},
        {"role": "user", "content": [
            {"type": "image_url", "image_url": {"url": "https://example.com/invoice.jpg"}}
        ]}
    ],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "invoice_extraction",
            "strict": true,
            "schema": {...}  # schema ở trên
        }
    }
)

invoice_data = response.choices[0].message.parsed
# invoice_data là object Python, không cần json.loads()

Code (Anthropic):

import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    tools=[{
        "name": "extract_invoice",
        "description": "Trích xuất thông tin hóa đơn",
        "input_schema": {...}  # schema ở trên
    }],
    tool_choice={"type": "tool", "name": "extract_invoice"},
    messages=[{"role": "user", "content": [{"type": "image", "source": {...}}]}]
)

invoice_data = message.content[0].input

Lưu ý: Anthropic dùng "tool use" để đạt structured output, trong khi OpenAI có mode riêng.

Phân loại ticket hỗ trợ khách hàng

Tự động phân loại email hỗ trợ:

{
  "category": {"enum": ["billing", "technical", "feature_request", "complaint"]},
  "priority": {"type": "integer", "minimum": 1, "maximum": 5},
  "sentiment": {"enum": ["positive", "neutral", "negative"]},
  "summary": {"type": "string", "maxLength": 100},
  "required_action": {"type": "string"}
}

Kết quả parse trực tiếp vào CRM mà không cần xử lý trung gian.

Ứng dụng

Developer xây dựng tích hợp hệ thống Khi cần kết nối AI với database hoặc API bên thứ ba, structured output đảm bảo data integrity. Bạn không cần viết logic xử lý lỗi phức tạp cho mỗi trường hợp AI "nói lung tung".

Data Analyst tự động hóa báo cáo Trích xuất dữ liệu từ văn bản không cấu trúc (hợp đồng, báo cáo tài chính) thành bảng Excel hoặc dashboard. Schema giúp định nghĩa rõ các dimension và metric cần extract.

Startup xây dựng sản phẩm AI-native Trong các ứng dụng như tự động điền form, generate code, hoặc tạo cấu hình hệ thống, structured output là lớp interface giữa AI và business logic của bạn. Nó biến AI từ "chatbot" thành "backend service".

Kỹ sư nền tảng (Platform Engineer) Khi xây dựng pipeline ETL với AI, structured output giúp downstream processing ổn định. Bạn có thể dùng JSON để trigger các bước tiếp theo trong workflow một cách deterministically.

So sánh

Đặc điểmText tự doJSON ModeStrict Structured Output
Định dạng đầu raVăn bản tự nhiênValid JSONValid JSON + đúng schema
ValidationKhôngSyntax JSONSchema + kiểu dữ liệu
Độ tin cậy productionThấpTrung bìnhCao
Độ phức tạp setupKhông cần setupThêm response_formatĐịnh nghĩa schema chi tiết
Use case phù hợpChatbot, content creationAPI integration đơn giảnHệ thống mission-critical
Provider hỗ trợTất cảOpenAI, Gemini, GroqOpenAI (gpt-4o), Anthropic (qua tool use)

Kết luận: Nếu bạn chỉ cần AI "trả lời cho vui", text tự do đủ dùng. Nhưng khi AI là một node trong hệ thống tự động — nơi output sẽ đi vào database hoặc trigger hành động tiếp theo — strict structured output là bắt buộc. JSON Mode là bước đệm, nhưng schema validation mới là điểm cuối giúp bạn ngủ ngon.

Bài viết liên quan

Cùng cụm

Function Calling: Cho AI dùng tools

Hiểu cách AI gọi hàm qua JSON arguments, nền tảng cho việc tích hợp với external APIs

Thiết kế Tool cho AI: Tên, mô tả, parameters

Nguyên tắc đặt tên và mô tả parameters để AI gọi tool chính xác, liên quan trực tiếp đến schema design

Model Context Protocol (MCP)

Tiêu chuẩn kết nối tool giữa AI và external systems, sử dụng structured output làm message format

Multi-tool Orchestration

Khi AI cần dùng nhiều tool cùng lúc, structured output giúp phân biệt các tool calls khác nhau

Đọc tiếp

Context Engineering thực chiến

Áp dụng structured output vào các tình huống production thực tế với RAG và memory

Tool & Permission Design

Lên Level 2: Thiết kế quyền hạn và sandbox cho tool khi AI có khả năng thực thi structured commands

On this page