Tutoriel: Premiers pas avec l'API Gemini


Afficher dans l'IA de Google Exécuter dans Google Colab Consulter le code source sur GitHub

Ce guide de démarrage rapide explique comment utiliser le SDK Python pour l'API Gemini afin d'accéder aux grands modèles de langage Gemini de Google. Dans ce guide de démarrage rapide, vous allez apprendre à effectuer les opérations suivantes :

  1. Configurez votre environnement de développement et l'accès à l'API pour utiliser Gemini.
  2. Générez des réponses textuelles à partir d'entrées textuelles.
  3. Générez des réponses textuelles à partir d'entrées multimodales (texte et images).
  4. Utilisez Gemini pour les conversations multitours (chat).
  5. Utilisez des représentations vectorielles continues pour les grands modèles de langage.

Conditions préalables

Vous pouvez exécuter ce guide de démarrage rapide dans Google Colab, qui exécute ce notebook directement dans le navigateur et ne nécessite aucune configuration d'environnement supplémentaire.

Sinon, pour suivre ce guide de démarrage rapide en local, assurez-vous que votre environnement de développement répond aux exigences suivantes:

  • Python 3.9 et versions ultérieures
  • Une installation de jupyter pour exécuter le notebook

Préparation

Installer le SDK Python

Le SDK Python pour l'API Gemini se trouve dans le package google-generativeai. Installez la dépendance à l'aide de pip:

pip install -q -U google-generativeai

Importer des packages

Importez les packages nécessaires.

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

Configurer votre clé API

Avant de pouvoir utiliser l'API Gemini, vous devez obtenir une clé API. Si vous n'avez pas encore de clé, créez-en une en un clic dans Google AI Studio.

Obtenir une clé API

Dans Colab, ajoutez la clé dans le gestionnaire de secrets sous l'icône "image" du panneau de gauche. Nommez-la GOOGLE_API_KEY.

Une fois que vous disposez de la clé API, transmettez-la au SDK. Pour cela, vous avez le choix entre deux méthodes :

  • Placez la clé dans la variable d'environnement GOOGLE_API_KEY (le SDK la récupère automatiquement à partir de là).
  • Transmettre la clé à 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)

Répertorier les modèles

Vous êtes maintenant prêt à appeler l'API Gemini. Utilisez list_models pour afficher les modèles Gemini disponibles:

  • gemini-1.5-flash: notre modèle multimodal le plus rapide
  • gemini-1.5-pro: notre modèle multimodal le plus performant et le plus intelligent
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

Générer du texte à partir d'entrées de texte

Pour les requêtes contenant uniquement du texte, utilisez un modèle Gemini 1.5 ou Gemini 1.0 Pro:

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

La méthode generate_content peut gérer une grande variété de cas d'utilisation, y compris le chat multitour et l'entrée multimodale, en fonction des capacités du modèle sous-jacent. Les modèles disponibles n'acceptent que du texte et des images en entrée, et du texte en sortie.

Dans le cas le plus simple, vous pouvez transmettre une chaîne de requête à la méthode GenerativeModel.generate_content:

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

Dans les cas simples, l'accesseur response.text suffit. Pour afficher du texte Markdown mis en forme, utilisez la fonction to_markdown:

to_markdown(response.text)

