Обзор API Gemini

Gemini API предоставляет вам доступ к новейшим генеративным моделям Google. Ознакомившись с общими функциями, доступными вам через API, попробуйте руководство для выбранного вами языка, чтобы начать разработку.

Модели

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

Для получения более подробной информации о модели посетите страницу моделей Gemini . Вы также можете использовать метод list_models для получения списка всех доступных моделей, а затем метод get_model для получения метаданных для конкретной модели.

Подскажите данные и дизайн

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

Размер приглашений с использованием Gemini API не может превышать 20 МБ. Gemini API предоставляет файловый API для временного хранения медиафайлов для использования в подсказках, что позволяет предоставлять данные подсказок размером более 20 МБ. Дополнительные сведения об использовании Files API и форматах файлов, поддерживаемых для запросов, см. в разделе Запросы с помощью медиафайлов .

Оперативное оформление и ввод текста

Создание эффективных подсказок или разработка подсказок — это сочетание искусства и науки. Ознакомьтесь с введением в подсказки, чтобы узнать, как подходить к подсказкам, и в руководстве «Подсказка 101» , чтобы узнать о различных подходах к подсказкам.

Генерировать контент

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

Ввод текста и изображений

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

Следующие примеры кода демонстрируют базовую реализацию текстового и графического приглашения для каждого поддерживаемого языка:

Питон

model = genai.GenerativeModel('gemini-1.5-flash')

cookie_picture = {
    'mime_type': 'image/png',
    'data': pathlib.Path('cookie.png').read_bytes()
}
prompt = "Do these look store-bought or homemade?"

response = model.generate_content(
    model="gemini-1.5-flash",
    content=[prompt, cookie_picture]
)
print(response.text)

См. руководство по Python , чтобы увидеть полный фрагмент кода.

Идти

vmodel := client.GenerativeModel("gemini-1.5-flash")

data, err := os.ReadFile(filepath.Join("path-to-image", imageFile))
if err != nil {
  log.Fatal(err)
}
resp, err := vmodel.GenerateContent(ctx, genai.Text("Do these look store-bought or homemade?"), genai.ImageData("jpeg", data))
if err != nil {
  log.Fatal(err)
}

Полный пример смотрите в руководстве по Go .

Node.js

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

const prompt = "Do these look store-bought or homemade?";
const image = {
  inlineData: {
    data: Buffer.from(fs.readFileSync("cookie.png")).toString("base64"),
    mimeType: "image/png",
  },
};

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

Полный пример см. в руководстве по Node.js.

Интернет

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

const prompt = "Do these look store-bought or homemade?";
const image = {
  inlineData: {
    data: base64EncodedImage /* see JavaScript quickstart for details */,
    mimeType: "image/png",
  },
};

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

Полный пример см. в веб-руководстве .

Дарт (Флаттер)

final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final prompt = 'Do these look store-bought or homemade?';
final imageBytes = await File('cookie.png').readAsBytes();
final content = [
  Content.multi([
    TextPart(prompt),
    DataPart('image/png', imageBytes),
  ])
];

final response = await model.generateContent(content);
print(response.text);

Полный пример см. в руководстве Dart (Flutter) .

Быстрый

let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let cookieImage = UIImage(...)
let prompt = "Do these look store-bought or homemade?"

let response = try await model.generateContent(prompt, cookieImage)

Полный пример см. в руководстве по Swift .

Андроид

val generativeModel = GenerativeModel(
    modelName = "gemini-1.5-flash",
    apiKey = BuildConfig.apiKey
)

val cookieImage: Bitmap = // ...
val inputContent = content() {
  image(cookieImage)
  text("Do these look store-bought or homemade?")
}

val response = generativeModel.generateContent(inputContent)
print(response.text)

Полный пример см. в руководстве по Android .

КУЛЬ

curl https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key=${API_KEY} \
    -H 'Content-Type: application/json' \
    -X POST \
    -d @<(echo'{
          "contents":[
            { "parts":[
                {"text": "Do these look store-bought or homemade?"},
                { "inlineData": {
                    "mimeType": "image/png",
                    "data": "'$(base64 -w0 cookie.png)'"
                  }
                }
              ]
            }
          ]
         }')

Дополнительные сведения см. в руководстве по REST API .

Ввод только текста

API Gemini также может обрабатывать только текстовый ввод. Эта функция позволяет выполнять задачи обработки естественного языка (NLP), такие как завершение текста и суммирование.

Следующие примеры кода демонстрируют базовую реализацию текстового приглашения для каждого поддерживаемого языка:

Питон

model = genai.GenerativeModel('gemini-1.5-flash')

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

response = model.generate_content(prompt)

Полный пример см. в руководстве по Python .

Идти

ctx := context.Background()
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

model := client.GenerativeModel("gemini-1.5-flash")
resp, err := model.GenerateContent(ctx, genai.Text("Write a story about a magic backpack."))
if err != nil {
  log.Fatal(err)
}

