Tạo đầu ra có cấu trúc cho trải nghiệm kết hợp trong ứng dụng web

Theo mặc định, các mô hình Gemini sẽ trả về câu trả lời dưới dạng văn bản không có cấu trúc. Tuy nhiên, một số trường hợp sử dụng yêu cầu văn bản có cấu trúc (chẳng hạn như JSON hoặc enum). Ví dụ: bạn có thể đang sử dụng phản hồi cho các tác vụ khác ở hạ lưu yêu cầu một giản đồ dữ liệu đã thiết lập.

Để đảm bảo rằng đầu ra do mô hình tạo luôn tuân thủ một giản đồ cụ thể, bạn có thể xác định một giản đồ. Giản đồ này hoạt động như một bản thiết kế cho các phản hồi của mô hình. Sau đó, bạn có thể trực tiếp trích xuất dữ liệu từ đầu ra của mô hình mà không cần xử lý hậu kỳ nhiều.

Sau đây là một số ví dụ về trường hợp sử dụng:

  • Đảm bảo rằng câu trả lời của mô hình tạo ra JSON hợp lệ và tuân thủ giản đồ mà bạn cung cấp.
    Ví dụ: mô hình này có thể tạo các mục có cấu trúc cho công thức nấu ăn, trong đó luôn có tên công thức, danh sách nguyên liệu và các bước. Sau đó, bạn có thể phân tích cú pháp và hiển thị thông tin này dễ dàng hơn trong giao diện người dùng của ứng dụng.

  • Hạn chế cách mô hình có thể phản hồi trong các tác vụ phân loại.
    Ví dụ: bạn có thể yêu cầu mô hình chú thích văn bản bằng một bộ nhãn cụ thể (ví dụ: một bộ enum cụ thể như positivenegative), thay vì các nhãn mà mô hình tạo ra (có thể có mức độ biến đổi như good, positive, negative hoặc bad).

Trang này mô tả cách tạo đầu ra có cấu trúc (chẳng hạn như JSON và enum) trong trải nghiệm kết hợp cho ứng dụng web.

Chuyển đến đầu ra JSON Chuyển đến đầu ra enum

Cấu hình cho đầu ra có cấu trúc

Việc tạo đầu ra có cấu trúc (chẳng hạn như JSON và enum) được hỗ trợ cho suy luận bằng cả mô hình được lưu trữ trên đám mây và mô hình trên thiết bị.

  • Chế độ suy luận kết hợp: Định cấu hình cả inCloudParamsonDeviceParams để mô hình phản hồi bằng đầu ra có cấu trúc, bất kể hoạt động suy luận chạy trên đám mây hay trên thiết bị:

    • Đối với các mô hình trên thiết bị: Chỉ định responseConstraint trong onDeviceParams bằng cách sử dụng giản đồ được tạo bằng các phương thức trợ giúp Schema hoặc giản đồ JSON thuần tuý.

    • Đối với các mô hình được lưu trữ trên đám mây: Chỉ định responseMimeType (application/json cho JSON hoặc text/x.enum cho enum) và responseSchema trong inCloudParams.

  • Chế độ suy luận không kết hợp: Chỉ sử dụng cấu hình áp dụng được mô tả ở trên.

Trước khi bắt đầu

Nhấp vào nhà cung cấp Gemini API để xem nội dung và mã dành riêng cho nhà cung cấp trên trang này.

Đảm bảo rằng bạn đã hoàn tất hướng dẫn bắt đầu xây dựng trải nghiệm kết hợp.


Chuyển đến đầu ra JSON Chuyển đến đầu ra enum

Đầu ra JSON

Các ví dụ sau đây điều chỉnh ví dụ chung về đầu ra JSON để phù hợp với suy luận kết hợp (ví dụ: PREFER_ON_DEVICE).

Trong trường hợp của những ví dụ này, mô hình sẽ tạo một danh sách hồ sơ nhân vật cho một câu chuyện giả tưởng, với các thuộc tính có cấu trúc như tên, tuổi, loài và phụ kiện không bắt buộc.

Bạn có thể xác định lược đồ phản hồi bằng một trong hai phương pháp sau:

  • Các phương thức trợ giúp Schema của Firebase (nên dùng): Sử dụng các phương thức trợ giúp (chẳng hạn như Schema.object()Schema.enumString()) để viết các giản đồ ngắn gọn, súc tích ngay trong mã của bạn mà không cần thêm mã khởi tạo.

  • Giản đồ JSON thuần tuý: Sử dụng đối tượng Giản đồ JSON tiêu chuẩn nếu bạn đã có các định nghĩa giản đồ hiện có, chia sẻ giản đồ trên các nền tảng hoặc dịch vụ phụ trợ hoặc nhập giản đồ từ tệp JSON.

