• User

    GPT3 in Google SHEETS

    Su invito di @giorgiotave vi scrivo questa piccola guida frutto delle mie curiosità degli ultimi giorni.
    Perdonatemi eventuali inesattezze, si tratta più che altro di appunti.

    Il fine: portare il potere di GPT3 in G Sheets.

    Il come: useremo uno script che collega G Sheets alle Api di open.ai e crea due funzioni personalizzate di G Sheets che saranno
    =GPT3
    =GPT3_RANGE

    Prima di cominciare dovete creare un account su [https://openai.com/api/](link url) e ottenere una vostra API KEY per utilizzare lo script. Una volta creato l’account segnatevi la vostra API KEY

    Ho testato e creato diversi script in questi giorni ma questo per il momento è quello che ritengo più semplice e flessibile, per essere corretti vi segnalo che questo è una modifica di un codice creato da HarishGarg.

    Ovviamente lo usate a vostro rischio e pericolo, è frutto di alcuni test che ho fatto ed è sicuramente migliorabile….. bla, bla, bla


    const OPENAI_API_KEY = ""; // <- INSERISCI QUI LA TUA API KEY
    const OPENAI_API_URL = "https://api.openai.com/v1/completions";

    /**

    • Submits a prompt to GPT-3 and returns the completion
    • @param {string} prompt Prompt to submit to GPT-3
    • @param {float} temperature Model temperature (0-1)
    • @param {string} model Model name (e.g. text-davinci-002)
    • @param {int} maxTokens Max Tokens (< 4000)
    • @return Completion from GPT-3
    • @customfunction
      */

    function onOpen(){
    let ui = SpreadsheetApp.getUi();
    ui.createMenu('Salva Valori')
    .addItem('Save', 'saveAsFixedValue')
    .addToUi();
    }

    function saveAsFixedValue(){
    let ss = SpreadsheetApp.getActiveSheet()
    let data = ss.getDataRange().getValues()
    ss.getRange(1,1,data.length,data[0].length).setValues(data)
    }

    function GPT3(
    prompt,
    temperature = 0.6,
    model = "text-davinci-002",
    maxTokens = 256
    ) {
    var data = {
    prompt: prompt,
    temperature: temperature,
    model: model,
    max_tokens: maxTokens,
    };
    var options = {
    method: "post",
    contentType: "application/json",
    payload: JSON.stringify(data),
    headers: {
    "Authorization": Bearer ${OPENAI_API_KEY},
    "Content-Type": "application/json",
    },
    };
    var response = UrlFetchApp.fetch(
    OPENAI_API_URL,
    options
    );

    return JSON.parse(response.getContentText()).choices[0].text.trim();
    }

    /**

    • Submits examples to GPT-3 and returns the completion
    • @param {Array<Array<string>>} input Range of cells with input examples
    • @param {Array<Array<string>>} input Range of cells with output examples
    • @param {string} Cell to pass as input for completion
    • @param {float} temperature Model temperature (0-1)
    • @param {string} model Model name (e.g. text-davinci-002)
    • @param {int} maxTokens Max Tokens (< 4000)
    • @return Completion from GPT-3
    • @customfunction
      */
      function GPT3_RANGE(
      examples_input,
      examples_output,
      input,
      temperature = 0.6,
      model = "text-davinci-002",
      maxTokens = 256
      ) {
      prompt = I am an input/output bot. Given example inputs, I identify the pattern and produce the associated outputs.;

    for (let i = 0; i < examples_input.length; i++) {
    example_input = examples_input*;
    example_output = examples_output*;

    prompt += `
    

    Input: ${example_input}
    Output: ${example_output}`;
    }

    prompt += `

    Input: ${input}
    Output:`;

    console.log(prompt);

    return GPT3(prompt, temperature, model, maxTokens);
    }


    Aprite un file G SHEETS andate in STRUMENTI > ESTENSIONI > APPS SCRIPT

    Incollate il codice e inserite la vostra API KEY dove indicato e salvate. La API KEY la trovate nel vostro account di open.ai .

    La prima volta che salvate lo script o che usate la formula riceverete un avviso:

    Schermata 2022-12-27 alle 16.01.38.png

    Cliccate su avanzate e autorizzate.

    Diamo una occhiata al codice:

    Ho inserito una funzione che crea una voce di menu nei fogli che si chiama “Salva Valori” questo perchè quando riaprite il foglio G SHEETS, i risultati vengono ricaricati e consumate risorse, inoltre rischiate che il risultato che avete ottenuto cambi, perchè ad ogni interrogazione GPT3 può restituire risultati diversi. Grazie a “Salva Valori” questo non accade.
    Ricordatevi di premerlo quando avrete ottenuto il risultato voluto e che, una volta premuto, le formule vengono sostituite dai valori in cella. Il bottone si trova nel foglio nel menu principale.

    A seguire lo script collega G SHEETS ad open.ai.

    Poi c’è la funzione che crea la prima formula personalizzata GPT3, noi potremo inserire il prompt direttamente nei fogli mentre "temperature", "model" e "maxTokens" si definiscono all’interno della funzione.

    Per capire come impostare al meglio la vostra AI vi rimando qui alla documentazione ufficiale:
    [https://beta.openai.com/docs/introduction](link url)

    e vi riporto un estratto:

    "The token count of your prompt plus max_tokens cannot exceed the model's context length. Most models have a context length of 2048 tokens (except for the newest models, which support 4096).
    ....
    What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer."

    Il language model qui è il text-davinci-002 se passate a text-davinci-003 probabilmente i testi saranno migliori, però alla fine della guida vedrete che il davinci-002 ha compreso meglio un piccolo test.

    A questo punto possiamo utilizzare GPT3 nei nostri fogli.

    La flessibilità di questo script sta nel fatto che possiamo utilizzare qualsiasi prompt e quindi fare moltissime cose.

    Prima di tutto possiamo ottenere risposte da chatGPT direttamente nei nostri fogli e questo è molto utile…. un esempio?

    Schermata 2022-12-28 alle 08.12.51.png

    =GPT3("scrivi la formula Google sheets per fare la media dei valori contenuti tra B2 e B7 quando nell'intervallo A2 A7 il valore corrispondente è 'Emanuele')")

    Restituisce la formula =AVERAGEIF(A2:A7,"Emanuele",B2:B7)
    Utile se non vi ricordate una formula.

    Ma non finisce qui, aggiungendo un intervallo dati dopo il prompt, il prompt può essere applicato all’intervallo dati.

    Un esempio:
    se mettiamo nella cella A5 il nome di un prodotto ES: Apple Watch Series 8 GPS 41mm

    e proviamo in B5 questa formula: =GPT3("scrivi una breve descrizione di questo prodotto"&A5&"?").

    Restituisce:

    "L'Apple Watch Series 8 GPS da 41 mm è uno smartwatch di ultima generazione che offre una vasta gamma di funzionalità. Include la connettività GPS, un monitoraggio della frequenza cardiaca, una ricca esperienza di fitness e l'accesso a un'ampia gamma di app. La cassa in alluminio resistente e l'eccellente display Retina offrono un design moderno e resistente. La batteria a lunga durata offre fino a 18 ore di utilizzo."

    NON MALE …..

    In questo video invece potete vedere come utilizzando diversi prompt nelle formule ho generato diverse versioni di un testo cambiando il tono: professionale, allegro, apocalittico, etc.:

    [https://www.linkedin.com/posts/emricci_chatgpt-ai-googlesheets-activity-7013430889778954240-8nd5](link url)

    E se le risposte non vi piacciono? Potete addestrare l’AI, come? Fornendo dati di esempio attraverso la seconda formula personalizzata =GPT3_RANGE.

    Qui vedete una serie di operazioni che ho inserito tra A26 e A28 e i risultati tra B26 e B28

    Schermata 2022-12-28 alle 09.28.36.png

    Se provate a chiedere all AI di completare la serie aggiungendo il dato in B29 con questa formula:

    =GPT3_RANGE($A$26:$A$28,$B$26:$B$28,A29) la risposta terrà conto non solo di cosa c’è in A29 (2+5) ma anche degli esempi che abbiamo fornito.

    Schermata 2022-12-28 alle 09.30.52.png
    Ho insegnato all’ AI che 2+5 fa 8. 😀

    Nota: Ho fatto lo stesso test cambiando il language model e mettendo il text-davinci-003 e invece di “8” restituiva “9”, perchè? Non ne ho la più pallida idea, magari qualcuno bravo può spiegarlo nei commenti…. Però questo ci ricorda che i risultati vanno sempre verificati.

    Io fino ad ora ho testato lo strumento, il prossimo passo è elaborare prompt articolati che mostrino risultati sempre migliori, mi ci dedicherò dopo le vacanze.

    BUON DIVERTIMENTO!


    giorgiotave 1 Risposta
  • Community Manager

    @emanuele-ricci grazieeeeeee ❤


  • User Newbie

    Ciao, ho provato a seguire le indicazioni e mi dice errore: È stato effettuato un tentativo di eseguire myFunction, ma il salvataggio non è riuscito.


    Emanuele Ricci 1 Risposta
  • Moderatore

    È un piacere poter scrivere in questo thread 🙂
    Grazie per gli step @Emanuele-Ricci.

    Contribuisco condividendo un post che ho scritto che permette di generare Regex attraverso GPT-3 attraverso un foglio di Google Sheet.
    Dal post è anche possibile duplicare il foglio di Google.

    Il post: https://www.alessiopomaro.it/regex-gpt-3-ai/


    giorgiotave 1 Risposta
  • Community Manager

    @alepom e io lo aggiunto alla discussione sulle risorse


  • User

    @emanuela-0 nel copia incolla del codice mi sa che alcuni caratteri sono cambiati.... come spiegazione è valida, per il codice vai a questo link e fai una copia del foglio. https://docs.google.com/spreadsheets/d/1vE6CoRh_JzL5tXBcmbq0xIVnooKxvSkQvUSlQpLqSBs/edit?usp=sharing
    Ricordati di inserire l'api key in ESTENSIONI > APPS SCRIPT se no non funziona.


  • Moderatore

    Lancio una nuova idea.

    La generazione di FAQ (domande e risposte) partendo dai dati del prodotto, con relativi dati strutturati.
    Potrebbe essere fatto tutto con le API di GPT-3, ma è interessante anche usare un mix con la ChatGPT, comoda per la formattazione del JSON e il tasto "copia".

    Quindi..

    • il prompt per GPT-3 trasforma i dati del prodotto in FAQ (nell'esempio anche categorizzate);
    • l'output va a comporre dinamicamente il prompt per per un'altra richiesta che genera i dati strutturati.

    generazione-FAQ-GPT-3.png


    giorgiotave 1 Risposta
  • Community Manager

    @alepom bella idea! Quasi quasi la stacco in una nuova discussione così è più facilmente linkabile..