Tutoriel: Premiers pas avec l'API Gemini


Afficher dans l'IA de Google Exécuter dans Google Colab Afficher la source sur GitHub

Ce guide de démarrage rapide explique comment utiliser le SDK Python pour l'API Gemini, qui vous permet 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 votre accès à l'API pour utiliser Gemini.
  2. Générez des réponses textuelles à partir d'entrées de texte.
  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.

Prérequis

Vous pouvez suivre 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.

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 ou version ultérieure
  • Une installation de jupyter pour exécuter le notebook.

Préparation

Installer le SDK Python

Le SDK Python pour l'API Gemini est contenu 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

Pour pouvoir utiliser l'API Gemini, vous devez d'abord obtenir une clé API. Si vous ne possédez pas encore de clé, créez-en une en un clic dans Google AI Studio.

Obtenir une clé API

Dans Colab, ajoutez la clé au gestionnaire de secrets sous le bouton "EIDR" du panneau de gauche. Donnez-lui le nom GOOGLE_API_KEY.

Une fois la clé API obtenue, 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érera 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 pouvez maintenant 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 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 textuelles uniquement, 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 la saisie multimodale, en fonction de ce que le modèle sous-jacent prend en charge. 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 d'invite à 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 des cas simples, l'accesseur response.text suffit. Pour afficher le texte Markdown formaté, utilisez la fonction to_markdown:

to_markdown(response.text)

Les requêtes sur les objectifs de la vie ont déconcerté les individus à 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é présentées, et la réponse dépend souvent des idées, des croyances et des expériences de vie individuelles.

  1. bonheur et bien-être:de nombreuses personnes pensent que l'objectif de la vie est d'atteindre le bonheur et le bien-être personnels. Il peut s'agir de repérer des activités qui procurent de la joie, d'établir des liens solides, de prendre soin de sa santé physique et mentale, et de poursuivre ses objectifs et centres d'intérêt personnels.

  2. Contribution significative:certains pensent que le but de la vie est d'apporter une contribution significative au monde. Il peut s'agir d'exercer une profession qui profite à d'autres, de s'engager dans des activités bénévoles ou caritatives, de générer des œuvres d'art ou de littérature, ou d'inventer.

  3. La réalisation de soi et le développement personnel:la quête de la réalisation de soi et du développement personnel est un autre objectif courant dans la vie. Il peut s'agir d'acquérir 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 l'objectif de la vie est d'agir éthiquement et moralement. Cela peut impliquer d'adhérer aux principes moraux, de faire ce qu'il faut, même quand c'est difficile, et d'essayer de rendre le monde meilleur.

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

  6. Expérimenter la vie dans son intégralité:certaines personnes croient que le but de la vie est d'expérimenter tout ce qu'elle a à offrir. Il peut s'agir de voyager, d'essayer de nouvelles choses, de prendre des risques et de se lancer dans de nouvelles rencontres.

  7. Héritage et impact:d'autres pensent que l'objectif de la vie est de laisser un héritage durable et d'avoir un impact sur le monde. Il peut s'agir d'accomplir quelque chose de remarquable, d'être mémorisé pour ses contributions, ou d'inspirer et de motiver les autres.

  8. À la recherche de l'équilibre et de l'harmonie:pour certains, le but de la vie est de trouver l'équilibre et l'harmonie dans tous les aspects de la vie. Cela peut impliquer de jongler avec des obligations personnelles, professionnelles et sociales, de rechercher la paix intérieure et le contentement, et de mener une vie en conformité 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 but unique 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 si elle a été bloquée 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 examiner afin de sélectionner la plus appropriée comme réponse.

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 une fois l'intégralité du processus de génération terminée. Vous pouvez également diffuser la réponse en cours de génération. Le modèle renvoie 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 de l'insertion en flux continu, certains attributs de réponse ne sont pas disponibles tant que vous n'avez pas itéré sur tous les fragments de réponse. Cela 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, ce n'est pas le cas des attributs text:

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'images et de textes