Ví dụ 1: Sử dụng các phương thức trợ giúp Schema của Firebase

Ví dụ này sử dụng các phương thức trợ giúp Schema (chẳng hạn như Schema.object, Schema.array, Schema.stringSchema.number) do SDK Firebase AI Logic cung cấp để xác định giản đồ đối tượng.

Trước khi dùng thử mẫu này, hãy hoàn tất phần Trước khi bắt đầu của hướng dẫn này để thiết lập dự án và ứng dụng của bạn.
Trong phần đó, bạn cũng sẽ nhấp vào một nút cho nhà cung cấp Gemini API mà bạn đã chọn để xem nội dung dành riêng cho nhà cung cấp trên trang này.

import { initializeApp } from "firebase/app";
import {
  getAI,
  getGenerativeModel,
  GoogleAIBackend,
  InferenceMode,
  Schema
} from "firebase/ai";

// TODO(developer): Replace the following with your app's Firebase configuration.
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp.
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Define a schema using the `Schema` helper methods.
// Optional properties are specified in optionalProperties.
const jsonSchema = Schema.object({
  properties: {
    characters: Schema.array({
      items: Schema.object({
        properties: {
          name: Schema.string(),
          age: Schema.number(),
          species: Schema.string(),
          accessory: Schema.string()
        },
        optionalProperties: ["accessory"]
      })
    })
  }
});

// Create a GenerativeModel instance configured to use a hybrid inference mode (like PREFER_ON_DEVICE).
const model = getGenerativeModel(ai, {
  mode: InferenceMode.INFERENCE_MODE,
  // For cloud-hosted models, specify MIME type and response schema.
  inCloudParams: {
    model: "CLOUD_MODEL_NAME",
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    }
  },
  // For on-device models, pass the schema as the response constraint.
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});

const prompt = "Create profiles for some characters for a fantasy story.";

// Generate the structured output.
const result = await model.generateContent(prompt);

// Access the generated JSON string conforming to the schema from response.text().
console.log(result.response.text());

// Parse the JSON string into a JavaScript object.
console.log(JSON.parse(result.response.text()));

Ví dụ 2: Sử dụng giản đồ JSON thuần tuý

Ví dụ này chỉ xác định giản đồ bằng JSON.

Trước khi dùng thử mẫu này, hãy hoàn tất phần Trước khi bắt đầu của hướng dẫn này để thiết lập dự án và ứng dụng của bạn.
Trong phần đó, bạn cũng sẽ nhấp vào một nút cho nhà cung cấp Gemini API mà bạn đã chọn để xem nội dung dành riêng cho nhà cung cấp trên trang này.

import { initializeApp } from "firebase/app";
import {
  getAI,
  getGenerativeModel,
  GoogleAIBackend,
  InferenceMode
} from "firebase/ai";

// TODO(developer): Replace the following with your app's Firebase configuration.
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp.
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Define the schema as a plain JSON object.
// Properties are required by default unless omitted from the required array.
const jsonSchema = {
  type: "object",
  properties: {
    characters: {
      type: "array",
      items: {
        type: "object",
        properties: {
          name: {
            type: "string",
            nullable: false
          },
          age: {
            type: "number",
            nullable: false
          },
          species: {
            type: "string",
            nullable: false
          },
          accessory: {
            type: "string",
            nullable: true
          }
        },
        nullable: false,
        required: [
          "name",
          "age",
          "species"
        ]
      },
      nullable: false
    }
  },
  nullable: false,
  required: [
    "characters"
  ]
};

// Create a GenerativeModel instance configured to use a hybrid inference mode (like PREFER_ON_DEVICE).
const model = getGenerativeModel(ai, {
  mode: InferenceMode.INFERENCE_MODE,
  // For cloud-hosted models, specify MIME type and response schema.
  inCloudParams: {
    model: "CLOUD_MODEL_NAME",
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    }
  },
  // For on-device models, pass the schema as the response constraint.
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});

const prompt = "Create profiles for some characters for a fantasy story.";

// Generate the structured output.
const result = await model.generateContent(prompt);

// Access the generated JSON string conforming to the schema from response.text().
console.log(result.response.text());

// Parse the JSON string into a JavaScript object.
console.log(JSON.parse(result.response.text()));

Đầu ra enum

Các ví dụ sau đây điều chỉnh ví dụ đầu ra enum chung để phù hợp với suy luận kết hợp (ví dụ: PREFER_ON_DEVICE).

Trong trường hợp của các ví dụ này, mô hình phân loại nội dung mô tả phim bằng cách chọn một thể loại duy nhất trong danh sách các lựa chọn được phép xác định trước (drama, comedy hoặc documentary).

