Gemini su Windows e nelle app con Visual Studio: fantastico!

Google AI Studio rende accessibili le API per l'integrazione di Gemini, un avanzato chatbot basato su AI generativa, in applicazioni personalizzate. Grazie a Visual Studio, è possibile sviluppare software multipiattaforma in .NET che interagiscono con l'intelligenza artificiale Google.

Jan 15, 2025 - 19:13
Gemini su Windows e nelle app con Visual Studio: fantastico!

Uno dei principali vantaggi della piattaforma Google AI Studio è che essa, diversamente a quanto fa ad esempio OpenAI, permette agli utenti di utilizzare le API (Application Programming Interface) gratis, con restrizioni che per gli utenti normali, per buona parte dei professionisti e per molti sviluppatori, sono assolutamente ragionevoli. Diventa così possibile integrare Google Gemini nelle proprie applicazioni e direttamente in Windows, con soluzioni personalizzate che fino a qualche tempo fa sarebbero state davvero impensabili!

Gemini è un chatbot costruito sulle soluzioni di intelligenza artificiale generativa sviluppate da Google. È progettato per fornire risposte contestuali, generare testi, tradurre contenuti e facilitare l’automazione delle attività. Rappresenta un’evoluzione significativa nel campo dell’IA, posizionandosi come concorrente diretto di strumenti come ChatGPT di OpenAI e Claude di Anthropic.

Certamente conoscete la possibilità di usare Gemini su Android, sostituendo il tradizionale assistente digitale di Google, e vi è nota la modalità di accesso al chatbot basato sul Web. Quello che lascia davvero di stucco è la semplicità con cui è possibile integrare Gemini e l’AI generativa Google nelle proprie applicazioni.

Come integrare Gemini su Windows grazie a Visual Studio

Accedete alla dashboard di Google AI Studio quindi portatevi nella pagina che permette di generare una API key privata. Come potete facilmente verificare, Google fornisce la sintassi JSON da utilizzare, ad esempio, dalla riga di comando. Servendosi dell’utilità curl, si può chiedere a Gemini (o meglio, ai modelli generativi o LLM, Large Language Models, sottostanti…) di rispondere a qualunque quesito o prompt usando esclusivamente la finestra del terminale. Senza bisogno di nessun intermediario.

E se si volesse ottenere risposte da Gemini a partire dal progetto di una propria applicazione sviluppata con Microsoft Visual Studio? Ci siamo divertiti a farlo e il risultato è davvero incoraggiante, lasciando sul tavolo enormi possibilità di personalizzazione.

Nell’immagine ciò che otterrete seguendo i passaggi descritti in questo articolo. Un’applicazione chiamata Chiedilo a Gemini che riceve in ingresso un prompt arbitrario e, cliccando sul pulsante Genera Testo, provvede a interrogare Gemini mostrando quindi la risposta ottenuta, opportunamente formattata.

Chatbot Windows Gemini

Come comunicare con Gemini da un’applicazione .NET

Supponiamo di voler sviluppare un’applicazione .NET multipiattaforma con Visual Studio. Avendo cura di realizzarla in .NET, essa sarà compatibile non solo con Windows ma anche con altri sistemi operativi come macOS e Linux.

Utilizziamo la versione più aggiornata dell’IDE Microsoft Visual Studio e per semplicità creiamo un’applicazione Windows Forms Visual Basic.

Creazione app Visual Studio Windows

Alla nuova applicazione si può assegnare il nome AIStudio quindi scegliere il framework preferito. Nel riquadro Esplora soluzioni, cliccate con il tasto destro del mouse sul nome del progetto quindi su Aggiungi, Nuovo elemento.

Form Visual Studio per Google Gemini

Dalla finestra seguente, si deve fare clic su Elementi, su Classe e infine sul pulsante Aggiungi.

Aggiunta classe progetto Visual Studio

Il codice per dialogare con l’intelligenza artificiale dei modelli Google Gemini

Rinominando il file .vb appena aggiunto, suggeriamo di chiamarlo GeminiApi.vb. Al suo interno incollate le seguenti righe di codice:

Imports System.Net.Http
Imports System.Text
Imports System.Text.Json