Полный пример смотрите в руководстве по Go .

Node.js

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";

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

Полный пример см. в руководстве по Node.js.

Интернет

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";

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

Полный пример см. в веб-руководстве .

Дарт (Флаттер)

final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final prompt = 'Write a story about a magic backpack.';
final content = [Content.text(prompt)];
final response = await model.generateContent(content);
print(response.text);

Полный пример см. в руководстве Dart (Flutter) .

Быстрый

let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let prompt = "Write a story about a magic backpack."

let response = try await model.generateContent(prompt)

Полный пример см. в руководстве по Swift .

Андроид

val generativeModel = GenerativeModel(
    modelName = "gemini-1.5-flash",
    apiKey = BuildConfig.apiKey
)

val prompt = "Write a story about a magic backpack."
val response = generativeModel.generateContent(prompt)
print(response.text)

Полный пример см. в руководстве по Android .

КУЛЬ

curl https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key=$API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{ "contents":[
      { "parts":[{"text": "Write a story about a magic backpack"}]}
    ]
}'

Дополнительные сведения см. в руководстве по REST API .

Многоходовые разговоры (чат)

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

Следующие примеры кода демонстрируют базовую реализацию взаимодействия в чате для каждого поддерживаемого языка:

Питон

  model = genai.GenerativeModel('gemini-1.5-flash')
  chat = model.start_chat(history=[])

  response = chat.send_message(
      "Pretend you\'re a snowman and stay in character for each response.")
  print(response.text)

  response = chat.send_message(
      "What\'s your favorite season of the year?")
  print(response.text)

Полный пример см. в демо-версии чата в руководстве по Python .

Идти

model := client.GenerativeModel("gemini-1.5-flash")
cs := model.StartChat()
cs.History = []*genai.Content{
  &genai.Content{
    Parts: []genai.Part{
      genai.Text("Pretend you're a snowman and stay in character for each response."),
    },
    Role: "user",
  },
  &genai.Content{
    Parts: []genai.Part{
      genai.Text("Hello! It's cold! Isn't that great?"),
    },
    Role: "model",
  },
}

resp, err := cs.SendMessage(ctx, genai.Text("What's your favorite season of the year?"))
if err != nil {
  log.Fatal(err)
}

Полный пример см. в демо-версии чата в руководстве по Go .

Node.js

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

const chat = model.startChat({
  history: [
    {
      role: "user",
      parts: "Pretend you're a snowman and stay in character for each response.",
    },
    {
      role: "model",
      parts: "Hello! It's cold! Isn't that great?",
    },
  ],
  generationConfig: {
    maxOutputTokens: 100,
  },
});

const msg = "What's your favorite season of the year?";
const result = await chat.sendMessage(msg);
console.log(result.response.text());

Полный пример см. в демонстрации чата в руководстве по Node.js.

Интернет

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

const chat = model.startChat({
  history: [
    {
      role: "user",
      parts: "Pretend you're a snowman and stay in character for each response.",
    },
    {
      role: "model",
      parts: "Hello! It's so cold! Isn't that great?",
    },
  ],
  generationConfig: {
    maxOutputTokens: 100,
  },
});

const msg = "What's your favorite season of the year?";
const result = await chat.sendMessage(msg);
console.log(result.response.text());

Полный пример см. в демо-версии чата в веб-руководстве .

Дарт (Флаттер)

final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final chat = model.startChat(history: [
  Content.text(
      "Pretend you're a snowman and stay in character for each response."),
  Content.model([TextPart("Hello! It's cold! Isn't that great?")]),
]);
final content = Content.text("What's your favorite season of the year?");
final response = await chat.sendMessage(content);
print(response.text);

Полный пример см. в демо-версии чата в руководстве по Dart (Flutter) .

Быстрый

let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let chat = model.startChat()

var message = "Pretend you're a snowman and stay in character for each response."
var response = try await chat.sendMessage(message)

message = "What\'s your favorite season of the year?"
response = try await chat.sendMessage(message)

Полный пример см. в демо-версии чата в руководстве по Swift .

Андроид

val generativeModel = GenerativeModel(
    modelName = "gemini-1.5-flash",
    apiKey = BuildConfig.apiKey
)

