Руководство: Начало работы с Gemini API


В этом руководстве показано, как получить доступ к API Gemini непосредственно из вашего веб-приложения с помощью Google AI JavaScript SDK. Вы можете использовать этот SDK, если не хотите напрямую работать с REST API или серверным кодом (например, Node.js) для доступа к моделям Gemini в вашем веб-приложении.

В этом уроке вы узнаете, как сделать следующее:

Кроме того, это руководство содержит разделы, посвященные расширенным вариантам использования (например, подсчету токенов ), а также параметрам управления генерацией контента .

Предварительные условия

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

Чтобы завершить работу с этим руководством, убедитесь, что ваша среда разработки соответствует следующим требованиям:

  • (Необязательно) Node.js
  • Современный веб-браузер

Настройте свой проект

Прежде чем вызывать API Gemini, вам необходимо настроить проект, который включает в себя получение ключа API, импорт SDK и инициализацию модели.

Настройте свой ключ API

Чтобы использовать API Gemini, вам понадобится ключ API. Если у вас его еще нет, создайте ключ в Google AI Studio.

Получите ключ API

Закрепите свой ключ API

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

Все фрагменты в этом уроке предполагают, что вы получаете доступ к своему ключу API в качестве глобальной константы.

Импортировать SDK и инициализировать генеративную модель

Прежде чем вы сможете сделать какие -либо вызовы API, вам необходимо импортировать SDK и инициализировать генеративную модель.

<html>
  <body>
    <!-- ... Your HTML and CSS -->

    <script type="importmap">
      {
        "imports": {
          "@google/generative-ai": "https://esm.run/@google/generative-ai"
        }
      }
    </script>
    <script type="module">
      import { GoogleGenerativeAI } from "@google/generative-ai";

      // Fetch your API_KEY
      const API_KEY = "...";

      // Access your API key (see "Set up your API key" above)
      const genAI = new GoogleGenerativeAI(API_KEY);

      // ...

      // The Gemini 1.5 models are versatile and work with most use cases
      const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});

      // ...
    </script>
  </body>
</html>

При указании модели обратите внимание на следующее:

  • Используйте модель, специфичную для вашего варианта использования (например, gemini-pro-vision предназначена для мультимодального входа). В рамках этого руководства в инструкциях для каждой реализации перечислены рекомендуемая модель для каждого варианта использования.

Реализовать общие варианты использования

Теперь, когда ваш проект настроен, вы можете изучить, используя API Gemini для реализации различных вариантов использования:

Создать текст из ввода только текста

Когда ввод подсказки включает только текст, используйте модель Gemini 1.5 или модель Gemini 1.0 Pro с generateContent для генерации вывода текста:

import { GoogleGenerativeAI } from "@google/generative-ai";

// Access your API key (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(API_KEY);

async function run() {
  // The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
  const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});

  const prompt = "Write a story about a magic backpack."

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

run();

Создать текст с ввода текста и изображения (мультимодальный)

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

Когда ввод приглашения включает в себя как текст, так и изображения, используйте модель Gemini 1.5 или модель Gemini 1.0 Pro Vision с помощью метода generateContent для генерации вывода текста:

import { GoogleGenerativeAI } from "@google/generative-ai";

// Access your API key (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(API_KEY);

// Converts a File object to a GoogleGenerativeAI.Part object.
async function fileToGenerativePart(file) {
  const base64EncodedDataPromise = new Promise((resolve) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result.split(',')[1]);
    reader.readAsDataURL(file);
  });
  return {
    inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
  };
}

async function run() {
  // The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
  const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

  const prompt = "What's different between these pictures?";

  const fileInputEl = document.querySelector("input[type=file]");
  const imageParts = await Promise.all(
    [...fileInputEl.files].map(fileToGenerativePart)
  );

  const result = await model.generateContent([prompt, ...imageParts]);
  const response = await result.response;
  const text = response.text();
  console.log(text);
}

run();

Создайте многократные разговоры (чат)

