Erste Schritte mit der Gemini API: Python

Auf 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, das Ihnen Zugriff auf die Large Language Models Gemini von Google bietet. 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 Multi-Turn-Unterhaltungen (Chats).
  5. Verwenden Sie Einbettungen für Large Language Models.

Voraussetzungen

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

Alternativ können Sie für diese Kurzanleitung auch 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 mit „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 zuerst einen API-Schlüssel abrufen. Falls 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 im linken Bereich unter „🚀“ zum Secret-Manager 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 übernimmt ihn dort automatisch.
  • Schlüssel an genai.configure(api_key=...) übergeben
# 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. Verwenden Sie list_models, um die verfügbaren Gemini-Modelle aufzurufen:

  • gemini-pro: für reine Text-Prompts optimiert.
  • gemini-pro-vision: für Prompts aus Text und Bildern optimiert.
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

Das genai-Paket unterstützt auch die PaLM-Modellfamilie, aber nur die Gemini-Modelle unterstützen die generischen, multimodalen Funktionen der generateContent-Methode.

Text aus Texteingaben generieren

Verwenden Sie für reine Text-Prompts das Modell gemini-pro:

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

Die Methode generate_content kann eine Vielzahl von Anwendungsfällen verarbeiten, einschließlich multimodaler Eingaben und Chats, 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 Prompt-String 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 Menschen über Jahrhunderte, Kulturen und Kontinente hinweg fasziniert. Es gibt zwar keine allgemein anerkannte Antwort, aber viele Ideen wurden veröffentlicht und die Antwort hängt häufig von individuellen Ideen, Überzeugungen und Lebenserfahrungen ab.

  1. Glück und Wohlbefinden:Viele Menschen glauben, dass das Ziel des Lebens darin besteht, persönliches Glück und Wohlbefinden zu erzielen. Das könnte auch bedeuten, Aktivitäten zu finden, die Freude machen, Beziehungen aufbauen, sich um die körperliche und psychische Gesundheit kümmern und persönliche Ziele und Interessen verfolgen.

  2. Sinnvoller Beitrag:Manche glauben, dass das Leben darin besteht, einen sinnvollen Beitrag zur Welt zu leisten. Dies kann auch bedeuten, dass du einen Beruf ausübst, von dem andere profitieren, ehrenamtlich oder karitativ tätig sind, Kunst oder Literatur generieren oder Erfindungen machen.

  3. Selbsterkenntnis und persönliche Entwicklung:Ein weiteres häufiges Ziel im Leben ist das Streben nach Selbstverwirklichung und persönliche Entwicklung. Dazu kann es gehören, neue Fähigkeiten zu erlernen, eigene Grenzen zu überschreiten, persönlichen Hindernissen zu begegnen und sich als Person weiterzuentwickeln.

  4. Ethisches und moralisches Verhalten:Manche glauben, dass das Ziel des Lebens darin besteht, ethisch und moralisch zu handeln. Dies kann bedeuten, dass Sie sich an die moralischen Prinzipien halten, das Richtige tun, selbst wenn es schwierig ist, und zu versuchen, die Welt zu einem besseren Ort zu machen.

  5. Spirituelle Erfüllung:Bei einigen ist der Zweck des Lebens mit spirituellen oder religiösen Überzeugungen verbunden. Dies kann auch bedeuten, eine Verbindung zu einer höheren Macht zu suchen, religiöse Rituale durchzuführen oder spirituellen Lehren zu folgen.

  6. Das Leben vollständig erleben:Manche Menschen glauben, dass das Ziel des Lebens darin besteht, alles zu erleben, was es zu bieten hat. Dazu kann es gehören, zu reisen, neue Dinge auszuprobieren, Risiken einzugehen und neue Begegnungen anzunehmen.

  7. Vermächtnis und Auswirkungen:Andere glauben, dass der Sinn des Lebens darin besteht, ein bleibendes Vermächtnis zu hinterlassen und etwas in der Welt zu bewirken. Dies kann bedeuten, dass Sie etwas Bemerkenswertes erreichen, für Ihre Beiträge in Erinnerung bleiben oder andere inspirieren und motivieren.

  8. Ausgewogenheit und Harmonie finden: Für manche besteht der Sinn des Lebens darin, in allen Bereichen ihres Lebens Ausgewogenheit und Harmonie zu finden. Dies könnte dazu führen, dass persönliche, berufliche und soziale Verpflichtungen in Einklang gebracht werden müssen, innere Ruhe und Zufriedenheit suchen und ein Leben führen, das mit den eigenen Werten und Überzeugungen in Einklang steht.

Letztendlich ist der Sinn des Lebens eine persönliche Reise. Verschiedene Menschen entdecken ihre ganz eigenen Ziele durch ihre Erfahrungen, Reflektionen und Interaktionen mit der Welt um sie herum.