La question du but de la vie a déconcerté les gens à travers les siècles, les cultures et les continents. Bien qu'il n'y ait pas de réponse universellement reconnue, de nombreuses idées ont été avancées et la réponse dépend souvent d'idées, de croyances et d'expériences de vie individuelles.

  1. Bon et bien-être:de nombreuses personnes pensent que le but de la vie est de parvenir au bonheur et au bien-être personnels. Cela peut impliquer de trouver des activités qui apportent de la joie, d’établir des liens importants, de prendre soin de sa santé physique et mentale, et de poursuivre des objectifs et des intérêts personnels.

  2. Une contribution significative:certains pensent que le but de la vie est d'apporter une contribution significative au monde. Cela peut impliquer d'exercer une profession qui profite à d'autres, de se livrer à des activités de bénévolat ou de bienfaisance, de générer de l'art ou de la littérature, ou d'inventer.

  3. Développement personnel et développement personnel:un autre objectif courant dans la vie est la réalisation de soi et le développement personnel. Cela peut impliquer d'apprendre de nouvelles compétences, de repousser ses limites, de faire face à des obstacles personnels et d'évoluer en tant que personne.

  4. Comportement éthique et moral:certains pensent que le but de la vie est d'agir éthiquement et moralement. Cela peut impliquer de respecter ses principes moraux, de faire ce qu'il faut, même quand c'est difficile, et d'essayer d'améliorer le monde.

  5. L'accomplissement spirituel:pour certains, le but de la vie est lié à des croyances spirituelles ou religieuses. Cela peut impliquer de rechercher un lien avec une puissance plus élevée, de pratiquer des rituels religieux ou de suivre des enseignements spirituels.

  6. Exploiter pleinement la vie:certaines personnes pensent que le but de la vie est de vivre tout ce qu'elle a à offrir. Cela peut impliquer de voyager, d'essayer de nouvelles choses, de prendre des risques et de vivre de nouvelles rencontres.

  7. Héritage et impact:d'autres pensent que le but de la vie est de laisser un héritage durable et d'avoir un impact sur le monde. Cela peut impliquer d’accomplir quelque chose de remarquable, d’être reconnu pour ses contributions, ou d’inspirer et de motiver d’autres.

  8. Trouver l'équilibre et l'harmonie:pour certains, le but de la vie est de trouver l'équilibre et l'harmonie dans tous les aspects de leur vie. Cela peut impliquer de jongler avec des obligations personnelles, professionnelles et sociales, de rechercher la paix intérieure et le bonheur, et de vivre une vie en accord avec ses valeurs et ses croyances.

En fin de compte, le sens de la vie est un parcours personnel, et différents individus peuvent découvrir leur propre objectif grâce à leurs expériences, leurs réflexions et leurs interactions avec le monde qui les entoure.

Si l'API n'a pas pu renvoyer de résultat, utilisez GenerateContentResponse.prompt_feedback pour voir s'il a été bloqué en raison de problèmes de sécurité liés à l'invite.

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 peut générer plusieurs réponses possibles pour une même requête. Ces réponses possibles sont appelées candidates. Vous pouvez les consulter pour sélectionner la réponse la plus adaptée.

Affichez les réponses candidates avec GenerateContentResponse.candidates:

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

Par défaut, le modèle renvoie une réponse à la fin du processus de génération. Vous pouvez également diffuser la réponse en flux continu au fur et à mesure de sa génération. Le modèle renvoie alors des fragments de la réponse dès qu'ils sont générés.

Pour diffuser les réponses, utilisez 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.
________________________________________________________________________________

Lors du traitement par flux, certains attributs de réponse ne sont pas disponibles tant que vous n'avez pas itéré sur tous les fragments de réponse. Ce processus est illustré ci-dessous:

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

L'attribut prompt_feedback fonctionne:

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
}

En revanche, les attributs tels que text ne permettent pas:

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

Générer du texte à partir d'entrées d'image et de texte

Gemini fournit différents modèles pouvant gérer la saisie multimodale (modèles Gemini 1.5) afin que vous puissiez saisir à la fois du texte et des images. Veillez à consulter les exigences concernant les images pour les requêtes.

Lorsque l'entrée de la requête inclut à la fois du texte et des images, utilisez Gemini 1.5 avec la méthode GenerativeModel.generate_content pour générer une sortie textuelle:

Ajoutons une image:

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

Utilisez un modèle Gemini 1.5 et transmettez l'image au modèle avec generate_content.

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

to_markdown(response.text)