Gemini fournit divers modèles capables de gérer des entrées multimodales (modèles Geni 1.5 et Gemini 1.0 Pro Vision) afin que vous puissiez saisir à la fois du texte et des images. Veillez à consulter les exigences concernant les images pour les invites.

Lorsque l'entrée de la requête comprend à la fois du texte et des images, utilisez un modèle Gemini 1.5 ou Gemini 1.0 Pro Vision avec la méthode GenerativeModel.generate_content pour générer le texte en sortie:

Incluons 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 poulet teriyaki accompagnés de riz complet, de brocoli rôti et de 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 d’économiser du temps et de l’argent, et elle peut également vous aider à manger plus sainement. Ce repas est un excellent exemple de repas sain et délicieux qui peut être facilement préparé à l'avance.

Ce repas se compose de riz complet, de légumes rôtis et de poulet teriyaki. Le riz complet est un grain complet riche en fibres et en nutriments. Les légumes rôtis sont un excellent moyen de consommer votre dose quotidienne de vitamines et de minéraux. Le poulet teriyaki est une source de protéines maigres et très appétissantes.

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

Ce repas est idéal pour les personnes occupées qui recherchent une façon de manger sainement et délicieuse. C'est également un excellent repas pour ceux qui souhaitent perdre du poids ou garder un poids sain.

Si vous cherchez un repas sain et délicieux qui peut être facilement préparé à l'avance, ce repas est une excellente option. Essayez-le dès aujourd'hui !

Conversations de chat

Gemini vous permet d'avoir des conversations de forme libre sur plusieurs tours. La classe ChatSession simplifie le processus en gérant l'état de la conversation. Par conséquent, contrairement à generate_content, il n'est pas nécessaire de stocker l'historique de la conversation 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 GenerateContentResponse que GenerativeModel.generate_content. Elle ajoute également votre message et la réponse à l'historique des discussions:

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 contenant chacun un texte (chaîne) ou des données intégrées (genai.protos.Blob), un blob contenant des données binaires et un 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 le fonctionnement d'un ordinateur à un jeune enfant.

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

Utilisateur: Que diriez-vous d'une explication plus détaillée pour un lycéen ?

model: un ordinateur fonctionne en suivant des instructions, appelées programme, qui lui indique ce qu'il doit faire. Ces instructions sont rédigées dans un langage spécial compréhensible par l'ordinateur et sont stockées dans la mémoire de l'ordinateur. Le processeur (CPU) de l'ordinateur lit les instructions de la mémoire et les exécute, en effectuant des calculs et en prenant 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, imaginez un ordinateur comme un chef qui suit une recette. La recette est comme le programme et les actions du chef sont les instructions suivies par l'ordinateur. Le chef lit la recette (le programme) et effectue des actions comme collecter des ingrédients (extraire les données de la mémoire), les mélanger (effectuer des calculs) et les cuisiner (traitement des données). Le plat final (la sortie) est ensuite présenté dans une assiette (l'écran d'ordinateur).

En résumé, un ordinateur fonctionne en exécutant 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 fonction du nombre de jetons. Avec l'API Gemini, vous pouvez déterminer le nombre de jetons pour tout 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 technique de représentation vectorielle continue permet de représenter des informations sous la forme d'une liste de nombres à virgule flottante dans un tableau. Gemini vous permet de représenter du texte (mots, phrases et blocs de texte) sous forme vectorisée, ce qui facilite la comparaison et le contraste 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ématiques telles que la similarité cosinus. Pour savoir comment et pourquoi utiliser les 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. Cette 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 pour la récupération du document:

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 ou des listes de chaînes simples, elle est en réalité basée sur le 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é de passer à des 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 décrivent des cas d'utilisation avancés et des informations plus détaillées sur le 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 les requêtes et les réponses. Par défaut, les paramètres de sécurité bloquent le contenu présentant une probabilité moyenne et/ou élevée d'être un contenu dangereux dans toutes les dimensions. En savoir plus sur les paramètres de sécurité

Saisissez une requête douteuse et exécutez le modèle avec les paramètres de sécurité par défaut. Aucun résultat 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
}

