Inizia a utilizzare l'API Gemini: Python

Visualizza sull'IA di Google Esegui in Google Colab Visualizza il codice sorgente su GitHub

Questa guida rapida illustra come utilizzare l'SDK Python per l'API Gemini, che consente l'accesso ai modelli linguistici di grandi dimensioni (LLM) Gemini di Google. In questa guida rapida, imparerai a:

  1. Configura l'ambiente di sviluppo e l'accesso all'API per utilizzare Gemini.
  2. Genera risposte di testo dagli input di testo.
  3. Genera risposte di testo da input multimodali (testo e immagini).
  4. Utilizza Gemini per le conversazioni multi-turno (chat).
  5. Utilizzare gli incorporamenti per i modelli linguistici di grandi dimensioni (LLM).

Prerequisiti

Puoi eseguire questa guida rapida in Google Colab, che esegue questo blocco note direttamente nel browser e non richiede una configurazione aggiuntiva dell'ambiente.

In alternativa, per completare questa guida rapida a livello locale, assicurati che il tuo ambiente di sviluppo soddisfi i requisiti seguenti:

  • Python 3.9 e versioni successive
  • Un'installazione di jupyter per eseguire il blocco note.

Configurazione

Installa l'SDK Python

L'SDK Python per l'API Gemini è contenuto nel pacchetto google-generativeai. Installa la dipendenza utilizzando pip:

pip install -q -U google-generativeai

Importa pacchetti

Importa i pacchetti necessari.

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

Configura la chiave API

Prima di poter utilizzare l'API Gemini, devi ottenere una chiave API. Se non ne hai già una, crea una chiave con un clic in Google AI Studio.

Ottenere una chiave API

In Colab, aggiungi la chiave al gestore dei secret nella sezione "☁" del riquadro a sinistra. Assegna il nome GOOGLE_API_KEY.

Una volta ottenuta la chiave API, passala all'SDK. A tale scopo, puoi procedere in uno dei due seguenti modi:

  • Inserisci la chiave nella variabile di ambiente GOOGLE_API_KEY (l'SDK la acquisirà automaticamente da lì).
  • Passa la chiave a 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)

Elenco modelli

Ora tutto è pronto per chiamare l'API Gemini. Utilizza list_models per vedere i modelli Gemini disponibili:

  • gemini-pro: ottimizzato per i prompt di solo testo.
  • gemini-pro-vision: ottimizzato per i prompt di testo e immagini.
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

Il pacchetto genai supporta anche la famiglia di modelli PaLM, ma solo i modelli Gemini supportano le funzionalità generiche e multimodali del metodo generateContent.

Genera testo dagli input di testo

Per i prompt di solo testo, utilizza il modello gemini-pro:

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

Il metodo generate_content è in grado di gestire un'ampia varietà di casi d'uso, tra cui la chat multi-turno e l'input multimodale, a seconda di ciò che il modello sottostante supporta. I modelli disponibili supportano solo testo e immagini come input e testo come output.

Nel caso più semplice, puoi passare una stringa di prompt al metodo 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

In casi semplici, ti serve solo la funzione di accesso response.text. Per visualizzare il testo Markdown formattato, utilizza la funzione to_markdown:

to_markdown(response.text)

