Gemini по умолчанию генерирует неструктурированный текст, но некоторым приложениям требуется структурированный текст. В этих случаях вы можете ограничить Gemini ответом в формате JSON — структурированном формате данных, подходящем для автоматической обработки. Вы также можете ограничить модель ответом с одним из параметров, указанных в перечислении.
Вот несколько случаев использования, которые могут потребовать структурированного вывода модели:
- Создайте базу данных компаний, извлекая информацию о компаниях из газетных статей.
- Извлекайте стандартизированную информацию из резюме.
- Извлекайте ингредиенты из рецептов и отображайте ссылку на продуктовый веб-сайт для каждого ингредиента.
В приглашении вы можете попросить Gemini создать выходные данные в формате JSON, но учтите, что модель не гарантирует создание JSON и ничего, кроме JSON. Для более детерминированного ответа вы можете передать определенную схему JSON в поле responseSchema
, чтобы Gemini всегда отвечал ожидаемой структурой.
В этом руководстве показано, как генерировать JSON с помощью generateContent
через выбранный вами SDK или напрямую с помощью REST API. В примерах показан только текстовый ввод, хотя Gemini также может создавать ответы JSON на мультимодальные запросы, включающие изображения , видео и аудио .
Прежде чем начать: настройте проект и ключ API.
Прежде чем вызывать API Gemini, вам необходимо настроить проект и ключ API.
Получите и защитите свой ключ API
Для вызова API Gemini вам понадобится ключ API. Если у вас его еще нет, создайте ключ в Google AI Studio.
Настоятельно рекомендуется не проверять ключ API в вашей системе контроля версий.
Для вашего ключа API следует использовать хранилище секретов, например Google Cloud Secret Manager .
Во всех фрагментах этого руководства предполагается, что вы обращаетесь к своему ключу API как к глобальной константе.
Создать JSON
Когда модель настроена для вывода JSON, она отвечает на любой запрос выводом в формате JSON.
Вы можете управлять структурой ответа JSON, предоставив схему. Существует два способа предоставления схемы в модель:
- Как текст в подсказке
- В виде структурированной схемы, предоставляемой посредством конфигурации модели.
Оба подхода работают как в Gemini 1.5 Flash, так и в Gemini 1.5 Pro.
Предоставьте схему в виде текста в приглашении
В следующем примере модели предлагается вернуть рецепты файлов cookie в определенном формате JSON.
Поскольку модель получает спецификацию формата из текста в подсказке, у вас может быть некоторая гибкость в представлении спецификации. Подойдет любой разумный формат представления схемы JSON.
// 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());
Вывод может выглядеть так:
[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]
Предоставьте схему через конфигурацию модели.
Следующий пример делает следующее:
- Создает экземпляр модели, настроенной с помощью схемы для ответа в формате JSON.
- Предлагает модели вернуть рецепты печенья.
// 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());
Вывод может выглядеть так:
[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]