Tạo kết quả có cấu trúc bằng Gemini API


Theo mặc định, Gemini tạo văn bản không có cấu trúc, nhưng một số ứng dụng yêu cầu văn bản có cấu trúc. Đối với các trường hợp sử dụng này, bạn có thể ràng buộc Gemini để trả lời bằng JSON, một định dạng dữ liệu có cấu trúc phù hợp để xử lý tự động. Bạn cũng có thể ràng buộc mô hình để phản hồi bằng một trong các tuỳ chọn được chỉ định trong enum.

Sau đây là một số trường hợp sử dụng có thể yêu cầu đầu ra có cấu trúc từ mô hình:

  • Xây dựng cơ sở dữ liệu về các công ty bằng cách lấy thông tin về công ty từ các bài báo.
  • Trích xuất thông tin được chuẩn hoá từ sơ yếu lý lịch.
  • Trích xuất nguyên liệu từ công thức nấu ăn và hiển thị đường liên kết đến trang web thực phẩm cho từng nguyên liệu.

Trong câu lệnh, bạn có thể yêu cầu Gemini tạo ra kết quả ở định dạng JSON, nhưng lưu ý rằng mô hình không được đảm bảo sẽ tạo ra JSON và chỉ JSON. Để có phản hồi xác định hơn, bạn có thể truyền một giản đồ JSON cụ thể trong trường responseSchema để Gemini luôn phản hồi bằng một cấu trúc dự kiến. Để tìm hiểu thêm về cách xử lý giản đồ, hãy xem bài viết Tìm hiểu thêm về giản đồ JSON.

Hướng dẫn này sẽ hướng dẫn bạn cách tạo JSON bằng phương thức generateContent thông qua SDK mà bạn chọn hoặc sử dụng trực tiếp API REST. Các ví dụ cho thấy dữ liệu đầu vào chỉ là văn bản, mặc dù Gemini cũng có thể tạo phản hồi JSON cho các yêu cầu đa phương thức bao gồm hình ảnh, videoâm thanh.

Tìm hiểu thêm về giản đồ JSON

Khi định cấu hình mô hình để trả về phản hồi JSON, bạn có thể sử dụng đối tượng Schema để xác định hình dạng của dữ liệu JSON. Schema đại diện cho một tập hợp con chọn lọc của đối tượng giản đồ OpenAPI 3.0.

Dưới đây là nội dung đại diện JSON giả lập của tất cả các trường Schema:

{
  "type": enum (Type),
  "format": string,
  "description": string,
  "nullable": boolean,
  "enum": [
    string
  ],
  "maxItems": string,
  "minItems": string,
  "properties": {
    string: {
      object (Schema)
    },
    ...
  },
  "required": [
    string
  ],
  "propertyOrdering": [
    string
  ],
  "items": {
    object (Schema)
  }
}

Type của giản đồ phải là một trong các Loại dữ liệu của OpenAPI. Chỉ một tập hợp con của các trường mới hợp lệ cho mỗi Type. Danh sách sau đây liên kết từng Type với các trường hợp hợp lệ cho loại đó:

  • string -> enum, định dạng
  • integer -> định dạng
  • number -> định dạng
  • boolean
  • array -> minItems, maxItems, items
  • object -> properties, required, propertyOrdering, nullable

Dưới đây là một số giản đồ mẫu cho thấy các tổ hợp loại và trường hợp hợp lệ:

{ "type": "string", "enum": ["a", "b", "c"] }

{ "type": "string", "format": "date-time" }

{ "type": "integer", "format": "int64" }

{ "type": "number", "format": "double" }

{ "type": "boolean" }

{ "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": ... } }

{ "type": "object",
  "properties": {
    "a": { "type": ... },
    "b": { "type": ... },
    "c": { "type": ... }
  },
  "nullable": true,
  "required": ["c"],
  "propertyOrdering": ["c", "b", "a"]
}

Để xem tài liệu đầy đủ về các trường Giản đồ khi được sử dụng trong API Gemini, hãy xem Tài liệu tham khảo về Giản đồ.

Đặt hàng tài sản

Khi bạn làm việc với giản đồ JSON trong API Gemini, thứ tự của các thuộc tính rất quan trọng. Theo mặc định, API sắp xếp các thuộc tính theo thứ tự bảng chữ cái và không giữ nguyên thứ tự xác định các thuộc tính (mặc dù SDK AI tạo sinh của Google có thể giữ nguyên thứ tự này). Nếu bạn đang cung cấp ví dụ cho mô hình đã định cấu hình giản đồ và thứ tự thuộc tính của các ví dụ không nhất quán với thứ tự thuộc tính của giản đồ, thì kết quả có thể là lộn xộn hoặc không mong muốn.

Để đảm bảo thứ tự các thuộc tính nhất quán và dễ dự đoán, bạn có thể sử dụng trường propertyOrdering[] không bắt buộc.

"propertyOrdering": ["recipe_name", "ingredients"]

propertyOrdering[] – không phải là trường tiêu chuẩn trong quy cách OpenAPI – là một mảng các chuỗi dùng để xác định thứ tự của các thuộc tính trong phản hồi. Bằng cách chỉ định thứ tự của các thuộc tính, sau đó cung cấp ví dụ với các thuộc tính theo thứ tự đó, bạn có thể cải thiện chất lượng của kết quả.