Bạn có thể xác định lược đồ phản hồi bằng một trong hai phương pháp sau:

  • Các phương thức trợ giúp Schema của Firebase (nên dùng): Sử dụng các phương thức trợ giúp (chẳng hạn như Schema.object()Schema.enumString()) để viết các giản đồ ngắn gọn, súc tích ngay trong mã của bạn mà không cần thêm mã khởi tạo.

  • Giản đồ JSON thuần tuý: Sử dụng đối tượng Giản đồ JSON tiêu chuẩn nếu bạn đã có các định nghĩa giản đồ hiện có, chia sẻ giản đồ trên các nền tảng hoặc dịch vụ phụ trợ hoặc nhập giản đồ từ tệp JSON.

Ví dụ 1: Sử dụng các phương thức trợ giúp Schema của Firebase

Ví dụ này sử dụng phương thức trợ giúp Schema.enumString do SDK Firebase AI Logic cung cấp để xác định các giá trị enum được phép.

Trước khi dùng thử mẫu này, hãy hoàn tất phần Trước khi bắt đầu của hướng dẫn này để thiết lập dự án và ứng dụng của bạn.
Trong phần đó, bạn cũng sẽ nhấp vào một nút cho nhà cung cấp Gemini API mà bạn đã chọn để xem nội dung dành riêng cho nhà cung cấp trên trang này.

import { initializeApp } from "firebase/app";
import {
  getAI,
  getGenerativeModel,
  GoogleAIBackend,
  InferenceMode,
  Schema
} from "firebase/ai";

// TODO(developer): Replace the following with your app's Firebase configuration.
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp.
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Define an enum schema using the `Schema` helper method with allowed string values.
const enumSchema = Schema.enumString({
  enum: ["drama", "comedy", "documentary"]
});

// Create a GenerativeModel instance configured to use a hybrid inference mode (like PREFER_ON_DEVICE).
const model = getGenerativeModel(ai, {
  mode: InferenceMode.INFERENCE_MODE,
  // For cloud-hosted models, specify MIME type and response schema.
  inCloudParams: {
    model: "CLOUD_MODEL_NAME",
    generationConfig: {
      responseMimeType: "text/x.enum",
      responseSchema: enumSchema
    }
  },
  // For on-device models, pass the enum schema as the response constraint.
  onDeviceParams: {
    promptOptions: {
      responseConstraint: enumSchema
    }
  }
});

const prompt = `The film aims to educate and inform viewers about real-life
subjects, events, or people. It offers a factual record of a particular topic
by combining interviews, historical footage, and narration. The primary purpose
of a film is to present information and provide insights into various aspects
of reality.`;

// Generate the structured enum output.
const result = await model.generateContent(prompt);

// Access the selected enum value string from response.text().
console.log(result.response.text());

Ví dụ 2: Sử dụng giản đồ JSON thuần tuý

Ví dụ này chỉ định giản đồ enum chỉ bằng JSON.

Trước khi dùng thử mẫu này, hãy hoàn tất phần Trước khi bắt đầu của hướng dẫn này để thiết lập dự án và ứng dụng của bạn.
Trong phần đó, bạn cũng sẽ nhấp vào một nút cho nhà cung cấp Gemini API mà bạn đã chọn để xem nội dung dành riêng cho nhà cung cấp trên trang này.

import { initializeApp } from "firebase/app";
import {
  getAI,
  getGenerativeModel,
  GoogleAIBackend,
  InferenceMode
} from "firebase/ai";

// TODO(developer): Replace the following with your app's Firebase configuration.
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp.
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Define the enum schema as a plain JSON object.
const enumSchema = {
  type: "string",
  enum: ["drama", "comedy", "documentary"]
};

// Create a GenerativeModel instance configured to use a hybrid inference mode (like PREFER_ON_DEVICE).
const model = getGenerativeModel(ai, {
  mode: InferenceMode.INFERENCE_MODE,
  // For cloud-hosted models, specify MIME type and response schema.
  inCloudParams: {
    model: "CLOUD_MODEL_NAME",
    generationConfig: {
      responseMimeType: "text/x.enum",
      responseSchema: enumSchema
    }
  },
  // For on-device models, pass the enum schema as the response constraint.
  onDeviceParams: {
    promptOptions: {
      responseConstraint: enumSchema
    }
  }
});

const prompt = `The film aims to educate and inform viewers about real-life
subjects, events, or people. It offers a factual record of a particular topic
by combining interviews, historical footage, and narration. The primary purpose
of a film is to present information and provide insights into various aspects
of reality.`;

// Generate the structured enum output.
const result = await model.generateContent(prompt);

// Access the selected enum value string from response.text().
console.log(result.response.text());


Gửi ý kiến phản hồi về trải nghiệm của bạn với Firebase AI Logic