Tutorial: inizia a utilizzare l'API Gemini


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

Questa guida rapida mostra come utilizzare l'SDK Python per l'API Gemini, che ti dà accesso ai modelli linguistici di grandi dimensioni Gemini di Google. In questa guida rapida imparerai a:

  1. Configura il tuo ambiente di sviluppo e l'accesso all'API per utilizzare Gemini.
  2. Genera risposte di testo da input di testo.
  3. Genera risposte di testo da input multimodali (testo e immagini).
  4. Utilizza Gemini per le conversazioni in più passaggi (chat).
  5. Usare gli incorporamenti per i modelli linguistici di grandi dimensioni.

Prerequisiti

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

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

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

Imposta

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 solo clic in Google AI Studio.

Ottenere una chiave API

In Colab, aggiungi la chiave a Secret Manager nella sezione "Ъ" del riquadro a sinistra. Assegnagli 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 puoi chiamare l'API Gemini. Usa list_models per vedere i modelli Gemini disponibili:

  • gemini-1.5-flash: il nostro modello multimodale più veloce
  • gemini-1.5-pro: il nostro modello multimodale più avanzato e intelligente
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

Genera testo da input di testo

Per i prompt di solo testo, utilizza un modello Gemini 1.5 o il modello Gemini 1.0 Pro:

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

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 supporta il modello sottostante. 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, la funzione di accesso response.text è tutto quello di cui hai bisogno. Per visualizzare testo Markdown formattato, utilizza la funzione to_markdown:

to_markdown(response.text)

La ricerca dello scopo della vita ha fatto perplessi i secoli, le culture e i continenti. Sebbene non esista una risposta universalmente riconosciuta, molte idee sono state proposte e la risposta dipende spesso dalle idee, dalle convinzioni e dalle 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 stimolano la gioia, la creazione di legami significativi, la cura della salute fisica e mentale di una persona e il perseguimento di obiettivi e interessi personali.

  2. Contributo significativo: alcuni credono che lo scopo della vita sia dare un contributo significativo al mondo. Ciò potrebbe comportare l'esercizio di una professione a beneficio degli altri, la partecipazione ad attività di volontariato o di beneficenza, la generazione di arte o letteratura o l'invenzione.

  3. Realizzazione di se stessi e crescita personale: il perseguimento dell'autorealizzazione e dello sviluppo personale è un altro obiettivo comune nella vita. Ciò potrebbe comportare l'apprendimento di nuove competenze, l'esplorazione dei confini, l'affrontare ostacoli personali e l'evoluzione come persona.

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

  5. Adempimento spirituale: per alcuni, lo scopo della vita è collegato alle credenze spirituali o religiose. Ciò potrebbe comportare la ricerca di un legame con un potere superiore, l'applicazione di rituali religiosi o il seguire insegnamenti spirituali.

  6. Vivi la vita al meglio:alcune persone credono che l'obiettivo della vita sia sperimentare tutto ciò che ha da offrire. Ciò potrebbe comportare un viaggio, provare cose nuove, correre dei rischi e interagire con nuovi contatti.

  7. Legacy e impatto: altri credono che lo scopo della vita sia lasciare un'eredità duratura e lasciare un impatto sul mondo. Ad esempio, potresti portare a termine qualcosa di degno di nota, essere ricordato per il contributo di qualcuno o essere fonte di ispirazione e motivazione per gli altri.

  8. Trovare equilibrio e armonia: per alcuni lo scopo della vita è trovare equilibrio e armonia in tutti gli aspetti della propria vita. Ciò potrebbe comportare destreggiamenti tra doveri personali, professionali e sociali, ricerca di pace interiore e soddisfazione e condurre una vita in linea con i propri valori e le 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ù possibili risposte per un singolo prompt. Queste possibili risposte sono chiamate candidates e puoi esaminarle per selezionare la più adatta come risposta.

Visualizza i candidati risposta 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 la risposta in modalità flusso mentre viene generata e il modello restituirà blocchi della risposta non appena vengono generati.

Per trasmettere le 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 della risposta non sono disponibili finché non hai eseguito l'iterazione in tutti i blocchi di risposta. Ciò è dimostrato 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
}

Tuttavia, gli 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 da input di immagini e testo