Bols de préparation de repas teriyaki de poulet avec du riz complet, du brocoli rôti et des poivrons.

Pour fournir à la fois du texte et des images dans une requête, transmettez une liste contenant les chaînes et les images:

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)

La préparation des repas est un excellent moyen de gagner du temps et de l'argent, tout en vous aidant à manger plus sainement. Ce repas est un excellent exemple de repas sain et délicieux, qui se prépare facilement à l'avance.

Ce repas se compose de riz brun, de légumes rôtis et de poulet teriyaki. Le riz brun est une céréale complète riche en fibres et en nutriments. Les légumes rôtis sont un excellent moyen d'obtenir votre dose quotidienne de vitamines et de minéraux. Le poulet teriyaki est une source de protéines maigres et pleine de saveurs.

Ce repas est facile à préparer à l'avance. Il suffit de cuire le riz complet, de rôtir les légumes et de cuire le poulet teriyaki. Divisez ensuite le repas en récipients individuels et conservez-les au réfrigérateur. Lorsque vous êtes prêt à manger, prenez un récipient et réchauffez-le.

Ce repas convient parfaitement aux personnes occupées à la recherche d'une nourriture saine et délicieuse. C'est également un excellent repas pour ceux qui cherchent à perdre du poids ou à maintenir un poids normal.

Si vous êtes à la recherche d'un repas sain et délicieux que l'on peut préparer facilement à l'avance, ce repas est fait pour vous. Essayez cette fonctionnalité dès aujourd'hui !

Conversations de chat

Gemini vous permet de tenir des conversations au format libre dans plusieurs tours de discussion. La classe ChatSession simplifie le processus en gérant l'état de la conversation. Ainsi, contrairement à generate_content, vous n'avez pas besoin de stocker l'historique des conversations sous forme de liste.

Initialisez le chat:

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

La méthode ChatSession.send_message renvoie le même type de GenerateContentResponse que GenerativeModel.generate_content. Il ajoute également votre message et votre réponse à l'historique du chat:

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

Un ordinateur est comme une machine très intelligente qui peut comprendre et suivre nos instructions, nous aider dans notre travail et même jouer à des jeux avec nous !

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

Vous pouvez continuer à envoyer des messages pour poursuivre la conversation. Utilisez l'argument stream=True pour diffuser le chat:

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

Les objets genai.protos.Content contiennent une liste d'objets genai.protos.Part, chacun contenant du texte (chaîne) ou des données en ligne (genai.protos.Blob), où un blob contient des données binaires et un élément mime_type. L'historique des discussions est disponible sous la forme d'une liste d'objets genai.protos.Content dans ChatSession.history:

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

Utilisateur: en une phrase, explique à un jeune enfant comment un ordinateur fonctionne.

model: un ordinateur est comme une machine très intelligente, capable de comprendre et de suivre nos instructions, de nous aider dans notre travail et même de jouer à des jeux avec nous.

utilisateur: Alors, que diriez-vous d'une explication plus détaillée à un lycéen ?

model: un ordinateur fonctionne en suivant des instructions, appelées programmes, qui lui indiquent ce qu'il doit faire. Ces instructions sont écrites dans un langage spécial que l'ordinateur peut comprendre et sont stockées dans la mémoire de l'ordinateur. Le processeur de l'ordinateur, ou CPU, lit les instructions à partir de la mémoire et les exécute, effectue des calculs et prend des décisions basées sur la logique du programme. Les résultats de ces calculs et décisions sont ensuite affichés sur l'écran de l'ordinateur ou stockés en mémoire pour une utilisation ultérieure.

Pour vous faire une analogie simple, imaginez un ordinateur en tant que cuisinier suivant une recette. La recette est comme le programme, et les actions du chef sont comme les instructions que l'ordinateur suit. Le chef lit la recette (le programme) et effectue des actions comme rassembler les ingrédients (extraire des données de la mémoire), les mélanger (effectuer des calculs) et les cuire (traiter des données). Le dernier plat (la sortie) est ensuite présenté dans une assiette (l'écran de l'ordinateur).