val chat = generativeModel.startChat()
val response = chat.sendMessage("Pretend you're a snowman and stay in
        character for each response.")
print(response.text)

Полный пример см. в руководстве по Android .

КУЛЬ

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {"role":"user",
         "parts":[{
           "text": "Pretend you're a snowman and stay in character for each
        {"role": "model",
            response."}]},
         "parts":[{
           "text": "Hello! It's so cold! Isn't that great?"}]},
        {"role": "user",
         "parts":[{
           "text": "What\'s your favorite season of the year?"}]},
       ]
    }' 2> /dev/null | grep "text"
# response example:
"text": "Winter, of course!"

Дополнительные сведения см. в руководстве по REST API .

Потоковые ответы

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

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

Питон

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

response = genai.stream_generate_content(
    model="models/gemini-1.5-flash",
    prompt=prompt
)

См. руководство по Python , чтобы увидеть полный фрагмент кода.

Идти

ctx := context.Background()
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

model := client.GenerativeModel("gemini-1.5-flash")

iter := model.GenerateContentStream(ctx, genai.Text("Write a story about a magic backpack."))
for {
  resp, err := iter.Next()
  if err == iterator.Done {
    break
  }
  if err != nil {
    log.Fatal(err)
  }

  // print resp
}

Полный пример смотрите в руководстве по Go .

Node.js

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";

const result = await model.generateContentStream([prompt]);
// print text as it comes in
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  console.log(chunkText);
}

Полный пример см. в руководстве по Node.js.

Интернет

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";

const result = await model.generateContentStream([prompt]);
// print text as it comes in
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  console.log(chunkText);
}

Полный пример см. в веб-руководстве .

Дарт (Флаттер)

final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final prompt = 'Write a story about a magic backpack.';
final content = [Content.text(prompt)];
final response = model.generateContentStream(content);
await for (final chunk in response) {
  print(chunk.text);
}

Полный пример см. в руководстве Dart (Flutter) .

Быстрый

let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let prompt = "Write a story about a magic backpack."

let stream = model.generateContentStream(prompt)
for try await chunk in stream {
  print(chunk.text ?? "No content")
}

Полный пример см. в руководстве по Swift .

Андроид

val generativeModel = GenerativeModel(
    modelName = "gemini-1.5-flash",
    apiKey = BuildConfig.apiKey
)

val inputContent = content {
  text("Write a story about a magic backpack.")
}

var fullResponse = ""
generativeModel.generateContentStream(inputContent).collect { chunk ->
  print(chunk.text)
  fullResponse += chunk.text
}

Полный пример см. в руководстве по Android .

КУЛЬ

curl https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:streamGenerateContent?key=${API_KEY} \
    -H 'Content-Type: application/json' \
    --no-buffer \
    -d '{ "contents":[
            {"role": "user",
              "parts":[{"text": "Write a story about a magic backpack."}]
            }
          ]
        }' > response.json

Дополнительные сведения см. в руководстве по REST API .

Ответы в формате JSON

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

Вы можете вывести модель в формате JSON, установив для параметра конфигурации response_mime_type значение application/json и в приглашении опишите формат JSON, который вы хотите получить в ответ:

Питон

model = genai.GenerativeModel('gemini-1.5-flash',
                              generation_config={"response_mime_type": "application/json"})

prompt = """
  List 5 popular cookie recipes.

  Using this JSON schema:

    Recipe = {"recipe_name": str}

  Return a `list[Recipe]`
  """

response = model.generate_content(prompt)
print(response.text)

КУЛЬ

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {
          "parts": [
            {
              "text": "\nList 5 popular cookie recipes.\n\nUsing this JSON schema:\n\n  Recipe = {\"recipe_name\": str}\n\nReturn a `list[Recipe]`\n      "
            }
          ]
        }
      ]
      "generationConfig": {
            "response_mime_type": "application/json",
      }
    }'

В то время как модели Gemini 1.5 Flash принимают только текстовое описание схемы JSON, которое вы хотите вернуть, модели Gemini 1.5 Pro позволяют передавать объект схемы (или эквивалент типа Python), и выходные данные модели будут строго следовать этой схеме. Это также известно как контролируемая генерация или ограниченное декодирование .

Например, чтобы получить список объектов Recipe , передайте list[Recipe] в поле response_schema аргумента generation_config :

Питон

import typing_extensions as typing

class Recipe(typing.TypedDict):
  recipe_name: str

model = genai.GenerativeModel(model_name="models/gemini-1.5-pro")

result = model.generate_content(
  "List 5 popular cookie recipes",
  generation_config=genai.GenerationConfig(response_mime_type="application/json",
                                           response_schema = list[Recipe]))

print(result.text)

КУЛЬ

  curl https://generativelanguage.googleapis.com/v1beta/models/models/gemini-1.5-pro:generateContent?
      -H 'Content-Type: application/json'
      -X POST \
      -d '{
        "contents": [
          {
            "parts": [
              {
                "text": "List 5 popular cookie recipes"
              }
            ]
          }
        ],
        "generationConfig": {
          "responseMimeType": "application/json",
          "responseSchema": {
            "type": "ARRAY",
            "items": {
              "type": "OBJECT",
              "properties": {
                "recipe_name": {
                  "type": "STRING"
                }
              }
            }
          }
        }
      }'
  ```

Дополнительную информацию см. в кратком руководстве по режиму JSON в кулинарной книге Gemini API .

Вложения

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

Следующие шаги