Gemini offre vari modelli in grado di gestire l'input multimodale (modelli Gemini 1.5) in modo da poter inserire sia testo che immagini. Assicurati di rivedere i requisiti relativi alle immagini per i prompt.

Quando l'input del prompt include sia testo che immagini, utilizza Gemini 1.5 con il metodo GenerativeModel.generate_content per generare 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

Usa un modello Gemini 1.5 e passa l'immagine al modello con generate_content.

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

to_markdown(response.text)

Ciotole di pollo teriyaki con riso integrale, broccoli arrostiti e peperoni.

Per fornire sia testo che immagini in un prompt, passa 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 pasto salutare e delizioso che può essere preparato facilmente in anticipo.

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

Questo pasto è facile da preparare in anticipo. Basta cucinare il riso integrale, arrostire le verdure e cucinare il teriyaki di pollo. Quindi, dividi il pasto in singoli contenitori e conservali in frigorifero. Quando vuoi mangiare, prendi un contenitore e riscaldalo.

Questo pasto è un'ottima opzione per le persone impegnate che cercano un cibo sano e delizioso. È anche un ottimo pasto per coloro che stanno cercando di perdere peso o mantenere un peso salutare.

Se cerchi un pasto sano e delizioso da preparare facilmente in anticipo, questo pasto è un'ottima opzione. Provalo oggi stesso!

Conversazioni in chat

Gemini ti consente di tenere conversazioni in formato libero durante più turni. Il corso ChatSession semplifica il processo gestendo lo stato della conversazione, quindi, a differenza di generate_content, non è necessario archiviare la cronologia delle conversazioni come elenco.

Inizializza la chat:

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

Il metodo ChatSession.send_message restituisce lo stesso tipo di GenerateContentResponse di GenerativeModel.generate_content. Inoltre, aggiunge il tuo messaggio e la risposta 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 che può capire 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. Utilizza 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, ognuno dei quali contiene un testo (stringa) o inline_data (glm.Blob), dove un blob contiene dati binari e un elemento 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 che può capire 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 a un liceale?

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

Per fare una semplice analogia, immagina un computer come uno chef che segue una ricetta. La ricetta è come il programma e le azioni dello chef sono le istruzioni seguite dal computer. Lo chef legge la ricetta (il programma) ed esegue azioni quali la raccolta degli ingredienti (il recupero dei dati dalla memoria), la loro combinazione (esecuzione dei calcoli) e la loro cottura (elaborazione dei dati). Il piatto finale (l'output) viene poi presentato su una piastra (lo schermo del computer).

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

Conta token

I modelli linguistici di grandi dimensioni 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 qualsiasi oggetto genai.protos.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

Utilizza gli incorporamenti

L'incorporamento è una tecnica utilizzata per rappresentare le informazioni come un elenco di numeri in virgola mobile in un array. Con Gemini, puoi rappresentare il testo (parole, frasi e blocchi di testo) in forma vettoriale, semplificando il confronto e la contrapposizione degli incorporamenti. Ad esempio, due testi che condividono un argomento o un sentiment simile dovrebbero avere incorporamenti simili, che possono essere identificati attraverso tecniche di confronto matematiche come la somiglianza coseno. Per ulteriori informazioni su come e perché dovresti utilizzare gli incorporamenti, consulta la guida agli incorporamenti.

Utilizza il metodo embed_content per generare incorporamenti. Il metodo gestisce l'incorporamento per le seguenti attività (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. L'utilizzo di questo tipo di attività richiede un title.
SEMANTIC_SIMILARITY Specifica il testo specificato che 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.

Di seguito viene generato un incorporamento per una singola stringa ai fini del 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 batch di stringhe, passa 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 ...

Sebbene la funzione genai.embed_content accetti stringhe o elenchi di stringhe, in realtà è basata sul tipo genai.protos.Content (ad esempio GenerativeModel.generate_content). Gli oggetti glm.Content sono le unità principali di conversazione nell'API.

Sebbene l'oggetto genai.protos.Content sia multimodale, il metodo embed_content supporta solo gli incorporamenti di testo. Questo design offre all'API la possibilità di espandersi agli 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 genai.protos.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 sezioni seguenti trattano di casi d'uso avanzati e 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 nei prompt che nelle risposte. Per impostazione predefinita, le impostazioni di sicurezza bloccano i contenuti con probabilità media e/o alta di non essere sicuri in tutte le dimensioni. Scopri di più sulle impostazioni di sicurezza.

Inserisci un prompt contestabile ed esegui il modello con le impostazioni di sicurezza predefinite. Non verrà restituito alcun candidato:

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 ti 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 nuove impostazioni di sicurezza configurate e potresti ricevere una risposta.

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

Tieni inoltre presente che ogni candidato ha il proprio safety_ratings, nel caso in cui la richiesta superi, ma le singole risposte non superino i controlli di sicurezza.

Codifica dei messaggi

Le sezioni precedenti si basavano sull'SDK per semplificare l'invio di prompt all'API. Questa sezione offre un equivalente completo dell'esempio precedente, in modo da poter comprendere meglio i dettagli di livello inferiore relativi alla modalità di codifica dei messaggi da parte dell'SDK.

L'SDK tenta di convertire il tuo messaggio in un oggetto genai.protos.Content, che contiene un elenco di oggetti genai.protos.Part contenenti ciascuno:

  1. a text (stringa)
  2. inline_data (genai.protos.Blob), dove un blob contiene il codice binario data e mime_type.
  3. o altri tipi di dati.

Puoi anche passare uno qualsiasi di questi corsi come dizionario equivalente.

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

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 preparazione dei pasti è un ottimo modo per risparmiare tempo e denaro e può anche aiutarti a mangiare più sano. Di ... [RITAGLIATO] ...

Conversazioni multi-turno

Sebbene la classe genai.ChatSession mostrata in precedenza possa gestire molti casi d'uso, fa alcune ipotesi. Se il tuo caso d'uso non rientra in questa implementazione della chat, è bene ricordare che genai.ChatSession è solo un wrapper intorno a GenerativeModel.generate_content. Oltre alle richieste singole, può gestire le conversazioni in più passaggi.

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

Supera un elenco di genai.protos.Content oggetti che verranno trattati come chat a turni multipli:

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)

