Как создавать структурированные выходные данные для гибридных функций в веб-приложениях

По умолчанию модели Gemini возвращают ответы в виде неструктурированного текста. Однако в некоторых случаях требуется структурированный текст (например, JSON или перечисления). Например, вы можете использовать ответ для других задач, требующих установленной схемы данных.

Чтобы сгенерированный моделью контент всегда соответствовал определенной схеме, вы можете задать схему, которая будет служить чертежом для ответов модели. После этого вы сможете извлекать данные из выходных данных модели с меньшим объемом постобработки.

Вот несколько примеров, как это можно сделать:

  • Убедитесь, что ответ модели представляет собой действительный JSON и соответствует предоставленной вами схеме.
    Например, модель может создавать структурированные записи рецептов, которые всегда включают название, список ингредиентов и этапы приготовления. Это упростит анализ и отображение информации в интерфейсе приложения.

  • Ограничить ответы модели при выполнении задач классификации.
    Например, вы можете настроить модель так, чтобы она добавляла к тексту определенный набор ярлыков (например, определенный набор перечислений, таких как positive и negative), а не ярлыки, которые создает модель (они могут быть разными, например good, positive, negative или bad).

На этой странице рассказывается, как создавать структурированный вывод (например, в формате JSON и перечислений) в гибридных интерфейсах для веб-приложений.

Перейти к выводу в формате JSON Перейти к выводу в формате перечисления

Настройки для структурированных выходных данных

Создание структурированного вывода (например, в формате JSON или с использованием перечислений) поддерживается для логического вывода с использованием как облачных, так и встроенных моделей.

  • Гибридные режимы логического вывода. Настройте и inCloudParams, и onDeviceParams, чтобы модель отвечала структурированными данными независимо от того, выполняется ли логический вывод в облаке или на устройстве:

    • Для моделей на устройстве: укажите responseConstraint в onDeviceParams, используя схему, созданную с помощью вспомогательных методов Schema, или обычную схему JSON.

    • Для моделей, размещенных в облаке: укажите responseMimeType (application/json для JSON или text/x.enum для перечислений) и responseSchema в inCloudParams.

  • Режимы логического вывода без гибридной модели. Используйте только подходящую конфигурацию, описанную выше.

Подготовка

Нажмите на поставщика Gemini API, чтобы посмотреть контент и код, относящиеся к нему.

Убедитесь, что вы выполнили все инструкции из краткого руководства по началу работы над гибридными приложениями.


Перейти к выводу в формате JSON Перейти к выводу в формате перечисления

Вывод в формате JSON

В приведенных ниже примерах общего примера вывода в формате JSON адаптированы для гибридного вывода (например, PREFER_ON_DEVICE).

В приведенных ниже примерах модель создает список профилей персонажей для фэнтезийного рассказа со структурированными атрибутами, такими как имя, возраст, вид и дополнительные аксессуары.

Вы можете задать схемы ответов одним из следующих способов:

  • Вспомогательные методы Firebase Schema (рекомендуется). Используйте вспомогательные методы (например, Schema.object() и Schema.enumString()), чтобы писать краткие и компактные схемы прямо в коде без лишних шаблонов.

  • Простая схема JSON. Используйте стандартный объект схемы JSON, если у вас уже есть определения схем, вы используете схемы на разных платформах или в бэкенд-службах или импортируете схемы из JSON-файлов.

Пример 1. Использование вспомогательных методов Firebase Schema

В этом примере для определения схемы объекта используются вспомогательные методы Schema (например, Schema.object, Schema.array, Schema.string и Schema.number), предоставляемые SDK Firebase AI Logic.

Прежде чем использовать этот пример, выполните инструкции из раздела Подготовка к работе, чтобы настроить проект и приложение.
В этом разделе также есть кнопка для выбранного вами поставщика Gemini API. Нажмите ее, чтобы на этой странице отображался контент, относящийся к этому поставщику.

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()));

Пример 2. Использование простой схемы JSON

В этом примере схема определена только с помощью JSON.

Прежде чем использовать этот пример, выполните инструкции из раздела Подготовка к работе, чтобы настроить проект и приложение.
В этом разделе также есть кнопка для выбранного вами поставщика Gemini API. Нажмите ее, чтобы на этой странице отображался контент, относящийся к этому поставщику.

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()));

Выходные данные перечисления

В приведенных ниже примерах общий пример выходных данных перечисления адаптирован для гибридного вывода (например, PREFER_ON_DEVICE).

В приведенных ниже примерах модель классифицирует описание фильма, выбирая один жанр из заранее заданного списка допустимых вариантов (drama, comedy или documentary).

Вы можете задать схемы ответов одним из следующих способов:

  • Вспомогательные методы Firebase Schema (рекомендуется). Используйте вспомогательные методы (например, Schema.object() и Schema.enumString()), чтобы писать краткие и компактные схемы прямо в коде без лишних шаблонов.

  • Простая схема JSON. Используйте стандартный объект схемы JSON, если у вас уже есть определения схем, вы используете схемы на разных платформах или в бэкенд-службах или импортируете схемы из JSON-файлов.

Пример 1. Использование вспомогательных методов Firebase Schema

В этом примере для определения допустимых значений перечисления используется вспомогательный метод Schema.enumString, предоставляемый Firebase AI Logic SDK.

Прежде чем использовать этот пример, выполните инструкции из раздела Подготовка к работе, чтобы настроить проект и приложение.
В этом разделе также есть кнопка для выбранного вами поставщика Gemini API. Нажмите ее, чтобы на этой странице отображался контент, относящийся к этому поставщику.

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());

Пример 2. Использование простой схемы JSON

В этом примере схема перечисления определяется только с помощью JSON.

Прежде чем использовать этот пример, выполните инструкции из раздела Подготовка к работе, чтобы настроить проект и приложение.
В этом разделе также есть кнопка для выбранного вами поставщика Gemini API. Нажмите ее, чтобы на этой странице отображался контент, относящийся к этому поставщику.

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());


Оставить отзыв о работе Firebase AI Logic