Wenn die API kein Ergebnis zurückgibt, verwenden Sie GenerateContentResponse.prompt_feedback, um zu sehen, ob sie aufgrund von Sicherheitsbedenken bezüglich der Aufforderung 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. Sie können sie prüfen und die am besten geeignete Antwort als Antwort auswählen.

Sehen Sie sich die möglichen Antworten 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 eine Antwort zurück, nachdem der gesamte Generierungsprozess abgeschlossen ist. Sie können die Antwort auch streamen, während sie generiert wird. Das Modell gibt dann Teile der Antwort zurück, sobald sie generiert wurden.

Verwenden Sie zum Streamen von Antworten GenerativeModel.generate_content(..., stream=True).

%%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 iteriert haben. Dies wird unten veranschaulicht:

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

Das Attribut prompt_feedback funktioniert:

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
}

Aber Attribute wie text tun nicht Folgendes:

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 ein multimodales Modell (gemini-pro-vision), das sowohl Text als auch Bilder und Eingaben akzeptiert. Die GenerativeModel.generate_content API verarbeitet multimodale Prompts und gibt eine Textausgabe zurück.

Fügen wir ein Bild hinzu:

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 das Modell gemini-pro-vision und übergeben Sie das Bild mit generate_content an das Modell.

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

to_markdown(response.text)

Chicken Teriyaki Kochschüsseln mit braunem Reis, gebratenem Brokkoli und Paprika.

Wenn Sie in einem Prompt sowohl Text als auch Bilder bereitstellen möchten, ü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 großartige 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 köstliche Mahlzeit, die einfach im Voraus zubereitet werden kann.

Dieses Gericht besteht aus braunem Reis, gebratenem Gemüse und Hühnchen-Teriyaki. Brauner Reis ist ein Vollkorn mit einem hohen Ballaststoff- und Nährstoffgehalt. Das gebratene Gemüse ist eine gute Möglichkeit, deine tägliche Dosis an Vitaminen und Mineralien zu dir zu nehmen. Und Teriyaki mit Hühnchen ist eine magere Proteinquelle, die außerdem geschmackvoll ist.

Diese Mahlzeit lässt sich leicht im Voraus zubereiten. Kochen Sie einfach den braunen Reis, braten Sie das Gemüse und kochen Sie das Hühnchen-Teriyaki. Die Mahlzeit in einzelne Behälter teilen und im Kühlschrank aufbewahren. Wenn du essen möchtest, nimm dir einfach einen Behälter und erhitze ihn.

Diese Mahlzeit eignet sich hervorragend für vielbeschäftigte Personen, die auf der Suche nach gesunden und leckeren Speisen sind. Es ist auch eine großartige 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 einfach im Voraus zubereitet werden kann, ist diese Mahlzeit eine gute Option. Probieren Sie es gleich aus!

Chatunterhaltungen

Gemini bietet Ihnen die Möglichkeit, frei formulierte Unterhaltungen über mehrere Runden hinweg zu führen. Die ChatSession-Klasse vereinfacht den Prozess, indem sie den Status der Unterhaltung verwaltet. Im Gegensatz zu generate_content müssen Sie den Unterhaltungsverlauf nicht als Liste speichern.

Initialisieren Sie den Chat:

model = genai.GenerativeModel('gemini-pro')
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 kann, uns bei der Arbeit hilft und sogar mit uns Spiele 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 mit glm.Part-Objekten, die jeweils entweder einen Text (String) oder Inline-Daten (glm.Blob) enthalten, wobei ein Blob Binärdaten und einen mime_type enthält. Das Chatprotokoll ist als Liste mit glm.Content Objekten in ChatSession.history verfügbar:

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

Nutzer: Erklären Sie in einem Satz, wie ein Computer für ein Kind funktioniert.

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

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

model: Ein Computer folgt den Anweisungen, die als Programm bezeichnet werden. Sie sind in einer speziellen Sprache verfasst, die der Computer versteht, und 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 Grundlage der Programmlogik. Die Ergebnisse dieser Berechnungen und Entscheidungen werden dann auf dem Bildschirm des Computers angezeigt oder zur späteren Verwendung im Speicher gespeichert.

Um Ihnen eine einfache Analogie zu geben, stellen Sie sich einen Computer wie einen Koch vor, der ein Rezept nachkocht. Das Rezept ist wie das 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 (Datenverarbeitung) aus. Das fertige Gericht (Ausgabe) wird dann auf einem Teller (dem Computerbildschirm) präsentiert.

Zusammenfassend lässt sich sagen, dass ein Computer eine Reihe von im Arbeitsspeicher 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 in Bezug auf die Anzahl der Tokens gemessen. Mit der Gemini API können Sie die Anzahl der Tokens pro glm.Content-Objekt ermitteln. 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