Public Class GeminiApi
    Private ReadOnly _httpClient As HttpClient
    Private ReadOnly _apiKey As String

    Public Sub New(apiKey As String)
        If String.IsNullOrWhiteSpace(apiKey) Then
            Throw New ArgumentException("API Key non valida.", NameOf(apiKey))
        End If

        _apiKey = apiKey
        _httpClient = New HttpClient() With {
            .BaseAddress = New Uri("https://generativelanguage.googleapis.com/")
        }
    End Sub

    Public Function GenerateText(prompt As String, Optional modelName As String = "gemini-1.5-flash") As String
        If String.IsNullOrWhiteSpace(prompt) Then
            Return ""
        End If

        Dim apiEndpoint As String = $"v1beta/models/{modelName}:generateContent?key={_apiKey}"

        ' Costruzione del corpo della richiesta
        Dim requestBody = New With {
            .contents = New Object() {
                New With {
                    .parts = New Object() {
                        New With {.text = prompt}
                    }
                }
            }
        }

        Dim jsonPayload As String = JsonSerializer.Serialize(requestBody)
        Dim content As New StringContent(jsonPayload, Encoding.UTF8, "application/json")

        Try
            ' Invia la richiesta
            Dim response = _httpClient.PostAsync(apiEndpoint, content).Result
            response.EnsureSuccessStatusCode()

            ' Leggi la risposta
            Dim responseBody As String = response.Content.ReadAsStringAsync().Result

            ' Log della risposta completa per il debug
            'MessageBox.Show("Response: " & responseBody)

            ' Proviamo a deserializzare direttamente il corpo della risposta
            Dim jsonResponse = JsonSerializer.Deserialize(Of JsonElement)(responseBody)

            ' Verifica della risposta JSON
            If jsonResponse.ValueKind = JsonValueKind.Object Then
                ' Estrai i candidates come JsonArray
                If jsonResponse.TryGetProperty("candidates", Nothing) Then
                    Dim candidates = jsonResponse.GetProperty("candidates").EnumerateArray()

                    If candidates.Any() Then
                        ' Ottieni il primo candidato
                        Dim candidate = candidates.First()
                        If candidate.TryGetProperty("content", Nothing) Then
                            Dim contentObj = candidate.GetProperty("content")
                            If contentObj.TryGetProperty("parts", Nothing) Then
                                Dim parts = contentObj.GetProperty("parts").EnumerateArray()
                                If parts.Any() Then
                                    ' Estrazione del testo dal primo 'part'
                                    Dim part = parts.First()
                                    If part.TryGetProperty("text", Nothing) Then
                                        Return part.GetProperty("text").ToString()
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If

            Return "Nessun testo generato."
        Catch ex As Exception
            Return $"Errore: {ex.Message}"
        End Try
    End Function
End Class

Il codice definisce classe `GeminiApi` che interagisce con l’API di Google AI Studio per generare testo in base a un “prompt” fornito dall’utente.

La classe accetta una chiave API (`apiKey`) come parametro indispensabile per l’autenticazione. La funzione `GenerateText` prende il prompt come input e, opzionalmente, un nome di modello (con valore predefinito gemini-1.5-flash).

La routine costruisce il corpo della richiesta in formato JSON aggiungendo il prompt fornito in input. La richiesta è quindi trasmessa all’API (POST) per poi analizzare quanto ricevuto in input per estrarre il testo.

Realizzare il form principale dell’applicazione

Sempre dall’interfaccia di Visual Studio, portatevi nel sorgente del file Form1.vb (Form1.Designer.vb) quindi incollate al suo interno il codice che trovate a questo indirizzo, rimuovendo quanto già presente. È essenziale sostituire la stringa CHIAVE_API_DA_SOSTITUIRE con l’API Key gratuita precedentemente generata avvalendosi dell’interfaccia di Google AI Studio.

Il codice crea un’applicazione Windows Forms che permette di generare e visualizzare il testo ricevuto da Gemini in risposta al prompt fornito dall’utente.

Quando l’utente inserisce un prompt nel `TextBox` e preme il pulsante `Button1`, il programma invia il prompt all’API di Gemini sfruttando la classe `GeminiApi` definita in precedenza.

Il risultato ottenuto è automaticamente formattato sostituendo eventuali ritorni a capo e generando un formato compatibile con il `RichTextBox` (il riquadro di grandi dimensioni che mostra l’ouput ricevuto da Gemini).

Gemini AI su Visual Studio

Note conclusive

Il modello gemini-1.5-flash che abbiamo scelto di inserire consta di limitazioni molto “generose”. Come si può verificare aprendo l’interfaccia di Google AI Studio quindi cliccando sul menu a tendina Models sulla destra, il modello tollera ben 1.500 richieste giornaliere e sopporta fino a 15 richieste al minuto (RPM). Eventualmente, si può modificare il codice della classe `GeminiApi` in modo tale da utilizzare gli altri modelli generativi Google, anche quelli più completi, complessi, recenti e sperimentali.

Limitazioni modelli generativi Google Gemini

Da ultimo riflettete per qualche istante su quanto abbiamo realizzato: l’applicazione creata con Visual Studio può essere trasformata in un software capace di integrarsi con Windows e fungere da assistente evoluto o addirittura ricoprire il ruolo di agente AI. L’applicazione può integrarsi con gli altri programmi in esecuzione ed esterne le abilità grazie all’intelligenza artificiale generativa di Gemini.

È tutto materiale per un approfondimento che pubblicheremo prossimamente su IlSoftware.it.