En résumé, un ordinateur exécute une série d'instructions, stockées dans sa mémoire, pour effectuer des calculs, prendre des décisions et afficher ou stocker les résultats.

Compter les jetons

Les grands modèles de langage disposent d'une fenêtre de contexte, et la longueur du contexte est souvent mesurée en nombre de jetons. L'API Gemini vous permet de déterminer le nombre de jetons pour chaque objet genai.protos.Content. Dans le cas le plus simple, vous pouvez transmettre une chaîne de requête à la méthode GenerativeModel.count_tokens comme suit:

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

De même, vous pouvez vérifier token_count pour votre ChatSession:

model.count_tokens(chat.history)
total_tokens: 501

Utiliser des représentations vectorielles continues

La représentation vectorielle continue est une technique utilisée pour représenter des informations sous la forme d'une liste de nombres à virgule flottante dans un tableau. Avec Gemini, vous pouvez représenter du texte (mots, phrases et blocs de texte) sous forme vectorisée, ce qui facilite la comparaison des représentations vectorielles continues. Par exemple, deux textes qui partagent un sujet ou un sentiment similaire doivent avoir des représentations vectorielles continues similaires, qui peuvent être identifiées à l'aide de techniques de comparaison mathématique telles que la similarité cosinus. Pour savoir comment et pourquoi utiliser des représentations vectorielles continues, consultez le guide sur les représentations vectorielles continues.

Utilisez la méthode embed_content pour générer des représentations vectorielles continues. La méthode gère l'intégration pour les tâches suivantes (task_type):

Type de tâche Description
RETRIEVAL_QUERY Spécifie que le texte donné est une requête dans un contexte de recherche/récupération.
RETRIEVAL_DOCUMENT Spécifie que le texte donné est un document dans un contexte de recherche/récupération. L'utilisation de ce type de tâche nécessite un title.
SEMANTIC_SIMILARITY Indique que le texte donné sera utilisé pour la similarité textuelle sémantique (STS).
CLASSIFICATION Spécifie que les représentations vectorielles continues seront utilisées pour la classification.
CLUSTER Spécifie que les représentations vectorielles continues seront utilisées pour le clustering.

Le code suivant génère une représentation vectorielle continue pour une seule chaîne afin de récupérer des documents:

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]

Pour gérer des lots de chaînes, transmettez une liste de chaînes dans content:

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

Bien que la fonction genai.embed_content accepte des chaînes simples ou des listes de chaînes, elle est en fait construite autour du type genai.protos.Content (comme GenerativeModel.generate_content). Les objets genai.protos.Content sont les principales unités de conversation dans l'API.

Bien que l'objet genai.protos.Content soit multimodal, la méthode embed_content n'accepte que les représentations vectorielles continues de texte. Cette conception donne à l'API la possibilité d'étendre les représentations vectorielles continues multimodales.

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

De même, l'historique des discussions contient une liste d'objets genai.protos.Content, que vous pouvez transmettre directement à la fonction embed_content:

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

Cas d'utilisation avancés

Les sections suivantes présentent des cas d'utilisation avancés et des informations de niveau inférieur du SDK Python pour l'API Gemini.

Paramètres de sécurité

L'argument safety_settings vous permet de configurer ce que le modèle bloque et autorise à la fois dans les requêtes et les réponses. Par défaut, les paramètres de sécurité bloquent le contenu dont la probabilité est moyenne et/ou élevée d'être dangereux pour toutes les dimensions. En savoir plus sur les paramètres de sécurité

Saisissez une requête suspecte et exécutez le modèle avec les paramètres de sécurité par défaut. Aucun candidat ne sera renvoyé:

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 vous indique quel filtre de sécurité a bloqué l'invite:

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
}

À présent, envoyez la même requête au modèle avec les nouveaux paramètres de sécurité. Vous obtiendrez peut-être une réponse.

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

