Anleitung: Erste Schritte mit der Gemini API


Bei Google AI ansehen In Google Colab ausführen Quelle auf GitHub ansehen

In dieser Kurzanleitung wird gezeigt, wie Sie das Python SDK für die Gemini API verwenden, mit der Sie auf die Large Language Models von Google Gemini zugreifen können. In dieser Anleitung erhalten Sie Informationen zu folgenden Themen:

  1. Richten Sie Ihre Entwicklungsumgebung und den API-Zugriff ein, um Gemini zu verwenden.
  2. Textantworten aus Texteingaben generieren.
  3. Textantworten aus multimodalen Eingaben (Text und Bilder) generieren.
  4. Verwenden Sie Gemini für Unterhaltungen in mehreren Schritten (Chat).
  5. Verwenden Sie Einbettungen für Large Language Models.

Voraussetzungen

Sie können diese Kurzanleitung in Google Colab ausführen, wo dieses Notebook direkt im Browser ausgeführt wird und keine zusätzliche Umgebungskonfiguration erforderlich ist.

Wenn Sie diese Kurzanleitung lokal ausführen möchten, müssen Sie alternativ dafür sorgen, dass Ihre Entwicklungsumgebung die folgenden Anforderungen erfüllt:

  • Python 3.9 oder höher
  • Eine Installation von jupyter zum Ausführen des Notebooks.

Einrichtung

Python SDK installieren

Das Python SDK für die Gemini API ist im Paket google-generativeai enthalten. Installieren Sie die Abhängigkeit mithilfe von pip:

pip install -q -U google-generativeai

Pakete importieren

Importieren Sie die erforderlichen Pakete.

import pathlib
import textwrap

import google.generativeai as genai

from IPython.display import display
from IPython.display import Markdown


def to_markdown(text):
  text = text.replace('•', '  *')
  return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))
# Used to securely store your API key
from google.colab import userdata

API-Schlüssel einrichten

Bevor Sie die Gemini API verwenden können, müssen Sie einen API-Schlüssel abrufen. Wenn Sie noch keinen Schlüssel haben, können Sie mit einem Klick in Google AI Studio einen Schlüssel erstellen.

API-Schlüssel anfordern

Fügen Sie den Schlüssel in Colab dem Secret-Manager unter "🚀" im linken Steuerfeld hinzu. Geben Sie ihr den Namen GOOGLE_API_KEY.

Sobald Sie den API-Schlüssel haben, übergeben Sie ihn an das SDK. Dafür haben Sie die beiden folgenden Möglichkeiten:

  • Fügen Sie den Schlüssel in die Umgebungsvariable GOOGLE_API_KEY ein. Das SDK ruft ihn dort automatisch ab.
  • Übergib den Schlüssel an genai.configure(api_key=...)
# Or use `os.getenv('GOOGLE_API_KEY')` to fetch an environment variable.
GOOGLE_API_KEY=userdata.get('GOOGLE_API_KEY')

genai.configure(api_key=GOOGLE_API_KEY)

Modelle auflisten

Jetzt können Sie die Gemini API aufrufen. Mit list_models kannst du die verfügbaren Gemini-Modelle aufrufen:

  • gemini-1.5-flash: unser schnellstes multimodales Modell
  • gemini-1.5-pro: unser leistungsstärkstes und intelligentes multimodales Modell
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

Text aus Texteingaben generieren

Verwenden Sie für reine Text-Prompts ein Gemini 1.5-Modell oder Gemini 1.0 Pro:

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

Die Methode generate_content kann eine Vielzahl von Anwendungsfällen verarbeiten, einschließlich eines Chats in mehreren Schritten und einer multimodalen Eingabe, je nachdem, was das zugrunde liegende Modell unterstützt. Die verfügbaren Modelle unterstützen nur Text und Bilder als Eingabe und Text als Ausgabe.

Im einfachsten Fall können Sie einen Eingabeaufforderungsstring an die Methode GenerativeModel.generate_content übergeben:

%%time
response = model.generate_content("What is the meaning of life?")
CPU times: user 110 ms, sys: 12.3 ms, total: 123 ms
Wall time: 8.25 s

In einfachen Fällen benötigen Sie lediglich die Zugriffsfunktion response.text. Um formatierten Markdown-Text anzuzeigen, verwenden Sie die Funktion to_markdown:

to_markdown(response.text)

