Interrogare Bard / PaLM di Google con Python

Qualche tempo fa in un post [6] avevo parlato delle prove fatte per interrogare ChatGPT [3] utilizzando una libreria messa a disposizione da OpenAI. Nel frattempo anche Google ha presentato una soluzione analoga chiamata Bard [2] che è basata sul modello linguistico PaLM sviluppato dalla stessa Google. Anche in questo caso è possibile utilizzare una libreria per effettuare delle interrogazioni utilizzando del codice Python.

Chiarimenti su nomi e sigle

Prima di tutto è necessario chiarire il significato di alcuni termini e di alcune sigle:

  • LLM (Large Language Model): è un tipo di modello di intelligenza artificiale progettato per comprendere e generare testo in modo coerente e contestualmente appropriato, si usa nelle applicazioni di elaborazione del linguaggio naturale nelle quali è necessario interpretare un input testuale e rispondere con un output testuale e discorsivo.
  • PaLM 2 (Pathways Language Model): è una famiglia di modelli linguistici di grandi dimensioni (LLM) sviluppata da Google è l’equivalente di GPT-3.5 o GPT-4 di OpenAI.
  • Bard: è un chatbot che utilizza PaLM per svogere i propri compiti e per rispondere alle domande che gli utenti gli pongono utilizzando un’interfaccia web.
  • ChatGPT: è un chatbot che utilizza GPT per svogere i propri compiti e per rispondere alle domande che gli utenti gli pongono utilizzando un’interfaccia web.
  • OpenAI: è l’azienda che ha sviluppato il chatbot ChatGPT e i modelli linguistici GPT-*.
  • Google: è l’azienda che ha sviluppato il chatbot Bard e il modlli linguistici PaLM *.

Quindi PalM e GPT sono due implementazioni diverse di LLM che sono utilizzate rispettivamente da Bard (Google) e ChatGPT (OpenAI).

 

Come l’AI e gli LLM possono aiutare i programmatori

Ho preso come riferimento per questo post il solito minicorso offerto da DeepLearning.ai e tenuto da Andrew Ng e Laurence Moroney. Il nome del corso è “Pair Programming with a Large Language Model” ed è focalizzato sull’aiuto che l’AI può dare agli sviluppatori nel loro lavoro quotidiano.

Un LLM può essere usato per i seguenti scopi:

  1. Migliorare il codice esistente: Si può proporre una funzione e chiedere se c’è un modo alternativo o migliore di scrivere qualcosa di equivalente. Prompt di esempio: “C’è un modo migliore di scrivere questa funzione in Python? <funzione>“.
  2. Semplificare il codice: Si può chiedere di effettuare una specie di code review e semplificare del codiece dato. Prompt di esempio: “E’ possibile semplificare questo codice in Python per creare una lista di oggetti? <codice_di_esempio>
  3. Scrivere i test: Si può chiedere di creare dei test di unità per classi e funzioni. Prompt di esempio: “Puoi creare dei test di unità per questo codice Python? <codice_di_esempio>
  4. Rendere il codice più efficiente: Si può chiedere di rivedere il codice in modo che individui ed elimini parti del codice inutili, non ottimizzate e inefficienti. Prompt di esempio: “Puoi rendere questo codice Python più efficiente? <codice_di_esempio>“.
  5. Trovare errori: In caso di codice che produce errori o crash è possibile chiedere aiuto per trovare il bug. Prompt di esempio: “Puoi aiutarmi ad effettuare il debug di questo codice? <codice di esempio>“.
  6. Spiegare e commentare il codice: Spesso, quando si lavora su codice scritto tanto tempo prima o scritto da altri, può essere comodo un aiuto per interpretarlo. Prompt di esempio: “Puoi spiegarmi riga per riga cosa fa questo codice? <codice_di_esempio>“.
  7. Scrivere della documentazione tecnica: Una attività noisa è quella di scrivere la documentazione tecnica, anche in questo caso si può chiedere aiuto con un prompt specifico. Prompt di esempio: “Puoi scrivere la documentazione tecnica per questo codice Python? <codice_di_esempio>“.
  8. Chiedere di implementare un algoritmo:  Si può anche chiedere di creare un algoritmo che svolga un compito preciso. Prompt di esempio: “Scrivi il codice per iterare una lista in Python e stampare tutti gli elementi della stessa“.