Notez également que chaque candidat dispose de son propre safety_ratings, au cas où l'invite réussirait, mais que les réponses individuelles échoueraient aux contrôles de sécurité.

Encoder les messages

Dans les sections précédentes, nous nous appuyons sur le SDK pour faciliter l'envoi d'invites à l'API. Cette section propose un équivalent avec saisie semi-automatique à l'exemple précédent, afin que vous puissiez mieux comprendre les détails de niveau inférieur concernant la façon dont le SDK encode les messages.

La bibliothèque cliente google.ai.generativelanguage est sous-jacente au SDK Python:

Le SDK tente de convertir votre message en objet genai.protos.Content, qui contient une liste d'objets genai.protos.Part contenant chacun:

  1. a text (chaîne)
  2. inline_data (genai.protos.Blob), où un blob contient le binaire data et un mime_type.

Vous pouvez également transmettre l'une de ces classes en tant que dictionnaire équivalent.

Ainsi, l'équivalent complet de l'exemple précédent est:

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] ...")

La préparation des repas est un excellent moyen de gagner du temps et de l'argent, tout en vous aidant à manger plus sainement. Par ... [TRIMMED] ...

Conversations multitours

Bien que la classe genai.ChatSession présentée précédemment puisse gérer de nombreux cas d'utilisation, elle émet quelques hypothèses. Si votre cas d'utilisation n'est pas adapté à cette implémentation du chat, n'oubliez pas que genai.ChatSession n'est qu'un wrapper pour GenerativeModel.generate_content. En plus des requêtes simples, il peut gérer les conversations multitours.

Les messages individuels sont des objets genai.protos.Content ou des dictionnaires compatibles, comme indiqué dans les sections précédentes. En tant que dictionnaire, le message nécessite les clés role et parts. Le role d'une conversation peut être soit user, qui fournit les invites, soit model, qui fournit les réponses.

Transmettez une liste d'objets genai.protos.Content. Elle sera traitée comme un chat multitour:

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)

Imaginez un ordinateur comme un ami très intelligent qui peut vous aider pour de nombreuses tâches. Tout comme vous avez un cerveau pour penser et apprendre, un ordinateur possède également un cerveau, appelé processeur. C'est comme le patron de l'ordinateur, lui dire ce qu'il doit faire.

À l'intérieur de l'ordinateur, il y a un endroit spécial appelé mémoire, qui ressemble à une grande boîte de stockage. Il mémorise tout ce que vous lui demandez de faire, comme ouvrir des jeux ou regarder des vidéos.

Lorsque vous appuyez sur les boutons du clavier ou cliquez sur des éléments à l'écran avec la souris, vous envoyez des messages à l'ordinateur. Ces messages transitent par des fils spéciaux, appelés câbles, jusqu'au processeur.

Le processeur lit les messages et indique à l'ordinateur ce qu'il doit faire. Il peut ouvrir des programmes, afficher des images ou même écouter de la musique.

Tout ce que vous voyez à l'écran est créé par la carte graphique, une sorte d'artiste magique à l'intérieur de l'ordinateur. Il prend les instructions du processeur et les transforme en images et vidéos colorées.

Pour enregistrer vos jeux, vidéos ou images préférés, l'ordinateur utilise un espace de stockage spécial appelé disque dur. C'est comme une bibliothèque géante où l'ordinateur stocke toutes tes précieuses choses en sécurité.

Et lorsque vous souhaitez vous connecter à Internet pour jouer avec vos amis ou regarder des vidéos amusantes, l’ordinateur utilise ce que l’on appelle une carte réseau pour envoyer et recevoir des messages via des câbles Internet ou des signaux Wi-Fi.

Ainsi, tout comme votre cerveau vous aide à apprendre et à jouer, le processeur, la mémoire, la carte graphique, le disque dur et la carte réseau de l'ordinateur fonctionnent tous ensemble pour faire de votre ordinateur un compagnon ultra-intelligent qui peut vous aider à faire des choses incroyables !