Die Frage nach dem Sinn des Lebens hat die Menschen über Jahrhunderte, Kulturen und Kontinente hinweg fasziniert. Es gibt zwar keine allgemein anerkannte Reaktion, aber es wurden viele Ideen formuliert, und die Reaktionen hängen häufig von individuellen Ideen, Überzeugungen und Lebenserfahrungen ab.

  1. Zufriedenheit und Wohlergehen:Viele Menschen glauben, dass das Ziel des Lebens darin besteht, persönliche Zufriedenheit und Wohlergehen zu erreichen. Dazu gehören unter anderem Aktivitäten, die Freude bereiten, wichtige Kontakte zu knüpfen, sich um die körperliche und psychische Gesundheit des Nutzers zu kümmern und persönliche Ziele und Interessen zu verfolgen.

  2. Sinnvoller Beitrag:Einige sind der Ansicht, dass der Zweck des Lebens darin besteht, einen sinnvollen Beitrag für die Welt zu leisten. Dies kann die Ausübung eines Berufes, von dem andere profitieren, die Beteiligung an ehrenamtlichen oder wohltätigen Aktivitäten, die Erstellung von Kunst oder Literatur oder die Erfindung sein.

  3. Selbstverwirklichung und persönliche Entwicklung:Ein weiteres häufiges Ziel im Leben ist das Streben nach Selbstverwirklichung und persönlicher Entwicklung. Das könnte bedeuten, neue Fähigkeiten zu erlernen, die eigenen Grenzen zu überwinden, persönliche Hindernisse zu überwinden und sich als Mensch weiterzuentwickeln.

  4. Ethisches und moralisches Verhalten:Einige glauben, dass das Ziel des Lebens darin besteht, ethisch und moralisch zu handeln. Dies kann bedeuten, dass man sich an seine moralischen Grundsätze hält, auch in schwierigen Situationen das Richtige tut und versucht, die Welt zu einem besseren Ort zu machen.

  5. Spirituelle Erfüllung:Bei manchen ist der Zweck des Lebens mit spirituellen oder religiösen Überzeugungen verbunden. Dies könnte bedeuten, nach einer Verbindung zu einer höheren Macht zu suchen, religiöse Rituale auszuüben oder spirituelle Lehren zu befolgen.

  6. Das Leben in vollem Umfang erleben:Manche Menschen glauben, dass das Ziel des Lebens darin besteht, alles zu erleben, was es zu bieten hat. Dazu gehören beispielsweise Reisen, das Ausprobieren neuer Dinge, das Eingehen von Risiken und das Annehmen neuer Begegnungen.

  7. Alte Inhalte und Auswirkungen:Andere glauben, dass der Zweck des Lebens darin besteht, ein bleibendes Vermächtnis und Auswirkungen auf die Welt zu hinterlassen. Das kann bedeuten, etwas Wichtiges zu erreichen, sich für seine Beiträge im Gedächtnis zu erinnern oder andere zu inspirieren und zu motivieren.

  8. Ausgeglichenheit und Harmonie finden:Für manche Menschen besteht der Zweck des Lebens darin, in allen Aspekten ihres Lebens Ausgewogenheit und Harmonie zu finden. Dies könnte bedeuten, persönliche, berufliche und soziale Verpflichtungen in Einklang zu bringen, inneren Frieden und Zufriedenheit zu suchen und ein Leben zu führen, das im Einklang mit den eigenen Werten und Überzeugungen steht.

Letztendlich ist der Sinn des Lebens eine persönliche Reise und unterschiedliche Menschen können durch ihre Erfahrungen, Reflexionen und Interaktionen mit der Welt um sie herum ihren eigenen Zweck entdecken.

Wenn die API kein Ergebnis zurückgeben konnte, prüfen Sie mit GenerateContentResponse.prompt_feedback, ob die Anfrage aufgrund von Sicherheitsbedenken blockiert wurde.

response.prompt_feedback
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}

Gemini kann mehrere mögliche Antworten für einen einzelnen Prompt generieren. Diese möglichen Antworten heißen candidates. Du kannst sie dir ansehen, um die am besten geeignete Antwort auszuwählen.

Sehen Sie sich die Antwortkandidaten mit GenerateContentResponse.candidates an:

response.candidates
[content {
  parts {
    text: "The query of life\'s purpose has perplexed people across centuries, cultures, and continents. While there is no universally recognized response, many ideas have been put forth, and the response is frequently dependent on individual ideas, beliefs, and life experiences.\n\n1. **Happiness and Well-being:** Many individuals believe that the goal of life is to attain personal happiness and well-being. This might entail locating pursuits that provide joy, establishing significant connections, caring for one\'s physical and mental health, and pursuing personal goals and interests.\n\n2. **Meaningful Contribution:** Some believe that the purpose of life is to make a meaningful contribution to the world. This might entail pursuing a profession that benefits others, engaging in volunteer or charitable activities, generating art or literature, or inventing.\n\n3. **Self-realization and Personal Growth:** The pursuit of self-realization and personal development is another common goal in life. This might entail learning new skills, pushing one\'s boundaries, confronting personal obstacles, and evolving as a person.\n\n4. **Ethical and Moral Behavior:** Some believe that the goal of life is to act ethically and morally. This might entail adhering to one\'s moral principles, doing the right thing even when it is difficult, and attempting to make the world a better place.\n\n5. **Spiritual Fulfillment:** For some, the purpose of life is connected to spiritual or religious beliefs. This might entail seeking a connection with a higher power, practicing religious rituals, or following spiritual teachings.\n\n6. **Experiencing Life to the Fullest:** Some individuals believe that the goal of life is to experience all that it has to offer. This might entail traveling, trying new things, taking risks, and embracing new encounters.\n\n7. **Legacy and Impact:** Others believe that the purpose of life is to leave a lasting legacy and impact on the world. This might entail accomplishing something noteworthy, being remembered for one\'s contributions, or inspiring and motivating others.\n\n8. **Finding Balance and Harmony:** For some, the purpose of life is to find balance and harmony in all aspects of their lives. This might entail juggling personal, professional, and social obligations, seeking inner peace and contentment, and living a life that is in accordance with one\'s values and beliefs.\n\nUltimately, the meaning of life is a personal journey, and different individuals may discover their own unique purpose through their experiences, reflections, and interactions with the world around them."
  }
  role: "model"
}
finish_reason: STOP
index: 0
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}
]

