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

Ngày phát hành: 13 tháng 5 năm 2025

Mô hình ngôn ngữ lớn (LLM) nổi tiếng là đôi khi đưa ra các 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 "đúng" hoặc "sai", mô hình có thể phản hồi bằng một kết quả 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, 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 của phản hồi của mô hình bằng cách truyền JSON Schema đế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ó từ Chrome phiên bản 137.

Giản đồ JSON là gì

JSON Schema là một từ vựng giúp dữ liệu JSON nhất quán, hợp lệ và có khả năng tương tác trên quy mô lớn. Khi nói đến việc trao đổi dữ liệu, JSON Schema nổi bật như 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. Công cụ này sử dụng một tập hợp từ khoá để xác định các thuộc tính của dữ liệu.

Giản đồ JSON là tiêu chuẩn công nghiệp để đảm bảo đầu ra có cấu trúc, được sử dụng, trong số các API 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ột mạng xã hội trực tuyến, chẳng hạn như Mastodon. Kết quả lý tưởng có thể trông giống như JSON sau:

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

Sau đó, Giản đồ JSON 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 quy tắc ràng buộc sau:

  • "type": "object": Giá trị gốc phải là đố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 có thể chứa tối đa 3 mục.
    • "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 ở đó.
  • "required": ["hashtags"]: Đối tượng phải chứa thuộc tính hashtags.

  • "additionalProperties": false: Không được phép sử dụng thuộc tính nào khác ngoài thẻ hashtag.

Hãy đọc tài liệu Kiến thức cơ bản về giản đồ 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 quy tắ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 mẫu hợp lệ, bạn đã hoàn thành một nửa chặng đường. Sau đó, bạn có thể xác thực các đối tượng JSON theo 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 của Newtonsoft trực tuyến.

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

Truyền giản đồ JSON đến Prompt API

Để đảm bảo mô hình tuân thủ Giản đồ JSON được yêu cầu, bạn cần truyền Giản đồ JSON dưới dạng đối số đến đối tượng tuỳ chọn của phương thức prompt() hoặc promptStreaming() 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 mô hình phản hồi bằng true hoặc false trong việc 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ợ đầ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 dự đoán được câu trả lời của LLM dễ dàng hơn. Thay vì trích xuất một đối tượng từ phản hồi Markdown hoặc quá trình xử lý sau, giờ đây, nhà phát triển có thể giả định 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ả các lợi ích của việc chạy AI phía máy khách, cục bộ.