La domanda sullo scopo della vita ha perplesso le persone di secoli, culture e continenti. Sebbene non esista una risposta universalmente riconosciuta, sono state emesse molte idee e la risposta dipende spesso da idee, convinzioni ed esperienze di vita individuali.

  1. Felicità e benessere: molte persone ritengono che l'obiettivo della vita sia raggiungere la felicità e il benessere personali. Ciò potrebbe comportare l'individuazione di attività che offrano gioia, l'instaurazione di legami significativi, la cura della propria salute fisica e mentale e il perseguimento di obiettivi e interessi personali.

  2. Contributi significativi: alcuni credono che lo scopo della vita sia dare un contributo significativo al mondo. Ciò potrebbe comportare l'esercizio di una professione che offra vantaggi agli altri, il coinvolgimento in attività di volontariato o di beneficenza, la creazione di arte o letteratura o l'invenzione.

  3. Realizzazione personale e crescita personale: la ricerca dell'autostima e dello sviluppo personale è un altro obiettivo comune nella vita. Ciò potrebbe comportare l'apprendimento di nuove competenze, la superamento dei propri limiti, l'affrontare gli ostacoli personali e l'evoluzione come persona.

  4. Comportamenti etici e morali:alcuni credono che l'obiettivo della vita sia agire in modo etico e morale. Ciò potrebbe comportare il rispetto dei propri principi morali, il fare la cosa giusta anche quando è difficile e il tentativo di rendere il mondo un posto migliore.

  5. Adempimento spirituale: per alcuni, lo scopo della vita è collegato a credenze spirituali o religiose. Ciò potrebbe comportare la ricerca di una connessione con un potere superiore, la pratica di rituali religiosi o l'adozione di insegnamenti spirituali.

  6. Vivi la vita al massimo: alcune persone ritengono che l'obiettivo della vita sia fare esperienza di tutto ciò che ha da offrire. Ciò potrebbe comportare un viaggio, provare cose nuove, correre dei rischi e abbracciare nuovi incontri.

  7. Eredità e impatto:altre persone ritengono che lo scopo della vita sia lasciare un'eredità duratura e un impatto sul mondo. Ciò può comportare la realizzazione di qualcosa di degno di nota, l'essere ricordati per i propri contributi o l'ispirazione e la motivazione degli altri.

  8. Alla ricerca di equilibrio e armonia: per alcuni, lo scopo della vita è trovare equilibrio e armonia in tutti gli aspetti della vita. Ciò potrebbe comportare la necessità di destreggiarsi con obblighi personali, professionali e sociali, cercare la pace interiore e l'appagamento e vivere una vita conforme ai propri valori e alle proprie convinzioni.

In definitiva, il significato della vita è un viaggio personale e diversi individui possono scoprire il proprio scopo unico attraverso le loro esperienze, riflessioni e interazioni con il mondo che li circonda.

Se l'API non è riuscita a restituire un risultato, utilizza GenerateContentResponse.prompt_feedback per verificare se è stato bloccato a causa di problemi di sicurezza relativi alla richiesta.

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 può generare più risposte possibili per un singolo prompt. Queste possibili risposte sono chiamate candidates e puoi esaminarle per selezionare quella più adatta come risposta.

Visualizza le risposte candidati con 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
}
]

Per impostazione predefinita, il modello restituisce una risposta dopo aver completato l'intero processo di generazione. Puoi anche trasmettere in streaming la risposta mentre viene generata: il modello restituirà blocchi della risposta non appena vengono generati.

Per trasmettere risposte in streaming, utilizza 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.
________________________________________________________________________________

Durante il flusso di dati, alcuni attributi delle risposte non sono disponibili finché non hai eseguito l'iterazione di tutti i blocchi di risposta. Ciò è illustrato di seguito:

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

L'attributo prompt_feedback funziona:

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
}

Al contrario, attributi come text non:

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

Genera testo dagli input di testo e immagine

Gemini fornisce un modello multimodale (gemini-pro-vision) che accetta testo, immagini e input. L'API GenerativeModel.generate_content è progettata per gestire prompt multimodali e restituisce un output di testo.

Includiamo un'immagine:

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

Utilizza il modello gemini-pro-vision e passa l'immagine al modello con generate_content.

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

to_markdown(response.text)

Ciotole per la preparazione del pasto teriyaki di pollo con riso integrale, broccoli arrostiti e peperoni.

Per fornire testo e immagini in un prompt, trasmetti un elenco contenente le stringhe e le immagini:

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 preparazione dei pasti è un ottimo modo per risparmiare tempo e denaro e può anche aiutarti a mangiare più sano. Questo pasto è un ottimo esempio di un pasto sano e delizioso che può essere facilmente preparato in anticipo.

Questo pasto include riso integrale, verdure arrostite e pollo teriyaki. Il riso integrale è un grano intero ad alto contenuto di fibre e nutrienti. Le verdure arrostite sono un ottimo modo per assumere la tua dose giornaliera di vitamine e minerali. E il teriyaki di pollo è una fonte proteica magra, anche ricca di sapore.

Questo pasto è facile da preparare in anticipo. Cucina il riso integrale, arrosti le verdure e cuoci il teriyaki di pollo. Quindi, dividi il pasto in singoli contenitori e conservalo in frigorifero. Quando vuoi mangiare, prendi un contenitore e riscaldalo.

Questo pasto è un'ottima opzione per le persone impegnate in cerca di un modo di mangiare sano e delizioso. È anche un ottimo pasto per coloro che cercano di perdere peso o mantenere un peso salutare.

Se stai cercando un pasto sano, delizioso e facile da preparare in anticipo, questo pasto è un'ottima alternativa. Provalo oggi stesso!

Conversazioni in chat