Standardmäßig gibt das Modell nach Abschluss des gesamten Generierungsprozesses eine Antwort zurück. Sie können die Antwort auch streamen, während sie generiert wird. Das Modell gibt dann Teile der Antwort zurück, sobald diese generiert wurden.

Verwenden Sie GenerativeModel.generate_content(..., stream=True), um Antworten zu streamen.

%%time
response = model.generate_content("What is the meaning of life?", stream=True)
CPU times: user 102 ms, sys: 25.1 ms, total: 128 ms
Wall time: 7.94 s
for chunk in response:
  print(chunk.text)
  print("_"*80)
The query of life's purpose has perplexed people across centuries, cultures, and
________________________________________________________________________________
 continents. While there is no universally recognized response, many ideas have been put forth, and the response is frequently dependent on individual ideas, beliefs, and life experiences
________________________________________________________________________________
.

1. **Happiness and Well-being:** Many individuals believe that the goal of life is to attain personal happiness and well-being. This might entail locating pursuits that provide joy, establishing significant connections, caring for one's physical and mental health, and pursuing personal goals and aspirations.

2. **Meaning
________________________________________________________________________________
ful Contribution:** Some believe that the purpose of life is to make a meaningful contribution to the world. This might entail pursuing a profession that benefits others, engaging in volunteer or charitable activities, generating art or literature, or inventing.

3. **Self-realization and Personal Growth:** The pursuit of self-realization and personal development is another common goal in life. This might entail learning new skills, exploring one's interests and abilities, overcoming obstacles, and becoming the best version of oneself.

4. **Connection and Relationships:** For many individuals, the purpose of life is found in their relationships with others. This might entail building
________________________________________________________________________________
 strong bonds with family and friends, fostering a sense of community, and contributing to the well-being of those around them.

5. **Spiritual Fulfillment:** For those with religious or spiritual beliefs, the purpose of life may be centered on seeking spiritual fulfillment or enlightenment. This might entail following religious teachings, engaging in spiritual practices, or seeking a deeper understanding of the divine.

6. **Experiencing the Journey:** Some believe that the purpose of life is simply to experience the journey itself, with all its joys and sorrows. This perspective emphasizes embracing the present moment, appreciating life's experiences, and finding meaning in the act of living itself.

7. **Legacy and Impact:** For others, the goal of life is to leave a lasting legacy or impact on the world. This might entail making a significant contribution to a particular field, leaving a positive mark on future generations, or creating something that will be remembered and cherished long after one's lifetime.

Ultimately, the meaning of life is a personal and subjective question, and there is no single, universally accepted answer. It is about discovering what brings you fulfillment, purpose, and meaning in your own life, and living in accordance with those values.
________________________________________________________________________________

Beim Streaming sind einige Antwortattribute erst verfügbar, wenn Sie alle Antwortblöcke durchlaufen haben. Dies wird im Folgenden dargestellt:

response = model.generate_content("What is the meaning of life?", stream=True)

Das Attribut prompt_feedback funktioniert so:

response.prompt_feedback
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}

Bei Attributen wie text ist das jedoch nicht der Fall:

try:
  response.text
except Exception as e:
  print(f'{type(e).__name__}: {e}')
IncompleteIterationError: Please let the response complete iteration before accessing the final accumulated
attributes (or call `response.resolve()`)

Text aus Bild- und Texteingaben generieren

Gemini bietet verschiedene Modelle, die multimodale Eingaben verarbeiten können (Gemini 1.5-Modelle), sodass Sie sowohl Text als auch Bilder eingeben können. Lies dir auch die Anforderungen an Bilder für Prompts durch.

Wenn die Prompt-Eingabe sowohl Text als auch Bilder enthält, verwenden Sie Gemini 1.5 mit der Methode GenerativeModel.generate_content, um eine Textausgabe zu generieren:

Fügen wir ein Bild ein:

curl -o image.jpg https://t0.gstatic.com/licensed-image?q=tbn:ANd9GcQ_Kevbk21QBRy-PgB4kQpS79brbmmEG7m3VOTShAn4PecDU5H5UxrJxE3Dw1JiaG17V88QIol19-3TM2wCHw
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  405k  100  405k    0     0  6982k      0 --:--:-- --:--:-- --:--:-- 7106k
import PIL.Image

img = PIL.Image.open('image.jpg')
img

png

Verwenden Sie ein Gemini 1.5-Modell und übergeben Sie das Bild mit generate_content an das Modell.

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

to_markdown(response.text)

Teriyaki-Hähnchen-Zubereitungsschüsseln mit braunem Reis, geröstetem Brokkoli und Paprika.

