Gemini API – Übersicht

Mit der Gemini API erhalten Sie Zugriff auf die neuesten generativen Modelle von Google. Sobald Sie mit den allgemeinen Funktionen der API vertraut sind, können Sie mit einer Anleitung für die Sprache Ihrer Wahl mit der Entwicklung beginnen.

Modelle

Gemini ist eine Reihe multimodaler generativer KI-Modelle, die von Google entwickelt wurden. Gemini-Modelle können je nach ausgewählter Modellvariante Text und Bilder in Prompts akzeptieren und Textantworten ausgeben.

Ausführlichere Modellinformationen finden Sie auf der Seite Gemini-Modelle. Sie können auch die Methode list_models verwenden, um alle verfügbaren Modelle aufzulisten, und dann die Methode get_model, um die Metadaten für ein bestimmtes Modell abzurufen.

Prompt-Daten und -Design

Bestimmte Gemini-Modelle akzeptieren sowohl Textdaten als auch Mediendateien als Eingabe. Diese Fähigkeit bietet viele zusätzliche Möglichkeiten, Inhalte zu generieren, Daten zu analysieren und Probleme zu lösen. Es müssen einige Einschränkungen und Anforderungen berücksichtigt werden, einschließlich des allgemeinen Limits für Eingabetokens für das von Ihnen verwendete Modell. Informationen zu den Tokenlimits für bestimmte Modelle finden Sie unter Gemini-Modelle.

Aufforderungen, die die Gemini API verwenden, dürfen nicht größer als 20 MB sein. Die Gemini API bietet eine File API zum vorübergehenden Speichern von Mediendateien für Prompts, mit denen Sie Prompt-Daten über das Limit von 20 MB hinaus bereitstellen können. Weitere Informationen zur Verwendung der Files API und zu den für die Prompts unterstützten Dateiformaten finden Sie unter Aufforderung mit Mediendateien.

Prompt-Design und Texteingabe

Die Erstellung effektiver Prompts oder Prompt Engineering ist eine Kombination aus Kunst und Wissenschaft. Eine Anleitung zum Umgang mit Prompts finden Sie in der Einführung zu Prompts und unter Prompt 101 über verschiedene Ansätze für Prompts.

Inhaltserstellung

Mit der Gemini API können Sie je nach verwendeter Modellvariante sowohl Text- als auch Bilddaten für Prompts verwenden. Sie können beispielsweise Text aus reinen Text- oder multimodalen Prompts mit einem Gemini 1.5-Modell generieren. In diesem Abschnitt finden Sie jeweils grundlegende Codebeispiele. In der API-Referenz generateContent finden Sie ein detaillierteres Beispiel, das alle Parameter abdeckt.

Text- und Bildeingabe

Sie können einen Text-Prompt mit einem Bild an ein Gemini 1.5-Modell senden, um eine Vision-bezogene Aufgabe auszuführen. z. B. um ein Bild mit Untertiteln zu versehen oder um zu kennzeichnen, dass es sich in einem Bild befindet.

Die folgenden Codebeispiele zeigen eine grundlegende Implementierung eines Text- und Bild-Prompts für jede unterstützte Sprache:

Python

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)

Das vollständige Code-Snippet finden Sie in der Python-Anleitung.

Ok

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)
}

Ein vollständiges Beispiel finden Sie in der Go-Anleitung.

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

Ein vollständiges Beispiel finden Sie in der Node.js-Anleitung.

Web

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

Ein vollständiges Beispiel finden Sie in der Webanleitung.

Dart (Flutter)

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

Ein vollständiges Beispiel finden Sie in der Anleitung zu Dart (Flutter).

Swift

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)

Ein vollständiges Beispiel finden Sie in der Swift-Anleitung.

Android

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)

Ein vollständiges Beispiel finden Sie in der Android-Anleitung.

cURL

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)'"
                  }
                }
              ]
            }
          ]
         }')

Weitere Informationen finden Sie in der Anleitung zur REST API.

Nur Texteingabe

Die Gemini API kann auch reine Texteingaben verarbeiten. Mit diesem Feature können Sie NLP-Aufgaben wie die Textvervollständigung und -zusammenfassung ausführen.

Die folgenden Codebeispiele zeigen eine grundlegende Implementierung einer Nur-Text-Eingabeaufforderung für jede unterstützte Sprache:

Python

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

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

response = model.generate_content(prompt)

Ein vollständiges Beispiel finden Sie in der Python-Anleitung.

Ok

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)
}

Ein vollständiges Beispiel finden Sie in der Go-Anleitung.

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

Ein vollständiges Beispiel finden Sie in der Node.js-Anleitung.

Web

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

Ein vollständiges Beispiel finden Sie in der Webanleitung.

Dart (Flutter)

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

Ein vollständiges Beispiel finden Sie in der Anleitung zu Dart (Flutter).

Swift

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)

Ein vollständiges Beispiel finden Sie in der Swift-Anleitung.

Android

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)

Ein vollständiges Beispiel finden Sie in der Android-Anleitung.

cURL

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"}]}
    ]
}'