Mit dem Einbetten werden Informationen als Liste von Gleitkommazahlen in einem Array dargestellt. Mit Gemini können Sie Text (Wörter, Sätze und Textblöcke) in einer vektorisierten Form darstellen, wodurch sich Einbettungen leichter vergleichen und gegenüberstellen lassen. Zum Beispiel sollten zwei Texte, die ein ähnliches Thema oder eine ähnliche Stimmung teilen, ähnliche Einbettungen haben, die sich durch mathematische Vergleichstechniken wie Kosinus-Ähnlichkeit identifizieren lassen. Weitere Informationen darüber, 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 das Einbetten für die folgenden Aufgaben (task_type):

Aufgabentyp Beschreibung
RETRIEVAL_QUERY Gibt an, dass der gegebene Text eine Abfrage in einer Such-/Abrufeinstellung ist.
RETRIEVAL_DOCUMENT Gibt an, dass der gegebene 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.
Gruppierung Gibt an, dass die Einbettungen für das Clustering verwendet werden.

Folgendes generiert eine Einbettung für einen einzelnen String zum Abrufen von Dokumenten:

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 eine Liste von Strings in content, 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 einfache Strings oder Stringlisten, basiert aber tatsächlich auf dem glm.Content-Typ (z. B. GenerativeModel.generate_content). glm.Content-Objekte sind die primären Konversationseinheiten in der API.

Obwohl das glm.Content-Objekt multimodal ist, unterstützt die embed_content-Methode nur Texteinbettungen. Dieses Design gibt der API die Möglichkeit, auf multimodale Einbettungen auszuweiten.

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 ...

Analog enthält das Chatprotokoll eine Liste von glm.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 beschrieben.

Sicherheits­einstellungen

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

Geben Sie eine fragwürdige Aufforderung ein und führen Sie das Modell mit den Standardsicherheitseinstellungen aus. Es werden dann 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
}
]

Das prompt_feedback teilt Ihnen mit, welcher Sicherheitsfilter die Aufforderung 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
}

Geben Sie nun dem Modell mit den neu konfigurierten Sicherheitseinstellungen dieselbe Aufforderung. Möglicherweise erhalten Sie eine Antwort.

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

Beachten Sie auch, dass jeder Kandidat einen eigenen safety_ratings hat, falls der Prompt bestanden wird, die einzelnen Antworten die Sicherheitschecks jedoch nicht bestehen.

Nachrichten codieren

In den vorherigen Abschnitten wurde das SDK verwendet, um das Senden von Aufforderungen an die API zu vereinfachen. Dieser Abschnitt bietet ein vollständiges typisiertes Äquivalent zum vorherigen Beispiel, damit Sie die untergeordneten Details zur Codierung von Nachrichten mit dem SDK besser verstehen können.

Dem Python SDK liegt die google.ai.generativelanguage-Clientbibliothek zugrunde:

import google.ai.generativelanguage as glm

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

  1. text (String)
  2. inline_data (glm.Blob), wobei ein Blob das binäre data und einen mime_type enthält.

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

Das vollständige typisierte Äquivalent zum vorherigen Beispiel lautet also:

model = genai.GenerativeModel('gemini-pro-vision')
response = model.generate_content(
    glm.Content(
        parts = [
            glm.Part(text="Write a short, engaging blog post based on this picture."),
            glm.Part(
                inline_data=glm.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 großartige Möglichkeit, Zeit und Geld zu sparen, und kann dir auch dabei helfen, dich gesünder zu ernähren. Von ... [TRIMMED] ...

Multi-Turn Conversations

Die oben gezeigte genai.ChatSession-Klasse kann zwar viele Anwendungsfälle bewältigen, umfasst aber einige Annahmen. Wenn Ihr Anwendungsfall nicht in diese Chatimplementierung passt, denken Sie daran, dass genai.ChatSession nur ein Wrapper um GenerativeModel.generate_content ist. Neben Einzelanfragen können damit auch Unterhaltungen mit mehreren Antworten verarbeitet werden.

Die einzelnen Nachrichten sind glm.Content-Objekte oder kompatible Wörterbücher, wie in den vorherigen Abschnitten beschrieben. Da die Nachricht ein Wörterbuch ist, sind die Schlüssel role und parts erforderlich. Die role in einer Unterhaltung kann entweder der user sein, der die Prompts bereitstellt, oder der model, der die Antworten bereitstellt.

Übergeben Sie eine Liste mit glm.Content-Objekten, damit dieser als Multi-Turn-Chat behandelt wird:

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

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 wirklich klugen Freund vor, der Ihnen bei vielen Dingen helfen kann. So wie Sie ein Gehirn zum Denken und Lernen haben, hat auch ein Computer ein Gehirn, einen sogenannten Prozessor. Es ist wie der Chef eines Computers, der ihm sagt, was er zu tun hat.

Im Computer befindet sich ein besonderer Ort, der sogenannte Speicher, eine große Aufbewahrungsbox. Er merkt sich alles, was du ihm sagst, 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 Kabel, 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, werden von der Grafikkarte erstellt. Diese ist wie ein Zauberkünstler im Inneren des Computers. Er nimmt die Anweisungen des Prozessors und verwandelt sie in bunte Bilder und Videos.

Zum Speichern Ihrer Lieblingsspiele, -videos oder -bilder benötigt der Computer einen speziellen Speicherplatz, eine Festplatte. Es ist wie eine riesige Bibliothek, in der der Computer all Ihre wertvollen Dinge sicher aufbewahren kann.

Wenn Sie eine Internetverbindung herstellen möchten, um mit Freunden zu spielen oder sich lustige Videos anzusehen, kann der Computer über eine sogenannte Netzwerkkarte Nachrichten über Internetkabel oder WLAN-Signale senden und empfangen.

So wie Ihr Gehirn Sie beim Lernen und Spielen unterstützt, sind der Prozessor, der Arbeitsspeicher, die Grafik-, die Festplatte und die Netzwerkkarte des Computers ein perfektes Team und Sie werden zu einem klugen Freund, der Ihnen helfen kann, erstaunliche Dinge zu tun!

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)

Ein Computer ist im Grunde eine Maschine, die so programmiert werden kann, dass sie eine Reihe von Anweisungen ausführt. Es besteht aus mehreren wesentlichen Komponenten, die zusammen Informationen verarbeiten, speichern und anzeigen:

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

2. Arbeitsspeicher (RAM): – Temporärer Speicher für die verarbeiteten Daten - Enthält Anweisungen und Daten, während das Programm ausgeführt wird. – gemessen in Gigabyte (GB) – Mit mehr GB RAM können mehr Programme gleichzeitig ausgeführt werden.

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

4. Grafikkarte (GPU): – Verarbeitet und zeigt Bilder an. – Unverzichtbar für Gaming, Videobearbeitung und andere grafikintensive Aufgaben – Gemessen im Video-RAM (VRAM) und Taktgeschwindigkeit.

5. Motherboard: – Verbindet alle Komponenten. – Liefert Leistung und Kommunikationswege.

6. Ein-/Ausgabegeräte (E/A): – Ermöglicht dem Nutzer die Interaktion mit dem Computer. - Beispiele: Tastatur, Maus, Monitor, Drucker

7. Betriebssystem: – Software, die die Ressourcen des Computers verwaltet - 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 Anweisungen aus dem Speicher und führt sie nacheinander aus.
  3. Wenn die Anweisung Berechnungen umfasst, führt der Prozessor diese mithilfe seiner arithmetischen Logikeinheit (ALU) aus.
  4. Wenn die Anweisung Daten umfasst, liest oder schreibt der Prozessor in den Speicher.
  5. Die Ergebnisse der Berechnungen oder Datenmanipulation werden im Arbeitsspeicher gespeichert.
  6. Wenn das Programm etwas auf dem Bildschirm anzeigen muss, werden die erforderlichen Daten an die Grafikkarte gesendet.
  7. Die Grafikkarte verarbeitet die Daten und sendet sie an den Monitor zur Anzeige der Daten.

Dieser Vorgang wird fortgesetzt, bis das Programm die Aufgabe abgeschlossen hat oder vom Nutzer beendet wird.

Konfiguration der Generierung

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

model = genai.GenerativeModel('gemini-pro')
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)

Es war einmal, in einer kleinen Stadt inmitten von üppig grünen Hügeln lebte ein junges Mädchen namens...

Nächste Schritte

  • Prompt-Design ist der Prozess des Erstellens von Aufforderungen, die die gewünschte Antwort von Language Models holen. Das Formulieren gut strukturierter Prompts ist ein wesentlicher Bestandteil der Gewährleistung korrekter und qualitativ hochwertiger Antworten von einem Language Model. Best Practices für das Verfassen von Prompts
  • Gemini bietet verschiedene Modellvarianten für die Anforderungen verschiedener Anwendungsfälle wie Eingabetypen und -komplexität, Implementierungen für Chat- oder andere Dialogsprachaufgaben sowie Größenbeschränkungen. Weitere Informationen zu den verfügbaren Gemini-Modellen
  • Gemini bietet Optionen zum Anfordern von Erhöhen der Ratenbegrenzung. Die Ratenbegrenzung für Gemini-Pro-Modelle beträgt 60 Anfragen pro Minute (RPM).