Um in einem Prompt sowohl Text als auch Bilder bereitzustellen, übergeben Sie eine Liste mit den Strings und Bildern:

response = model.generate_content(["Write a short, engaging blog post based on this picture. It should include a description of the meal in the photo and talk about my journey meal prepping.", img], stream=True)
response.resolve()
to_markdown(response.text)

Das Zubereiten von Mahlzeiten ist eine tolle Möglichkeit, Zeit und Geld zu sparen, und kann dir auch dabei helfen, dich gesünder zu ernähren. Diese Mahlzeit ist ein großartiges Beispiel für eine gesunde und leckere Mahlzeit, die sich im Voraus leicht zubereiten lässt.

Diese Mahlzeit besteht aus braunem Reis, gebratenem Gemüse und Teriyaki. Der braune Reis ist ein Vollkorn mit hohem Ballaststoff- und Nährstoffgehalt. Das gebratene Gemüse ist eine tolle Möglichkeit, die tägliche Dosis Vitamine und Mineralien zu erhalten. Und das Hühner-Teriyaki ist eine magere Proteinquelle, die auch noch reichlich Geschmack hat.

Diese Mahlzeit ist einfach im Voraus zuzubereiten. Einfach den braunen Reis braten, das Gemüse rösten und das Teriyaki Hühnchen anbraten. Teile die Mahlzeit in einzelne Behälter und stelle sie im Kühlschrank. Wenn die Küche fertig ist, heizen Sie einfach einen Behälter auf.

Diese Mahlzeit ist eine gute Wahl für vielbeschäftigte Menschen, die nach einer gesunden und leckeren Art zu essen suchen. Es ist auch eine tolle Mahlzeit für alle, die abnehmen oder ein gesundes Gewicht halten möchten.

Wenn du auf der Suche nach einer gesunden und leckeren Mahlzeit bist, die sich im Voraus leicht zubereiten lässt, ist diese Mahlzeit genau das Richtige. Probieren Sie es gleich aus!

Chatunterhaltungen

Mit Gemini kannst du dich über mehrere Runden hinweg unterhalten. Die Klasse ChatSession vereinfacht den Vorgang, da der Status der Unterhaltung verwaltet wird. Im Gegensatz zu generate_content müssen Sie den Unterhaltungsverlauf also nicht als Liste speichern.

Initialisieren Sie den Chat:

model = genai.GenerativeModel('gemini-1.5-flash')
chat = model.start_chat(history=[])
chat
<google.generativeai.generative_models.ChatSession at 0x7b7b68250100>

Die Methode ChatSession.send_message gibt denselben GenerateContentResponse-Typ wie GenerativeModel.generate_content zurück. Außerdem werden Ihre Nachricht und die Antwort an das Chatprotokoll angehängt:

response = chat.send_message("In one sentence, explain how a computer works to a young child.")
to_markdown(response.text)

Ein Computer ist wie eine sehr intelligente Maschine, die unsere Anweisungen verstehen und befolgen, uns bei der Arbeit hilft und sogar Spiele mit uns spielt.

chat.history
[parts {
   text: "In one sentence, explain how a computer works to a young child."
 }
 role: "user",
 parts {
   text: "A computer is like a very smart machine that can understand and follow our instructions, help us with our work, and even play games with us!"
 }
 role: "model"]

Du kannst weiterhin Nachrichten senden, um die Unterhaltung fortzusetzen. Verwenden Sie das Argument stream=True, um den Chat zu streamen:

response = chat.send_message("Okay, how about a more detailed explanation to a high schooler?", stream=True)

for chunk in response:
  print(chunk.text)
  print("_"*80)
A computer works by following instructions, called a program, which tells it what to
________________________________________________________________________________
 do. These instructions are written in a special language that the computer can understand, and they are stored in the computer's memory. The computer's processor
________________________________________________________________________________
, or CPU, reads the instructions from memory and carries them out, performing calculations and making decisions based on the program's logic. The results of these calculations and decisions are then displayed on the computer's screen or stored in memory for later use.

To give you a simple analogy, imagine a computer as a
________________________________________________________________________________
 chef following a recipe. The recipe is like the program, and the chef's actions are like the instructions the computer follows. The chef reads the recipe (the program) and performs actions like gathering ingredients (fetching data from memory), mixing them together (performing calculations), and cooking them (processing data). The final dish (the output) is then presented on a plate (the computer screen).

In summary, a computer works by executing a series of instructions, stored in its memory, to perform calculations, make decisions, and display or store the results.
________________________________________________________________________________

glm.Content-Objekte enthalten eine Liste von glm.Part-Objekten, die jeweils entweder einen Text (String) oder inline_data (glm.Blob) enthalten. Ein Blob enthält Binärdaten und ein mime_type-Objekt. Das Chatprotokoll ist in ChatSession.history als Liste von glm.Content-Objekten verfügbar:

for message in chat.history:
  display(to_markdown(f'**{message.role}**: {message.parts[0].text}'))

Nutzer: Erkläre in einem Satz, wie ein Kind einem Kind funktioniert, wie ein Computer funktioniert.