Gemini ti consente di intrattenere conversazioni in formato libero a turni multipli. La classe ChatSession semplifica il processo mediante la gestione dello stato della conversazione, quindi, a differenza di generate_content, non è necessario memorizzare la cronologia delle conversazioni come elenco.

Inizializza la chat:

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

Il metodo ChatSession.send_message restituisce lo stesso tipo GenerateContentResponse di GenerativeModel.generate_content. Inoltre, il messaggio e la risposta vengono aggiunti alla cronologia chat:

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

Un computer è come una macchina molto intelligente in grado di comprendere e seguire le nostre istruzioni, aiutarci con il nostro lavoro e persino giocare con noi.

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

Puoi continuare a inviare messaggi per continuare la conversazione. Usa l'argomento stream=True per trasmettere la chat in streaming:

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

Gli oggetti glm.Content contengono un elenco di oggetti glm.Part, ciascuno dei quali contiene un testo (stringa) o inline_data (glm.Blob), dove un BLOB contiene dati binari e un mime_type. La cronologia chat è disponibile come elenco di glm.Content oggetti in ChatSession.history:

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

utente: in una frase, spiega come funziona un computer a un bambino.

model: un computer è come una macchina molto intelligente in grado di comprendere e seguire le nostre istruzioni, aiutarci con il nostro lavoro e persino giocare con noi.

user: Ok, che ne dici di una spiegazione più dettagliata per una studentessa liceale?

model: un computer funziona seguendo delle istruzioni, chiamato programma, che gli dice cosa fare. Queste istruzioni sono scritte in un linguaggio speciale che il computer è in grado di comprendere e vengono memorizzate nella memoria del computer. Il processore del computer, o CPU, legge le istruzioni dalla memoria e le esegue, eseguendo calcoli e prendendo decisioni basate sulla logica del programma. I risultati di questi calcoli e decisioni vengono visualizzati sullo schermo del computer o memorizzati nella memoria per un utilizzo futuro.

Per un'analogia semplice, immagina un computer come uno chef che segue una ricetta. La ricetta è come il programma e le azioni dello chef sono come le istruzioni che segue il computer. Lo chef legge la ricetta (il programma) ed esegue azioni come raccogliere gli ingredienti (recuperare i dati dalla memoria), mescolarli (eseguire calcoli) e cucinarli (elaborare dati). Il piatto finale (l'output) viene quindi presentato su un piatto (lo schermo del computer).

In sintesi, un computer esegue una serie di istruzioni, memorizzate nella sua memoria, per eseguire calcoli, prendere decisioni e visualizzare o memorizzare i risultati.

Conta token

I modelli linguistici di grandi dimensioni (LLM) hanno una finestra di contesto e la lunghezza del contesto viene spesso misurata in termini di numero di token. Con l'API Gemini, puoi determinare il numero di token per ogni oggetto glm.Content. Nel caso più semplice, puoi passare una stringa di query al metodo GenerativeModel.count_tokens come segue:

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

Analogamente, puoi controllare token_count per ChatSession:

model.count_tokens(chat.history)
total_tokens: 501

Utilizzare gli incorporamenti

L'incorporamento è una tecnica utilizzata per rappresentare le informazioni sotto forma di elenco di numeri con rappresentazione in virgola mobile in un array. Con Gemini, puoi rappresentare il testo (parole, frasi e blocchi di testo) in una forma vettoriale, semplificando il confronto e il contrasto delle rappresentazioni distribuite. Ad esempio, due testi che condividono un oggetto o un sentiment simile dovrebbero avere incorporamenti simili, che possono essere identificati tramite tecniche di confronto matematiche come la somiglianza coseno. Per saperne di più su come e perché utilizzare gli incorporamenti, consulta la guida agli incorporamenti.

Usa il metodo embed_content per generare incorporamenti. Il metodo gestisce l'incorporamento per le attività seguenti (task_type):

Tipo di attività Descrizione
RETRIEVAL_QUERY Specifica che il testo specificato è una query in un'impostazione di ricerca/recupero.
RETRIEVAL_DOCUMENT Specifica che il testo specificato è un documento in un'impostazione di ricerca/recupero. Per utilizzare questo tipo di attività è necessario un title.
SEMANTIC_SIMILARITY Consente di specificare che il testo specificato verrà utilizzato per la somiglianza testuale semantica (STS).
CLASSIFICAZIONE Specifica che gli incorporamenti verranno utilizzati per la classificazione.
CLUSTERING Specifica che gli incorporamenti verranno utilizzati per il clustering.

Quanto segue genera un incorporamento per una singola stringa per il recupero dei documenti:

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]

