Hỗ trợ đầu ra có cấu trúc cho Prompt API

Ngày xuất bản: 13 tháng 5 năm 2025

Mô hình ngôn ngữ lớn (LLM) nổi tiếng vì đôi khi đưa ra câu trả lời dài dòng. Ngay cả khi bạn yêu cầu mô hình chỉ trả lời bằng "true" hoặc "false", mô hình vẫn có thể phản hồi bằng một câu trả lời thân thiện và nhiều hơn những gì bạn yêu cầu, chẳng hạn như: "Chắc chắn rồi, câu trả lời là: đúng."

Để giải quyết thách thức này, Prompt API cho phép bạn chỉ định định dạng đầu ra JSON cho phản hồi của mô hình bằng cách truyền Giản đồ JSON đến các phương thức LanguageModel.prompt()LanguageModel.promptStreaming(). Tính năng hỗ trợ đầu ra có cấu trúc có sẵn từ Chrome phiên bản 137.

JSON Schema là gì

JSON Schema là một từ vựng cho phép tính nhất quán, tính hợp lệ và khả năng tương tác của dữ liệu JSON ở quy mô lớn. Khi nói đến việc trao đổi dữ liệu, JSON Schema nổi bật là một tiêu chuẩn mạnh mẽ để xác định cấu trúc và quy tắc của dữ liệu JSON. Thao tác này sử dụng một bộ từ khoá để xác định các thuộc tính của dữ liệu.

Giản đồ JSON là tiêu chuẩn ngành để đảm bảo đầu ra có cấu trúc, được dùng (trong số những tiêu chuẩn khác) bởi API OpenAIAPI Gemini.

Ví dụ: bạn nhắc mô hình chỉ định tối đa 3 hashtag cho một bài đăng trên mạng xã hội trực tuyến, chẳng hạn như Mastodon. Đầu ra lý tưởng có thể có dạng tương tự như JSON sau:

{
  "hashtags": [
    "#pottery",
    "#dyi"
  ] 
}

Sau đó, JSON Schema tương ứng cho hình dạng đối tượng đầu ra được yêu cầu này sẽ có dạng như sau:

{
  "type": "object",
  "properties": {
    "hashtags": {
      "type": "array",
      "maxItems": 3,
      "items": {
        "type": "string",
        "pattern": "^#[^\\s#]+$"
      }
    }
  },
  "required": ["hashtags"],
  "additionalProperties": false
}

Giản đồ JSON này xác định cấu trúc cho một đối tượng phải chứa trường hashtags với các ràng buộc sau:

  • "type": "object": Giá trị gốc phải là một đối tượng JSON.
  • "properties": { "hashtags": ... }: Đối tượng có thể (và trong trường hợp này, phải) có một thuộc tính có tên là hashtags.
  • "hashtags":

    • "type": "array": Giá trị phải là một mảng.
    • "maxItems": 3: Mảng này có thể chứa tối đa 3 mặt hàng.
    • "items": { "type": "string", "pattern": "^#[^\\s#]+$" }: Mỗi mục trong mảng phải là một chuỗi khớp với mẫu biểu thức chính quy đã cho: ^#[^\\s#]+$:
      • ^# → phải bắt đầu bằng #.
      • [^\\s#]+ → theo sau là một hoặc nhiều ký tự không phải là dấu cách (\s) hoặc một # khác.
      • $ → phải kết thúc tại đó.
  • "required": ["hashtags"]: Đối tượng phải chứa thuộc tính hashtags.

  • "additionalProperties": false: Không được phép dùng các thuộc tính khác ngoài thẻ bắt đầu bằng #.

Hãy đọc tài liệu Kiến thức cơ bản về lược đồ JSON để biết nội dung mô tả đầy đủ về các chức năng của định dạng này.

Trên thực tế, LLM rất giỏi trong việc tạo Giản đồ JSON. Mô tả các ràng buộc bằng ngôn ngữ tự nhiên trong câu lệnh của bạn và cung cấp một đối tượng JSON hợp lệ, vậy là bạn đã đi được nửa đường. Sau đó, bạn có thể xác thực các đối tượng JSON dựa trên Giản đồ JSON đã tạo bằng một trong các trình xác thực Giản đồ JSON, chẳng hạn như Trình xác thực Giản đồ JSON Newtonsoft trực tuyến.

Xác thực thành công một đối tượng JSON dựa trên Giản đồ JSON trong trình xác thực Giản đồ JSON.

Truyền một Giản đồ JSON đến Prompt API

Để đảm bảo mô hình tuân thủ một Giản đồ JSON được yêu cầu, bạn cần truyền Giản đồ JSON làm đối số cho prompt() hoặc đối tượng promptStreaming() của phương thức dưới dạng giá trị của trường responseConstraint.

Dưới đây là một ví dụ rất cơ bản về JSON Schema, đảm bảo rằng mô hình phản hồi bằng true hoặc false khi phân loại xem một thông báo nhất định như bài đăng trên Mastodon này có phải là về đồ gốm hay không.

const session = await LanguageModel.create();

const schema = {
  "type": "boolean"
};

const post = "Mugs and ramen bowls, both a bit smaller than intended- but that's
how it goes with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";

const result = await session.prompt(  
  `Is this post about pottery?\n\n${post}`,
  {  
    responseConstraint: schema,
  }
);
console.log(JSON.parse(result));
// true

Hỗ trợ các kết quả đầu ra có thể dự đoán

Tính năng hỗ trợ đầu ra có cấu trúc cho Prompt API giúp các câu trả lời của LLM dễ đoán hơn nhiều. Thay vì trích xuất một đối tượng từ phản hồi Markdown hoặc các bước xử lý hậu kỳ khác, giờ đây, nhà phát triển có thể giả định rằng phản hồi của mô hình là JSON hợp lệ.

Điều này giúp AI tích hợp tiến gần hơn một bước đến các API dựa trên đám mây, với tất cả lợi ích của việc chạy AI cục bộ phía máy khách.