model: Ein Computer ist eine sehr intelligente Maschine, die unsere Anweisungen verstehen und befolgen, uns bei der Arbeit helfen und sogar Spiele mit uns spielen kann.

Nutzer: Okay, wie wäre es mit einer ausführlicheren Erklärung für einen Schüler der Sekundarstufe II?

model: Ein Computer funktioniert anhand von Anweisungen, einem Programm, das vorgibt, was zu tun ist. Diese Anweisungen sind in einer speziellen Sprache verfasst, die der Computer verstehen kann. Sie werden im Arbeitsspeicher des Computers gespeichert. Der Prozessor oder die CPU des Computers liest die Anweisungen aus dem Speicher und führt sie aus, führt Berechnungen durch und trifft Entscheidungen auf der Grundlage der Programmlogik. Die Ergebnisse dieser Berechnungen und Entscheidungen werden dann auf dem Computerbildschirm angezeigt oder zur späteren Verwendung im Arbeitsspeicher gespeichert.

Um Ihnen eine einfache Analogie zu vermitteln, stellen Sie sich einen Computer als Koch vor, der einem Rezept folgt. Das Rezept entspricht dem Programm und die Aktionen des Kochs entsprechen den Anweisungen, die der Computer befolgt. Der Koch liest das Rezept (das Programm) und führt Aktionen wie das Sammeln von Zutaten (Abrufen von Daten aus dem Speicher), das Vermischen (durchführen von Berechnungen) und das Kochen (Verarbeitung von Daten) aus. Das fertige Gericht (das Ergebnis) wird dann auf einem Teller (dem Computerbildschirm) präsentiert.

Zusammenfassend lässt sich sagen, dass ein Computer eine Reihe von im Speicher gespeicherten Anweisungen ausführt, um Berechnungen durchzuführen, Entscheidungen zu treffen und die Ergebnisse anzuzeigen oder zu speichern.

Anzahl der Tokens

Large Language Models haben ein Kontextfenster und die Kontextlänge wird oft über die Anzahl der Tokens gemessen. Mit der Gemini API können Sie die Anzahl der Tokens pro genai.protos.Content-Objekt bestimmen. Im einfachsten Fall können Sie einen Abfragestring so an die Methode GenerativeModel.count_tokens übergeben:

model.count_tokens("What is the meaning of life?")
total_tokens: 7

Ebenso können Sie token_count auf ChatSession prüfen:

model.count_tokens(chat.history)
total_tokens: 501

Einbettungen verwenden

Einbettung ist eine Technik, mit der Informationen als Liste von Gleitkommazahlen in einem Array dargestellt werden. Mit Gemini können Sie Text (Wörter, Sätze und Textblöcke) vektorisiert darstellen. So lassen sich Einbettungen leichter vergleichen und gegenüberstellen. Zum Beispiel sollten zwei Texte, die ein ähnliches Thema oder eine ähnliche Stimmung haben, ähnliche Einbettungen haben, die durch mathematische Vergleichstechniken wie die Kosinus-Ähnlichkeit identifiziert werden können. Weitere Informationen dazu, wie und warum Sie Einbettungen verwenden sollten, finden Sie im Leitfaden zu Einbettungen.

Verwenden Sie die Methode embed_content, um Einbettungen zu generieren. Die Methode übernimmt die Einbettung für die folgenden Aufgaben (task_type):

Aufgabentyp Beschreibung
RETRIEVAL_QUERY Gibt an, dass der angegebene Text eine Abfrage in einer Such-/Abrufeinstellung ist.
RETRIEVAL_DOCUMENT Gibt an, dass der angegebene Text ein Dokument in einer Such-/Abrufeinstellung ist. Für diesen Aufgabentyp ist ein title erforderlich.
SEMANTIC_SIMILARITY Gibt an, dass der angegebene Text für die Bestimmung der semantischen Textähnlichkeit (Semantic Textual Similarity, STS) verwendet wird.
KLASSIFIZIERUNG Gibt an, dass die Einbettungen zur Klassifizierung verwendet werden.
Clustering Gibt an, dass die Einbettungen für das Clustering verwendet werden.

Mit dem folgenden Befehl wird eine Einbettung für einen einzelnen String zum Abrufen des Dokuments generiert:

result = genai.embed_content(
    model="models/embedding-001",
    content="What is the meaning of life?",
    task_type="retrieval_document",
    title="Embedding of single string")

# 1 input > 1 vector output
print(str(result['embedding'])[:50], '... TRIMMED]')
[-0.003216741, -0.013358698, -0.017649598, -0.0091 ... TRIMMED]

Übergeben Sie in content eine Liste von Strings, um String-Batches zu verarbeiten:

result = genai.embed_content(
    model="models/embedding-001",
    content=[
      'What is the meaning of life?',
      'How much wood would a woodchuck chuck?',
      'How does the brain work?'],
    task_type="retrieval_document",
    title="Embedding of list of strings")

# A list of inputs > A list of vectors output
for v in result['embedding']:
  print(str(v)[:50], '... TRIMMED ...')
