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:
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?
=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
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.
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!