Immagina un computer come un amico molto intelligente che può aiutarti in molte cose. Proprio come un computer ha un cervello per pensare e imparare, anche un computer ha un cervello, chiamato processore. È come il capo di un computer che gli dice cosa fare.

All'interno del computer c'è un posto speciale chiamato memoria, che è come una grande scatola di archiviazione. Ricorda tutte le cose che gli dici di fare, come aprire giochi o riprodurre video.

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

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

Tutto ciò che vedi sullo schermo è creato dalla scheda grafica, che è come un artista magico nel 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 speciale spazio di archiviazione chiamato disco rigido. È come una biblioteca gigantesca dove il computer può tenere al sicuro tutti i tuoi oggetti preziosi.

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

Così, proprio come il tuo cervello ti aiuta a imparare e a 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 amico super 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)

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

1. Processore (CPU): - il cervello del computer. - Esegue le istruzioni e i calcoli. - Velocità misurata in gigahertz (GHz). - Più GHz significa in genere un'elaborazione più veloce.

2. Memoria (RAM): - Archiviazione temporanea per i dati in fase di elaborazione. - Conserva istruzioni e dati mentre il programma è in esecuzione. - Misurata 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). - Le unità disco rigido (HDD) sono tradizionali, più lente e più economiche. - Le unità a stato solido (SSD) sono più recenti, più veloci e più costose.

4. Scheda grafica (GPU): - elabora e visualizza le immagini. - Essenziale per i giochi, l'editing video e altre attività che richiedono molta grafica. - Misurazione effettuata in RAM video (VRAM) e velocità di clock.

5. Scheda madre: - Collega tutti i componenti. - Fornisce potenza e percorsi 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 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 dei dati, il processore legge o scrive nella memoria.
  5. I risultati dei calcoli o della manipolazione dei dati vengono archiviati 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 ha completato l'attività o 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 le risposte.

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)

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

Passaggi successivi

  • La progettazione dei prompt è il processo di creazione di prompt che suscitano la risposta desiderata dai modelli linguistici. Scrivere prompt ben strutturati è fondamentale 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 del modello per soddisfare le esigenze di diversi casi d'uso, come tipi di input e complessità, implementazioni di chat o altre attività legate al linguaggio delle finestre di dialogo e limiti di dimensioni. Scopri di più sui modelli Gemini disponibili.