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 phản hồ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 tạp hoá 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 cấu trúc dự kiến.

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.

Trước khi bắt đầu: Thiết lập dự án và khoá API

Trước khi gọi API Gemini, bạn cần thiết lập dự án và định cấu hình khoá API.

Tạo JSON

Khi được định cấu hình để xuất JSON, mô hình sẽ phản hồi mọi lời nhắc bằng đầu ra ở định dạng JSON.

Bạn có thể kiểm soát cấu trúc của phản hồi JSON bằng cách cung cấp giản đồ. Có hai cách để cung cấp giản đồ cho mô hình:

  • Dưới dạng văn bản trong lời nhắc
  • Dưới dạng giản đồ có cấu trúc được cung cấp thông qua cấu hình mô hình

Cả hai phương pháp này đều hoạt động trong cả Gemini 1.5 Flash và Gemini 1.5 Pro.

Cung cấp giản đồ dưới dạng văn bản trong lời nhắc

Ví dụ sau đây nhắc mô hình trả về công thức làm bánh quy ở định dạng JSON cụ thể.

Vì mô hình lấy thông số kỹ thuật định dạng từ văn bản trong lời nhắc, nên bạn có thể linh hoạt trong cách thể hiện thông số kỹ thuật. Mọi định dạng hợp lý để biểu thị giản đồ JSON đều có thể hoạt động.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

const model = genAI.getGenerativeModel({
  model: "gemini-1.5-flash",
});

const prompt = `List a few popular cookie recipes using this JSON schema:

Recipe = {'recipeName': string}
Return: Array<Recipe>`;

const result = await model.generateContent(prompt);
console.log(result.response.text());

Kết quả có thể như sau:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]

Cung cấp giản đồ thông qua cấu hình mô hình

Ví dụ sau đây thực hiện những việc sau:

  1. Tạo bản sao của một mô hình được định cấu hình thông qua giản đồ để phản hồi bằng JSON.
  2. Yêu cầu mô hình trả về công thức làm bánh quy.
// Make sure to include these imports:
// import { GoogleGenerativeAI, SchemaType } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

const schema = {
  description: "List of recipes",
  type: SchemaType.ARRAY,
  items: {
    type: SchemaType.OBJECT,
    properties: {
      recipeName: {
        type: SchemaType.STRING,
        description: "Name of the recipe",
        nullable: false,
      },
    },
    required: ["recipeName"],
  },
};

const model = genAI.getGenerativeModel({
  model: "gemini-1.5-pro",
  generationConfig: {
    responseMimeType: "application/json",
    responseSchema: schema,
  },
});

const result = await model.generateContent(
  "List a few popular cookie recipes.",
);
console.log(result.response.text());

Kết quả có thể như sau:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]