Per gestire gruppi di stringhe, trasmetti un elenco di stringhe in 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 ...

La funzione genai.embed_content accetta stringhe o elenchi di stringhe semplici, ma in realtà si basa sul tipo glm.Content (come GenerativeModel.generate_content). Gli oggetti glm.Content sono le unità principali di conversazione nell'API.

Mentre l'oggetto glm.Content è multimodale, il metodo embed_content supporta solo gli incorporamenti di testo. Questo design dà all'API la possibilità di espandersi ad incorporamenti multimodali.

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

Analogamente, la cronologia chat contiene un elenco di oggetti glm.Content, che puoi passare direttamente alla funzione 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...

Casi d'uso avanzati

Le seguenti sezioni descrivono i casi d'uso avanzati e i dettagli di livello inferiore dell'SDK Python per l'API Gemini.

Impostazioni di sicurezza

L'argomento safety_settings consente di configurare ciò che il modello blocca e consente sia i prompt sia le risposte. Per impostazione predefinita, le impostazioni di sicurezza bloccano i contenuti con una probabilità media e/o elevata di essere contenuti non sicuri in tutte le dimensioni. Scopri di più sulle Impostazioni di sicurezza.

Inserisci un prompt sospetto ed esegui il modello con le impostazioni di sicurezza predefinite. Non verranno restituiti candidati:

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 indicherà quale filtro di sicurezza ha bloccato la richiesta:

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
}

Ora fornisci lo stesso prompt al modello con le impostazioni di sicurezza appena configurate, potresti ricevere una risposta.

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

Inoltre, tieni presente che ogni candidato ha il proprio safety_ratings, nel caso in cui il prompt venga superato ma le singole risposte non superino i controlli di sicurezza.

Codificare i messaggi

Le sezioni precedenti si basavano sull'SDK per semplificare l'invio di prompt all'API. Questa sezione offre un equivalente completamente digitato sull'esempio precedente, per permetterti di comprendere meglio i dettagli di livello inferiore relativi al modo in cui l'SDK codifica i messaggi.

Alla base dell'SDK Python c'è la libreria client google.ai.generativelanguage:

import google.ai.generativelanguage as glm

L'SDK tenta di convertire il tuo messaggio in un oggetto glm.Content, che contiene un elenco di oggetti glm.Part, ciascuno dei quali contiene:

  1. a text (stringa)
  2. inline_data (glm.Blob), dove un blob contiene il binario data e un mime_type.

Puoi anche superare una qualsiasi di queste classi come dizionario equivalente.

Quindi, l'equivalente completamente digitato nell'esempio precedente è:

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

La preparazione dei pasti è un ottimo modo per risparmiare tempo e denaro e può anche aiutarti a mangiare più sano. Di ... [TRIMMED] ...

Conversazioni a turni multipli

Anche se la classe genai.ChatSession mostrata in precedenza può gestire molti casi d'uso, fa alcune ipotesi. Se il tuo caso d'uso non rientra nell'implementazione di questa chat, è bene ricordare che genai.ChatSession è solo un wrapper intorno a GenerativeModel.generate_content. Oltre alle singole richieste, può gestire le conversazioni a turni multipli.

I singoli messaggi sono oggetti glm.Content o dizionari compatibili, come mostrato nelle sezioni precedenti. Come dizionario, il messaggio richiede le chiavi role e parts. Il role in una conversazione può essere user, che fornisce i prompt, o model, che fornisce le risposte.

Passa un elenco di glm.Content oggetti che verrà trattato come una chat in più passaggi:

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)

Immagina un computer come un amico davvero intelligente che può aiutarti in molte cose. Così come hai un cervello per pensare e imparare, un computer ha anche un cervello, chiamato processore. È come il capo del computer, che gli dice cosa fare.

All'interno del computer c'è un luogo speciale chiamato memoria, che è come una grande scatola di immagazzinaggio. Ricorda tutte le cose che gli chiedi di fare, come aprire un gioco o riprodurre video.

Quando premi i pulsanti della tastiera o fai clic sugli elementi dello schermo con il mouse, stai inviando messaggi al computer. Questi messaggi passano attraverso speciali cavi, chiamati cavi, che raggiungono il processore.

Il processore legge i messaggi e dice al computer cosa fare. Può aprire programmi, mostrarti immagini o persino farti ascoltare musica.

Tutto ciò che vedi sullo schermo è creato dalla scheda grafica, che è come un artista magico all'interno del computer. Prende le istruzioni del processore e le trasforma in immagini e video colorati.