Используя Gemini, вы можете создавать свободные разговоры по нескольким поворотам. SDK упрощает процесс, управляя состоянием разговора, поэтому, в отличие от generateContent , вам не нужно хранить историю разговора самостоятельно.

Чтобы построить многообразование разговора (например, чат), используйте модель Gemini 1.5 или модель Gemini 1.0 Pro, и инициализируйте чат, позвонив startChat() . Затем используйте sendMessage() , чтобы отправить новое пользовательское сообщение, которое также добавит сообщение и ответ на историю чата.

Есть два возможных варианта role , связанных с содержанием в разговоре:

  • user : роль, которая предоставляет подсказки. Это значение является по умолчанию для вызовов sendMessage , и функция будет выдвинуть исключение, если будет проходить другая роль.

  • model : роль, которая обеспечивает ответы. Эта роль может быть использована при вызове startChat() с существующей history .

import { GoogleGenerativeAI } from "@google/generative-ai";

// Access your API key (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(API_KEY);

async function run() {
  // The Gemini 1.5 models are versatile and work with multi-turn conversations (like chat)
  const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});

  const chat = model.startChat({
    history: [
      {
        role: "user",
        parts: [{ text: "Hello, I have 2 dogs in my house." }],
      },
      {
        role: "model",
        parts: [{ text: "Great to meet you. What would you like to know?" }],
      },
    ],
    generationConfig: {
      maxOutputTokens: 100,
    },
  });

  const msg = "How many paws are in my house?";

  const result = await chat.sendMessage(msg);
  const response = await result.response;
  const text = response.text();
  console.log(text);
}

run();

Используйте потоковую передачу для более быстрых взаимодействий

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

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

// ...

const result = await model.generateContentStream([prompt, ...imageParts]);

let text = '';
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  console.log(chunkText);
  text += chunkText;
}

// ...

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

// Use streaming with text-only input
const result = await model.generateContentStream(prompt);

См. Пример чата выше для создания экземпляра chat .

// Use streaming with multi-turn conversations (like chat)
const result = await chat.sendMessageStream(msg);

Внедрить расширенные варианты использования

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

Функция вызова

Функциональный вызов облегчает вам структурированные выходные данные из генеративных моделей. Затем вы можете использовать эти выходы для вызова других API и вернуть соответствующие данные ответа в модель. Другими словами, функциональный вызов помогает вам подключить генеративные модели к внешним системам, чтобы сгенерированный контент включал самую современную и точную информацию. Узнайте больше в функции, вызову обучения .

Считайте токены

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

// For text-only input
const { totalTokens } = await model.countTokens(prompt);
// For text-and-image input (multimodal)
const { totalTokens } = await model.countTokens([prompt, ...imageParts]);
// For multi-turn conversations (like chat)
const history = await chat.getHistory();
const msgContent = { role: "user", parts: [{ text: msg }] };
const contents = [...history, msgContent];
const { totalTokens } = await model.countTokens({ contents });

Параметры для контроля генерации контента

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

Настройте параметры модели

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

const generationConfig = {
  stopSequences: ["red"],
  maxOutputTokens: 200,
  temperature: 0.9,
  topP: 0.1,
  topK: 16,
};

// The Gemini 1.5 models are versatile and work with most use cases
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash",  generationConfig });

Используйте настройки безопасности

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

Вот как установить одну настройку безопасности:

import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai";

// ...

const safetySettings = [
  {
    category: HarmCategory.HARM_CATEGORY_HARASSMENT,
    threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
  },
];

// The Gemini 1.5 models are versatile and work with most use cases
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash", safetySettings });

Вы также можете установить более одного настройки безопасности:

const safetySettings = [
  {
    category: HarmCategory.HARM_CATEGORY_HARASSMENT,
    threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
  },
  {
    category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
    threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
  },
];

Что дальше

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

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

  • Gemini предлагает варианты для запроса ограничения на ограничение ставки . Предел скорости для моделей Gemini Pro составляет 60 запросов в минуту (обороты).