Envoyez maintenant la même invite au modèle avec les nouveaux paramètres de sécurité configurés pour obtenir une réponse.

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

Notez également que chaque candidat possède son propre safety_ratings, au cas où l'invite aboutit, mais que les réponses individuelles échouent au contrôle de situation.

Encoder les messages

Les sections précédentes s'appuyaient sur le SDK pour vous permettre d'envoyer facilement des requêtes à l'API. Cette section propose un équivalent complet de 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 se trouve sous-jacente du 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 l'un des éléments suivants:

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

Vous pouvez également transmettre n'importe laquelle de ces classes en tant que dictionnaire équivalent.

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

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 d’économiser du temps et de l’argent, et elle peut également vous aider à 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 repose sur quelques hypothèses. Si votre cas d'utilisation ne correspond pas à 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 uniques, il peut gérer des 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 user, qui fournit les invites, ou model, qui fournit les réponses.

Transmettez une liste d'objets genai.protos.Content pour qu'il soit traité comme un chat multitours:

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 à faire beaucoup de choses. Tout comme vous avez un cerveau destiné à penser et à apprendre, un ordinateur possède également un cerveau, appelé processeur. C'est comme le patron de l'ordinateur, qui lui dit ce qu'il faut faire.

À l’intérieur de l’ordinateur, il y a un emplacement spécial appelé mémoire, qui ressemble à une grande boîte de stockage. L'Assistant mémorise tout ce que vous lui demandez de faire, comme ouvrir un jeu ou jouer à 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 photos ou même écouter de la musique.

Toutes les choses que vous voyez à l'écran sont créées par la carte graphique, qui ressemble à un artiste de magie à 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 photos 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 peut garder toutes vos affaires précieuses en sécurité.

De plus, lorsque vous souhaitez vous connecter à Internet pour jouer à des jeux entre amis ou regarder des vidéos amusantes, l'ordinateur utilise une carte réseau pour envoyer et recevoir des messages via les câbles Internet ou les 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 ami ultra-intelligent qui peut vous aider à faire des choses incroyables !

Pour continuer 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. Elle est constituée de plusieurs composants essentiels qui, ensemble, permettent de traiter, de stocker et d'afficher des informations:

1. Processeur (CPU) : le cerveau de l'ordinateur. - Effectue des instructions et effectue des calculs. - Vitesse mesurée en gigahertz (GHz). - En général, plus le débit est élevé, plus le traitement est rapide.

2. Mémoire (RAM) : espace de stockage temporaire pour les données en cours de traitement. - contient les instructions et les données lorsque le programme est en cours d'exécution. - Mesurée en gigaoctets (Go). - Plus de Go de RAM permet à plus de programmes de s'exécuter 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 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 des images. - Essentiel pour les jeux vidéo, le montage vidéo et d'autres tâches nécessitant beaucoup de ressources graphiques. - Mesures 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/sortie (E/S) : - permet à l'utilisateur d'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 en mémoire depuis l'espace de stockage.
  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 effectue à 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 transmet à l'écran, qui les affiche.

Ce processus se poursuit jusqu'à ce que le programme ait terminé sa tâche ou 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 invite que vous envoyez au modèle inclut des valeurs de paramètres qui contrôlent la manière dont le modèle génère des 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 milieu de collines verdoyantes, vivait une jeune fille qui s'appelait...

Étapes suivantes

  • La conception de requête correspond au processus de création de requêtes qui suscitent la réponse souhaitée 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 pour l'écriture de requêtes.
  • Gemini propose plusieurs variantes de modèles pour répondre aux besoins de différents cas d'utilisation, tels que les types et la complexité des entrées, les implémentations pour le chat ou d'autres tâches de langage de dialogue, ainsi que les contraintes de taille. Découvrez les modèles Gemini disponibles.
  • Gemini propose des options pour demander des augmentations des limites de débit. Le nombre maximal de requêtes par minute (RPM) pour les modèles Gemini-Pro est de 60.