Weitere Informationen finden Sie in der Anleitung zur REST API.

Multi-Turn Conversations (Chat)

Mit der Gemini API können Sie interaktive Chatfunktionen für Ihre Nutzer erstellen. Mit der Chatfunktion der API können Sie mehrere Runden von Fragen und Antworten erfassen, sodass Nutzer schrittweise zu Antworten gehen oder Hilfe bei mehrteiligen Problemen erhalten können. Diese Funktion ist ideal für Anwendungen, die eine fortlaufende Kommunikation erfordern, wie Chatbots, interaktive Tutoren oder Kundensupportassistenten.

Die folgenden Codebeispiele zeigen eine grundlegende Implementierung der Chatinteraktion für jede unterstützte Sprache:

Python

  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)

Ein vollständiges Beispiel finden Sie in der Chat-Demo in der Python-Anleitung.

Ok

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)
}

Ein vollständiges Beispiel finden Sie in der Chat-Demo in der Go-Anleitung.

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

Ein vollständiges Beispiel finden Sie in der Node.js-Anleitung in der Chat-Demo.

Web

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

Ein vollständiges Beispiel finden Sie in der Webanleitung in der Chat-Demo.

Dart (Flutter)

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

Ein vollständiges Beispiel finden Sie in der Chat-Demo in der Dart (Flutter)-Anleitung.

Swift

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)

Ein vollständiges Beispiel finden Sie in der Chat-Demo in der Swift-Anleitung.

Android

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)

Ein vollständiges Beispiel finden Sie in der Android-Anleitung.

cURL

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!"

Weitere Informationen finden Sie in der Anleitung zur REST API.

Gestreamte Antworten

Die Gemini API bietet eine zusätzliche Möglichkeit, Antworten von generativen KI-Modellen zu erhalten: als Datenstream. Eine gestreamte Antwort sendet inkrementelle Daten an Ihre Anwendung zurück, während diese vom Modell generiert werden. Mit dieser Funktion können Sie schnell auf eine Nutzeranfrage reagieren, um den Fortschritt anzuzeigen und eine interaktivere Umgebung zu erstellen.

Gestreamte Antworten sind eine Option für Prompts im freien Format und Chats mit Gemini-Modellen. Die folgenden Codebeispiele zeigen, wie Sie für jede unterstützte Sprache eine gestreamte Antwort für eine Eingabeaufforderung anfordern:

Python

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

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

Das vollständige Code-Snippet finden Sie in der Python-Anleitung.

Ok

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
}

Ein vollständiges Beispiel finden Sie in der Go-Anleitung.

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

Ein vollständiges Beispiel finden Sie in der Node.js-Anleitung.

Web

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

Ein vollständiges Beispiel finden Sie in der Webanleitung.

Dart (Flutter)

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

Ein vollständiges Beispiel finden Sie in der Anleitung zu Dart (Flutter).

Swift

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

Ein vollständiges Beispiel finden Sie in der Swift-Anleitung.

Android

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
}

Ein vollständiges Beispiel finden Sie in der Android-Anleitung.

cURL

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

Weitere Informationen finden Sie in der Anleitung zur REST API.

Antworten im JSON-Format

Je nach Ihrer Anwendung kann es sinnvoll sein, die Antwort auf eine Aufforderung in einem strukturierten Datenformat zurückzugeben. Dies gilt insbesondere dann, wenn Sie die Antworten zum Ausfüllen von Programmierschnittstellen verwenden. Die Gemini API bietet einen Konfigurationsparameter, um eine Antwort im JSON-Format anzufordern.

Sie können die Modellausgabe im JSON-Format erhalten. Dazu setzen Sie die Konfigurationsoption response_mime_type auf application/json und geben in der Eingabeaufforderung das gewünschte JSON-Format an:

Python

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

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",
      }
    }'

Während Flash-Modelle von Gemini 1.5 nur eine text-Beschreibung des JSON-Schemas akzeptieren, das zurückgegeben werden soll, können Sie mit Gemini 1.5 Pro-Modellen ein Schemaobjekt (oder ein entsprechendes Python-Typ) übergeben und die Modellausgabe richtet sich genau nach diesem Schema. Dies wird auch als gesteuerte Generierung oder eingeschränkte Decodierung bezeichnet.

Wenn Sie beispielsweise eine Liste von Recipe-Objekten abrufen möchten, übergeben Sie list[Recipe] an das Feld response_schema des Arguments generation_config:

Python

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

  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"
                }
              }
            }
          }
        }
      }'
  ```

Weitere Informationen finden Sie in der Kurzanleitung zum JSON-Modus im Gemini API-Cookbook.

Einbettungen

Der Einbettungsdienst in der Gemini API generiert hochmoderne Einbettungen für Wörter, Wortgruppen und Sätze. Die resultierenden Einbettungen können dann für NLP-Aufgaben wie semantische Suche, Textklassifizierung und Clustering verwendet werden. Im Leitfaden zu Einbettungen findest du Informationen zu Einbettungen sowie einige wichtige Anwendungsfälle für den Einbettungsdienst.

Nächste Schritte