Questi sono soltanto alcuni dei modi in cui si può interrogare PaLM durante l’attività di programmazione. Ovviamente sono supportati tutti i linguaggi di programmazione più diffusi, non solo Python.

 

Esempio di utilizzo della libreria

Di seguito un esempio tratto dal corso [1], questa volta non ho creato un repository per esempi personalizzati:

#Step 1: Install the library.
# pip install -q google.generativeai

#Step 2: Get the right model. from utils import get_api_key import os import google.generativeai as palm from google.api_core import client_options as client_options_lib
#Step 3: Configure the library and set the personal key. palm.configure( api_key=get_api_key(), transport="rest", client_options=client_options_lib.ClientOptions( api_endpoint=os.getenv("GOOGLE_API_BASE"), ) ) #Step 5: choose the right model.
models = [m for m in palm.list_models()
if 'generateText'
in m.supported_generation_methods] model_bison = models[0]

#Step 6: Define a wrapper to retry if a call fails.
from google.api_core import retry
@retry.Retry()
def generate_text(prompt, model=model_bison, temperature=0.0):
return palm.generate_text(prompt=prompt, model=model, temperature=temperature)

#Step 7: Define the prompt.
prompt = "Show me how to iterate across a list in Python."

#Step 8: Generate the response and print it.
completion = generate_text(prompt)
print(completion.result)

The result will be:

 

Passi da seguire per utilizzare la libreria

L’utilizzo di PaLM non è gratuito. I passi per registrarsi e poter eseguire il codice del paragrafo precedente in locale sono i seguenti:

  1. Registrarsi su Google Cloud [4]
  2. Inserire la propria carta di credito tra i metodi di pagamento.
  3. Creare un progetto.
  4. Attivare per questo progetto la libreria: Generative Language API.
  5. Creare una Chiave API.
  6. Inserire la chiave generata nella variabile d’ambiente: GOOGLE_API_BASE.
  7. Eseguire il codice del paragrafo precedente.

Attenzione: Come sempre proteggere il più possibile la chiave generata per impedire che si diffonda e venga usata senza autorizzazione. Eventualmente attivare degli alert e delle soglie di spesa.

 

Considerazioni

Gli sviluppatori di codice da sempre cercano di utilizzare degli strumenti che gli permettano di essere più produttivi e scrivere codice migliore, più performante, privo di bug e leggibile.

L’affermarsi delle tecnologie di intelligenza artificiale e dei modelli LLM non è stata vista come una minaccia, ma come una opportunità di velocizzare e semplificare il proprio lavoro. Alcune attività noiose possono essere semplificate da questi strumenti. Penso all’individuazione di bug, alla comprensione del codice e allo sviluppo di test di unità.

Tuttavia non è pensabile di copiare e incollare il codice forniton da una AI senza averlo provato e controllato perché non è scevro da errori, da allucinazioni e da insidie nascoste. Questo significa che si può usare l’AI nel proprio lavoro, ma va fatto con criterio e attenzione.

L’output fornito dalle AI dipende molto dalla bontà del prompt di ingresso e la bontà del prompt di ingresso dipende molto dalla competenza del programmatore. La legge “garbage in, garbage out” è sempre valida.

Infine, per come sono programmate le AI e per come sono addestrate, i risultati prodotti sono sempre “soluzioni nella media”, ossia rielaborazioni di cose che qualcuno ha già fatto e che hanno trovato in qualche documento o tutorial. Per questo per soluzioni originali e creative non si potrà che ricorrere a programmatori umani geniali e creativi.

 

 

Fonti e riferimenti

 

7 months ago

Leave a Reply

Your email address will not be published. Required fields are marked *