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

Các mô hình ngôn ngữ lớn (LLM) nổi tiếng vì đôi khi đưa ra phản hồi dài. Ngay cả khi bạn yêu cầu mô hình chỉ trả lời "đúng" hoặc "sai", mô hình vẫn có thể phản hồi một cách 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 của 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 kể từ Chrome phiên bản 137.

Giản đồ JSON là gì

Giản đồ JSON 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, Giản đồ JSON 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. Giản đồ 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 ngành để đảm bảo đầu ra có cấu trúc, được sử dụng, trong số những tiêu chuẩn khác, bởi OpenAI APIGemini API.

Ví dụ: bạn ra lệnh cho mô hình gán 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"
  ] 
}

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 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 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 có thuộc tính nào khác ngoài thẻ bắt đầu bằng dấu thăng.

Hãy đọc tài liệu Thông tin cơ bản về giản đồ JSON để biết nội dung mô tả đầy đủ về các khả năng của định dạng.

Trên thực tế, LLM rất giỏi trong việc tạo Giản đồ JSON. Hãy mô tả các ràng buộc bằng ngôn ngữ tự nhiên trong câu lệnh và cung cấp một đối tượng JSON hợp lệ làm ví dụ, và bạn đã hoàn thành một nửa. 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 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 làm đối số đến đối tượng tuỳ chọn của phương thức prompt() hoặc promptStreaming() làm giá trị của trường responseConstraint.

Dưới đây là một ví dụ rất cơ bản về Giản đồ JSON giúp đả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 các phản hồi của LLM trở nên dễ 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 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.