Обзор 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-pro и использовать как текстовые, так и графические данные для подсказки модели gemini-pro-vision . В этом разделе приведены простые примеры кода каждого из них. Более подробный пример, охватывающий все параметры, см. в справочнике по generateContent .

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

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

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

Питон

model = genai.GenerativeModel('gemini-pro-vision')

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-pro-vision",
    content=[prompt, cookie_picture]
)
print(response.text)

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

Идти

vmodel := client.GenerativeModel("gemini-pro-vision")

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-pro-vision" });

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-pro-vision" });

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-pro-vision', 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-pro-vision", 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-pro-vision",
    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-pro-vision: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-pro-vision')

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-pro")
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-pro" });
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-pro" });
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-pro', 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-pro", 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-pro",
    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-pro: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-pro')
  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-pro")
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-pro"});

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-pro"});

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-pro', 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-pro", 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-pro",
    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-pro: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-pro",
    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-pro")

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-pro" });
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-pro" });
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-pro', 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-pro", 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-pro",
    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-pro: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.

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

КУЛЬ

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key=$API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{ "contents":[{
            "parts":[{"text": "List 5 popular cookie recipes using this JSON schema: \{ \"type\": \"object\", \"properties\": \{ \"recipe_name\": \{ \"type\": \"string\" \},\}\}"}] }],
          "generationConfig": {
            "response_mime_type": "application/json",
          } }'

Вложения

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

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