[0.0040260437, 0.004124458, -0.014209415, -0.00183 ... TRIMMED ...
[-0.004049845, -0.0075574904, -0.0073463684, -0.03 ... TRIMMED ...
[0.025310587, -0.0080734305, -0.029902633, 0.01160 ... TRIMMED ...

Die genai.embed_content-Funktion akzeptiert zwar Strings oder Stringlisten, basiert aber in Wirklichkeit auf dem genai.protos.Content-Typ (z. B. GenerativeModel.generate_content). glm.Content-Objekte sind die primären Konversationseinheiten in der API.

Das genai.protos.Content-Objekt ist zwar multimodal, aber die Methode embed_content unterstützt nur Texteinbettungen. Dieses Design bietet der API die Möglichkeit, auf multimodale Einbettungen zu erweitern.

response.candidates[0].content
parts {
  text: "A computer works by following instructions, called a program, which tells it what to do. These instructions are written in a special language that the computer can understand, and they are stored in the computer\'s memory. The computer\'s processor, or CPU, reads the instructions from memory and carries them out, performing calculations and making decisions based on the program\'s logic. The results of these calculations and decisions are then displayed on the computer\'s screen or stored in memory for later use.\n\nTo give you a simple analogy, imagine a computer as a chef following a recipe. The recipe is like the program, and the chef\'s actions are like the instructions the computer follows. The chef reads the recipe (the program) and performs actions like gathering ingredients (fetching data from memory), mixing them together (performing calculations), and cooking them (processing data). The final dish (the output) is then presented on a plate (the computer screen).\n\nIn summary, a computer works by executing a series of instructions, stored in its memory, to perform calculations, make decisions, and display or store the results."
}
role: "model"
result = genai.embed_content(
    model = 'models/embedding-001',
    content = response.candidates[0].content)

# 1 input > 1 vector output
print(str(result['embedding'])[:50], '... TRIMMED ...')
[-0.013921871, -0.03504407, -0.0051786783, 0.03113 ... TRIMMED ...

Ebenso enthält das Chatprotokoll eine Liste von genai.protos.Content-Objekten, die Sie direkt an die embed_content-Funktion übergeben können:

chat.history
[parts {
   text: "In one sentence, explain how a computer works to a young child."
 }
 role: "user",
 parts {
   text: "A computer is like a very smart machine that can understand and follow our instructions, help us with our work, and even play games with us!"
 }
 role: "model",
 parts {
   text: "Okay, how about a more detailed explanation to a high schooler?"
 }
 role: "user",
 parts {
   text: "A computer works by following instructions, called a program, which tells it what to do. These instructions are written in a special language that the computer can understand, and they are stored in the computer\'s memory. The computer\'s processor, or CPU, reads the instructions from memory and carries them out, performing calculations and making decisions based on the program\'s logic. The results of these calculations and decisions are then displayed on the computer\'s screen or stored in memory for later use.\n\nTo give you a simple analogy, imagine a computer as a chef following a recipe. The recipe is like the program, and the chef\'s actions are like the instructions the computer follows. The chef reads the recipe (the program) and performs actions like gathering ingredients (fetching data from memory), mixing them together (performing calculations), and cooking them (processing data). The final dish (the output) is then presented on a plate (the computer screen).\n\nIn summary, a computer works by executing a series of instructions, stored in its memory, to perform calculations, make decisions, and display or store the results."
 }
 role: "model"]
result = genai.embed_content(
    model = 'models/embedding-001',
    content = chat.history)

# 1 input > 1 vector output
for i,v in enumerate(result['embedding']):
  print(str(v)[:50], '... TRIMMED...')
[-0.014632266, -0.042202696, -0.015757175, 0.01548 ... TRIMMED...
[-0.010979066, -0.024494737, 0.0092659835, 0.00803 ... TRIMMED...
[-0.010055617, -0.07208932, -0.00011750793, -0.023 ... TRIMMED...
[-0.013921871, -0.03504407, -0.0051786783, 0.03113 ... TRIMMED...

Komplexere Anwendungsfälle

In den folgenden Abschnitten werden erweiterte Anwendungsfälle und untergeordnete Details des Python SDK für die Gemini API erläutert.

Sicherheits­einstellungen

Mit dem Argument safety_settings können Sie konfigurieren, was das Modell blockiert und in Prompts und Antworten zulässt. Die Sicherheitseinstellungen blockieren Inhalte mit mittlerer und/oder hoher Wahrscheinlichkeit, die als unsicher eingestuft werden, standardmäßig in allen Dimensionen. Weitere Informationen zu den Sicherheitseinstellungen

Geben Sie einen fragwürdigen Prompt ein und führen Sie das Modell mit den standardmäßigen Sicherheitseinstellungen aus. Es werden keine Kandidaten zurückgegeben:

response = model.generate_content('[Questionable prompt here]')
response.candidates
[content {
  parts {
    text: "I\'m sorry, but this prompt involves a sensitive topic and I\'m not allowed to generate responses that are potentially harmful or inappropriate."
  }
  role: "model"
}
finish_reason: STOP
index: 0
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}
]

prompt_feedback teilt dir mit, welcher Sicherheitsfilter den Prompt blockiert hat:

response.prompt_feedback
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}

Wenn Sie nun denselben Prompt mit neu konfigurierten Sicherheitseinstellungen an das Modell senden, erhalten Sie möglicherweise eine Antwort.

response = model.generate_content('[Questionable prompt here]',
                                  safety_settings={'HARASSMENT':'block_none'})
response.text

Beachten Sie außerdem, dass jeder Kandidat eine eigene safety_ratings hat, falls die Aufforderung bestanden wird, die einzelnen Antworten die Sicherheitschecks aber nicht bestehen.

Nachrichten codieren

In den vorherigen Abschnitten wurde das SDK verwendet, um Ihnen das Senden von Prompts an die API zu erleichtern. Dieser Abschnitt enthält eine typisierte Entsprechung zum vorherigen Beispiel, damit Sie die untergeordneten Details besser verstehen, wie das SDK Nachrichten codiert.

Das SDK versucht, die Nachricht in ein genai.protos.Content-Objekt zu konvertieren, das eine Liste von genai.protos.Part-Objekten enthält, die jeweils eines der folgenden Elemente enthalten:

  1. ein text (String)
  2. inline_data (genai.protos.Blob), wobei ein Blob die binäre data und einen mime_type enthält.
  3. oder andere Datentypen.

Sie können jede dieser Klassen auch als äquivalentes Wörterbuch übergeben.

Das vollständig typisierte Äquivalent zum vorherigen Beispiel ist also:

model = genai.GenerativeModel('gemini-1.5-flash')
response = model.generate_content(
    genai.protos.Content(
        parts = [
            genai.protos.Part(text="Write a short, engaging blog post based on this picture."),
            genai.protos.Part(
                inline_data=genai.protos.Blob(
                    mime_type='image/jpeg',
                    data=pathlib.Path('image.jpg').read_bytes()
                )
            ),
        ],
    ),
    stream=True)
response.resolve()

to_markdown(response.text[:100] + "... [TRIMMED] ...")

Das Zubereiten von Mahlzeiten ist eine tolle Möglichkeit, Zeit und Geld zu sparen, und kann dir auch dabei helfen, dich gesünder zu ernähren. Von ... [TRIMMED] ...

Unterhaltungen über mehrere Themen

Die zuvor gezeigte Klasse genai.ChatSession kann zwar viele Anwendungsfälle verarbeiten, aber sie setzt einige Annahmen voraus. Wenn dein Anwendungsfall nicht in diese Chatimplementierung passt, solltest du bedenken, dass genai.ChatSession nur ein Wrapper um GenerativeModel.generate_content ist. Neben Einzelanfragen können auch Unterhaltungen mit mehreren Themen verarbeitet werden.

Die einzelnen Nachrichten sind genai.protos.Content-Objekte oder kompatible Wörterbücher, wie in den vorherigen Abschnitten beschrieben. Als Wörterbuch erfordert die Nachricht die Schlüssel role und parts. Das role in einer Unterhaltung kann entweder user sein, das die Prompts bereitstellt, oder model, das die Antworten bereitstellt.

Übergeben Sie eine Liste mit genai.protos.Content-Objekten. Diese wird dann als Multi-Turn-Chat behandelt:

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

messages = [
    {'role':'user',
     'parts': ["Briefly explain how a computer works to a young child."]}
]
response = model.generate_content(messages)

to_markdown(response.text)

Stellen Sie sich einen Computer als einen besonders klugen Freund vor, der Ihnen bei vielen Dingen helfen kann. Genau wie Sie ein Gehirn zum Denken und Lernen haben, hat auch ein Computer ein Gehirn, den Prozessor. Es ist wie der Chef eines Computers, der ihm sagt, was er tun soll.

Im Inneren des Computers gibt es einen speziellen Bereich namens „Arbeitsspeicher“, der eine Art großer Aufbewahrungsbox ist. Er merkt sich all deine Anweisungen, wie das Öffnen von Spielen oder das Abspielen von Videos.

Wenn Sie Tasten auf der Tastatur drücken oder mit der Maus auf Elemente auf dem Bildschirm klicken, werden Nachrichten an den Computer gesendet. Diese Nachrichten werden über spezielle Drähte, sogenannte Kabel, zum Prozessor geleitet.

Der Prozessor liest die Nachrichten und teilt dem Computer mit, was er tun soll. Er kann Programme öffnen, Bilder anzeigen oder sogar Musik für Sie abspielen.

Alles, was Sie auf dem Bildschirm sehen, wird von der Grafikkarte erzeugt, die einem Zauberkünstler im Computer gleicht. Er verwandelt die Anweisungen des Prozessors in bunte Bilder und Videos.

Um Ihre Lieblingsspiele, -videos oder -bilder zu speichern, benötigt der Computer einen speziellen Speicherplatz, eine sogenannte Festplatte. Es ist wie eine riesige Bibliothek, in der der Computer all Ihre wertvollen Dinge sicher aufbewahrt.

Und wenn Sie sich mit dem Internet verbinden möchten, um mit Freunden zu spielen oder lustige Videos anzusehen, verwendet der Computer eine sogenannte Netzwerkkarte, um Nachrichten über Internetkabel oder WLAN-Signale zu senden und zu empfangen.

Genau wie dein Gehirn dir beim Lernen und Spielen hilft, arbeiten der Prozessor, der Arbeitsspeicher, die Grafikkarte, die Festplatte und die Netzwerkkarte des Computers zusammen, um deinen Computer zu einem superintelligenten Freund zu machen, der dir großartige Dinge ermöglicht.

Fügen Sie die Antwort und eine weitere Nachricht hinzu, um die Unterhaltung fortzusetzen.

messages.append({'role':'model',
                 'parts':[response.text]})

messages.append({'role':'user',
                 'parts':["Okay, how about a more detailed explanation to a high school student?"]})

response = model.generate_content(messages)

to_markdown(response.text)

Im Kern ist ein Computer eine Maschine, die für die Ausführung einer Reihe von Anweisungen programmiert werden kann. Es besteht aus mehreren wesentlichen Komponenten, die zusammenarbeiten, um Informationen zu verarbeiten, zu speichern und anzuzeigen:

1. Prozessor (CPU): – Das Gehirn des Computers - Ausführung von Anweisungen und Berechnungen. – Geschwindigkeit in Gigahertz (GHz). – Mehr GHz bedeutet in der Regel eine schnellere Verarbeitung.

2. Arbeitsspeicher (RAM): – Temporärer Speicher für Daten, die verarbeitet werden – Enthält Anweisungen und Daten, während das Programm läuft. – Gemessen in Gigabyte (GB) - Mehr GB RAM ermöglicht die gleichzeitige Ausführung von mehr Programmen.

3. Speicher (HDD/SSD): – Permanenter Speicher für Daten - Speichert Betriebssystem, Programme und Nutzerdateien – Gemessen in Gigabyte (GB) oder Terabyte (TB). - Festplatten sind traditionell, langsamer und kostengünstiger. - SSD (Solid State Drives) sind neuer, schneller und teurer.

4. Grafikkarte (GPU): zum Verarbeiten und Anzeigen von Bildern – Unentbehrlich für Gaming, Videobearbeitung und andere grafikintensive Aufgaben. – Gemessen im Video-RAM (VRAM) und in der Taktgeschwindigkeit

5. Motherboard: – Verbindet alle Komponenten. - Bietet Macht- und Kommunikationswege.

6. E/A-Geräte: – Ermöglichen Sie dem Nutzer die Interaktion mit dem Computer. – Beispiele: Tastatur, Maus, Monitor, Drucker.

7. Betriebssystem: Software, mit der die Computerressourcen verwaltet werden. - Bietet eine Benutzeroberfläche und grundlegende Funktionen. – Beispiele: Windows, macOS, Linux

Wenn Sie ein Programm auf Ihrem Computer ausführen, geschieht Folgendes:

  1. Die Programmanweisungen werden aus dem Speicher in den Arbeitsspeicher geladen.
  2. Der Prozessor liest die Befehle aus dem Speicher und führt sie nacheinander aus.
  3. Wenn der Befehl Berechnungen beinhaltet, führt der Prozessor diese mit seiner arithmetisch-logischen Einheit (ALU) aus.
  4. Wenn die Anweisung Daten umfasst, liest oder schreibt der Prozessor Daten in den Speicher.
  5. Die Ergebnisse der Berechnungen oder Datenmanipulationen werden im Arbeitsspeicher gespeichert.
  6. Wenn das Programm etwas auf dem Bildschirm anzeigen muss, sendet es die notwendigen Daten an die Grafikkarte.
  7. Die Grafikkarte verarbeitet die Daten und sendet sie an den Monitor, auf dem sie angezeigt werden.

Dieser Prozess wird fortgesetzt, bis das Programm seine Aufgabe abgeschlossen hat oder der Benutzer sie beendet.

Generierungskonfiguration

Mit dem Argument generation_config können Sie die Generierungsparameter ändern. Jeder Prompt, den Sie an das Modell senden, enthält Parameterwerte, die steuern, wie das Modell Antworten generiert.

model = genai.GenerativeModel('gemini-1.5-flash')
response = model.generate_content(
    'Tell me a story about a magic backpack.',
    generation_config=genai.types.GenerationConfig(
        # Only one candidate for now.
        candidate_count=1,
        stop_sequences=['x'],
        max_output_tokens=20,
        temperature=1.0)
)
text = response.text

if response.candidates[0].finish_reason.name == "MAX_TOKENS":
    text += '...'

to_markdown(text)

Früher lebte in einer kleinen Stadt inmitten üppig grüner Hügel ein junges Mädchen namens...

Nächste Schritte

  • Beim Prompt-Design werden Prompts erstellt, die die gewünschte Antwort von Language Models herbeiführen. Gut strukturierte Prompts sind wichtig, um korrekte und qualitativ hochwertige Antworten von einem Sprachmodell zu erhalten. Best Practices für das Schreiben von Prompts
  • Gemini bietet verschiedene Modellvarianten für verschiedene Anwendungsfälle, z. B. Eingabetypen und -komplexität, Implementierungen für Chat- oder andere Sprachaufgaben sowie Größenbeschränkungen. Informationen zu verfügbaren Gemini-Modellen