Per salvare i tuoi giochi, video o immagini preferiti, il computer utilizza uno spazio di archiviazione speciale chiamato disco rigido. È come una biblioteca gigantesca in cui il computer può tenere al sicuro tutti i tuoi preziosi.

E quando vuoi connetterti a internet per giocare con gli amici o guardare video divertenti, il computer utilizza una cosiddetta scheda di rete per inviare e ricevere messaggi tramite i cavi internet o i segnali Wi-Fi.

Così, proprio come la tua mente ti aiuta a imparare e giocare, il processore, la memoria, la scheda grafica, il disco rigido e la scheda di rete del computer lavorano tutti insieme per rendere il tuo computer un compagno incredibilmente intelligente che può aiutarti a fare cose straordinarie.

Per continuare la conversazione, aggiungi la risposta e un altro messaggio.

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)

Essenzialmente, un computer è una macchina che può essere programmata per eseguire una serie di istruzioni. È costituito da diversi componenti essenziali che lavorano insieme per elaborare, archiviare e visualizzare le informazioni:

1. Processore (CPU): - Il cervello del computer. - Esegue istruzioni ed esegue calcoli. - Velocità misurata in gigahertz (GHz). - Più GHz significa generalmente un'elaborazione più rapida.

2. Memoria (RAM): - Archiviazione temporanea dei dati in fase di elaborazione. - Contiene istruzioni e dati mentre il programma è in esecuzione. - Misurato in gigabyte (GB). - Più GB di RAM consentono l'esecuzione simultanea di più programmi.

3. Archiviazione (HDD/SSD): - Archiviazione permanente per i dati. - Archivia il sistema operativo, i programmi e i file degli utenti. - Misurato in gigabyte (GB) o terabyte (TB). - I dischi rigidi (HDD) sono tradizionali, più lenti e più economici. - Le unità a stato solido (SSD) sono più recenti, più veloci e più costose.

4. Scheda grafica (GPU): - Elabora e visualizza immagini. - Essenziale per giochi, editing video e altre attività ad alta intensità di grafica. - Misurazione effettuata in termini di RAM video (VRAM) e velocità di clock.

5. Scheda madre: - Connette tutti i componenti. - Fornisce vie di alimentazione e di comunicazione.

6. Dispositivi di input/output (I/O): - Consente all'utente di interagire con il computer. - Esempi: tastiera, mouse, monitor, stampante.

7. Sistema operativo: - Software che gestisce le risorse del computer. - Fornisce un'interfaccia utente e funzionalità di base. - Esempi: Windows, macOS, Linux.

Quando esegui un programma sul tuo computer, si verifica quanto segue:

  1. Le istruzioni del programma vengono caricate dallo spazio di archiviazione alla memoria.
  2. Il processore legge le istruzioni dalla memoria e le esegue una alla volta.
  3. Se l'istruzione prevede calcoli, il processore li esegue utilizzando la sua unità logica aritmetica (ALU).
  4. Se l'istruzione riguarda dati, il processore legge o scrive nella memoria.
  5. I risultati dei calcoli o della manipolazione dei dati vengono memorizzati in memoria.
  6. Se il programma deve visualizzare qualcosa sullo schermo, invia i dati necessari alla scheda grafica.
  7. La scheda grafica elabora i dati e li invia al monitor, che li visualizza.

Questo processo continua fino a quando il programma non completa l'attività o fino a quando l'utente non la termina.

Configurazione di generazione

L'argomento generation_config consente di modificare i parametri di generazione. Ogni prompt inviato al modello include valori parametro che controllano il modo in cui il modello genera risposte.

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)

C'era una volta, in un paesino circondato da lussureggianti colline verdi, una giovane bambina di nome...

Passaggi successivi

  • La progettazione dei prompt è il processo di creazione di prompt che generano la risposta desiderata dai modelli linguistici. Scrivere prompt ben strutturati è una parte essenziale per garantire risposte accurate e di alta qualità da un modello linguistico. Scopri le best practice per la scrittura di prompt.
  • Gemini offre diverse varianti di modelli per soddisfare le esigenze di diversi casi d'uso, come i tipi di input e la complessità, le implementazioni per la chat o altre attività di linguaggio delle finestre di dialogo e i vincoli di dimensione. Scopri di più sui modelli Gemini disponibili.
  • Gemini offre opzioni per richiedere aumenti del limite di frequenza. Il limite di frequenza per i modelli Gemini-Pro è di 60 richieste al minuto (RPM).