Pour poursuivre la conversation, ajoutez la réponse et un autre message.

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)

À la base, un ordinateur est une machine qui peut être programmée pour exécuter un ensemble d'instructions. Il est constitué de plusieurs composants essentiels qui fonctionnent ensemble pour traiter, stocker et afficher des informations:

1. Processeur (CPU) : cerveau de l'ordinateur. - Exécute les instructions et effectue des calculs. - Vitesse mesurée en gigahertz (GHz). - Une fréquence plus élevée signifie généralement un traitement plus rapide.

2. Mémoire (RAM) : stockage temporaire des données en cours de traitement. - Contient les instructions et les données pendant l'exécution du programme. - Mesuré en gigaoctets (Go). - Une plus grande quantité de Go de RAM permet d'exécuter plus de programmes simultanément.

3. Stockage (HDD/SSD) : Stockage permanent des données. - Stocke le système d'exploitation, les programmes et les fichiers utilisateur. - Mesuré en gigaoctets (Go) ou téraoctets (To). - Les disques durs (HDD) sont traditionnels, plus lents et moins chers. - Les disques durs SSD sont plus récents, plus rapides et plus chers.

4. Carte graphique (GPU) : traite et affiche les images. - Cet outil est très utile pour les jeux vidéo, le montage vidéo et d'autres tâches nécessitant d'importantes capacités de traitement graphique. - Mesuré en RAM vidéo (VRAM) et vitesse d'horloge.

5. Carte mère : - connecte tous les composants. - Fournit des voies d’alimentation et de communication.

6. Périphériques d'entrée/de sortie (E/S) : - Autorise l'utilisateur à interagir avec l'ordinateur. - Exemples: clavier, souris, écran, imprimante.

7. Système d'exploitation (OS) : logiciel qui gère les ressources de l'ordinateur. - Fournit une interface utilisateur et des fonctionnalités de base. - Exemples: Windows, macOS, Linux.

Lorsque vous exécutez un programme sur votre ordinateur, voici ce qui se produit:

  1. Les instructions du programme sont chargées depuis le stockage vers la mémoire.
  2. Le processeur lit les instructions à partir de la mémoire et les exécute une par une.
  3. Si l'instruction implique des calculs, le processeur les exécute à l'aide de son unité logique arithmétique (ALU).
  4. Si l'instruction implique des données, le processeur lit ou écrit dans la mémoire.
  5. Les résultats des calculs ou de la manipulation des données sont stockés en mémoire.
  6. Si le programme doit afficher un élément à l'écran, il envoie les données nécessaires à la carte graphique.
  7. La carte graphique traite les données et les envoie à l'écran, qui les affiche.

Ce processus se poursuit jusqu'à ce que le programme ait terminé sa tâche ou jusqu'à ce que l'utilisateur l'arrête.

Configuration de génération

L'argument generation_config vous permet de modifier les paramètres de génération. Chaque requête que vous envoyez au modèle inclut des valeurs de paramètre qui contrôlent la façon dont le modèle génère les réponses.

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)

Il était une fois, dans une petite ville nichée au cœur de collines verdoyantes, une jeune fille nommée...

Étapes suivantes

  • La conception de requête consiste à créer des requêtes qui génèrent la réponse souhaitée de la part des modèles de langage. Rédiger des requêtes bien structurées est essentiel pour garantir des réponses précises et de haute qualité à partir d'un modèle de langage. Découvrez les bonnes pratiques concernant la requête de rédaction des requêtes.
  • Gemini propose plusieurs variantes de modèles pour répondre aux besoins de différents cas d'utilisation, comme le type et la complexité des entrées, les implémentations de tâches liées au chat ou à d'autres langues de dialogue, ainsi que les contraintes de taille. Découvrez les modèles Gemini disponibles.