ChatGPT, sviluppato da OpenAI è un modello di linguaggio sofisticato che è stato addestrato su miliardi di parole e frasi per generare testo in modo autonomo, in risposta a domande o richieste.
In poche parole, è un programma di intelligenza artificiale progettato per comunicare con gli esseri umani in modo naturale attraverso una chat. Senza dubbi, l’avvento di chat GPT a fine novembre 2022 ha segnato una svolta nel mondo delle intelligenze artificiali.
Immagina di unire le potenzialità di questa tecnologia al mondo della domotica tramite un assistente vocale come Alexa, cosa succederebbe? È quello che ti aiuterò a fare in questo articolo, permettendoti di usare Chat GPT con Alexa.
Ecco come usare Chat GPT con Alexa:
- Accedi al sito Amazon Developer
- Crea la tua nuova skill
- Inserisci i file della skill nella Alexa Developer Console
- Genera la chiave API e l’Organization ID
- Testa la nuova skill
Accedi al sito Amazon Developer
Per prima cosa, recati sul sito Amazon developer. Una volta fatto, in alto a destra clicca su “Accedi” ed entra nel tuo account Amazon (oppure creane uno nuovo).
Dopo aver effettuato l’accesso, ti troverai davanti alla seguente schermata:
Dopo aver inserito i dati necessari, in basso a destra clicca sul pulsante arancione con scritto “Submit”. Inserisci la stessa email che hai associato ai tuoi dispositivi Alexa, altrimenti non sarai in grado di usare la skill successivamente.
Nella seguente schermata, seleziona le caselle come in foto e clicca su “Start exploring the console”
Verrai reindirizzato nella dashboard della Amazon Developer console.
Crea la tua nuova skill
Nella dashboard della Amazon Developer console, sotto la voce “Amazon Alexa” ”clicca su “Alexa skills kit”.Nella schermata che ti apparirà, clicca sul pulsante celeste con scritto “Crea skill”.
In questa schermata, dai un nome identificativo alla tua nuova skill (io ho deciso di chiamarla Alexa PRO) e imposta la lingua su Italiano.
Successivamente, clicca su “Next”.
Nella schermata che ti troverai davanti, setta le impostazioni come nelle seguenti foto:
Fai attenzione a impostare la regione su “EU (Ireland)”. Una volta fatto, clicca su “Next”.
Nella pagina successiva, lascia l’impostazione già selezionata “Start from Scratch”, poi clicca ancora su “Next”.
Ti troverai davanti a questa pagina, che non è altro che la revisione delle impostazioni che hai settato:
Non ti resta che cliccare su “Create Skill” e attendere qualche minuto affinché il processo venga completato. Alla fine, ti comparirà questa schermata:
Scarica i file della skill per usare Chat GPT con Alexa
Adesso, dovrai scaricare il file ZIP che contiene le istruzioni necessarie alla skill per funzionare.
All’interno di questo file potrai trovare due versioni della skill per Alexa.
- Davinci, la versione meno recente dell’intelligenza artificiale, che risponde alle domande in modo meno censurato;
- Chat GPT, la versione più recente dell’intelligenza artificiale, che tuttavia ha più limitazioni imposte dagli sviluppatori.
La guida si adatta ad entrambe le versioni, usa quindi quella che preferisci.
Ricorda però che Davinci ha un costo maggiore per ogni richiesta (0,02$ ogni mille token) rispetto a Chat GPT (0,002$ ogni mille token). Approfondirò meglio questo aspetto alla fine dell’articolo.
Inserisci i file della skill nella Alexa Developer Console
Nella dashboard della Alexa Developer Console clicca su “Interaction Model” e poi su “JSON Editor”.
A questo punto, seleziona ed elimina tutte le righe di codice ed eliminale.
Torna sul file precedentemente scaricato e, dopo aver selezionato la versione di intelligenza artificiale che preferisci, apri il file chiamato “interactionModel.json”.
Per farlo, avrai bisogno di un editor di testo. Se non ne hai già uno, ti consiglio di scaricarti Microsoft Visual Studio Code oppure Notepad++.
A questo punto, copia tutto il contenuto.
Dopo averlo fatto, torna sulla Alexa Developer Console e incolla tutto il codice.
In alto a destra, clicca su “Save Model”e poi su “Build Model” e aspetta che finisca tutti i processi.Successivamente, recati nella sezione “Code” della Alexa Developer Console.
Ora cancella tutto il codice in index.js e sostituiscilo con quello del file che hai scaricato, come mostrato in precedenza (apri il file index.js, copiane il contenuto e incollalo nella Alexa Developer Console).
Genera la chiave API e l’Organization ID
Recati su platform.openai.com e accedi con il tuo account OpenAI (oppure creane uno).
Dopo aver effettuato l’accesso, in alto a destra clicca su “Personal” e poi su “View API Keys”. Ti troverai difronte alla seguente schermata:
Clicca su “Create new secret Key” e copia la chiave che ti verrà fornita.
Torna sulla Developer Console e incolla la tua chiave API nel campo di testo che recita “INSERISCI LA CHIAVE”.
A questo punto, torna su platform.openai.com e, in “Settings”, copia il tuo Organization ID.
Torna sulla Developer console e incollalo nel campo di testo che recita “INSERISCI ORGANIZATION ID”.
In alto a destra, clicca su “Save”.Seleziona la sezione package.json e, come prima, elimina tutto il codice e incolla al suo posto quello presente nel file che hai scaricato.
Ora, in alto a destra, clicca su “Deploy”
Testa la nuova skill
Vai nella sezione “Test” della Alexa Developer Console e clicca su “Development”.
Complimenti! Ora puoi usare chat GPT con Alexa.
Puoi provare subito la nuova skill chattando con Alexa nella simulazione presente sulla parte sinistra dello schermo.
D’ora in poi sarai in grado di usare la skill da tutti i tuoi device con Alexa integrata. Per farlo, chiama Alexa e dille “Apri Chat GPT” oppure, semplicemente “Chat GPT”.
Ricorda che potrai usare questa skill sui tuoi dispositivi Alexa solo se, per creare l’account Amazon Developer, hai usato la stessa email associata ai tuoi dispositivi.
Se lo desideri, puoi anche cambiare il nome di invocazione della skill. Per farlo, recati nella sezione “Build” della Alexa Developer Console. Nella schermata che ti appare, clicca su “Invocations” e poi su “Skill Invocation Name“.
Scegli il nome che preferisci e clicca su “Save Model“, poi su “Build Model“.
Informazioni sull’API di ChatGPT
È importante precisare che le richieste fatte ad Alexa tramite questa skill hanno un costo, che si aggira attorno a qualche centesimo di dollaro.
Tuttavia non preoccuparti, non dovrai inserire metodi di pagamento per usarla, almeno per un po’. OpenAI mette infatti a disposizione di tutti un credito di 18 dollari (più che sufficiente per fare moltissime richieste) che potrai usare in modo completamente gratuito.
Puoi controllare quanto hai usato l’API di OpenAI dal sito platform.openai.com andando su personal>View API keys>Usage.
Come menzionato precedentemente, i costi dell’API variano leggermente a seconda del modello di intelligenza artificiale che hai scelto. Al termine dei 18$ di credito, potrai continuare a usare l’API di OpenAI inserendo un metodo di pagamento. In qualunque caso, la cifra messa a disposizione gratuitamente dovrebbe essere più che sufficiente.
Conclusioni
Gli assistenti vocali, per come gli abbiamo imparati a conoscere fino ad oggi, possono rivelarsi molto utili, ma le loro potenzialità non sono ancora state sfruttate al massimo.
In questa guida abbiamo invece visto un metodo per espandere gli orizzonti di Alexa, integrandoci le capacità dell’intelligenza artificiale più evoluta del momento, ChatGPT.
In questo modo, possiamo farci un’idea di quello che potrebbe essere il futuro degli assistenti vocali. Spero che questa guida sia stata chiara e che il metodo che ti ho proposto ti sia piaciuto. Se ti interessa questo argomento, dai un’occhiata anche alla mia guida su come usare ChatGPT con Siri. Alla prossima!
Buongiorno
Grazie per l’informazione, il problema e’ che non trovo questa skill nello store di Alexa.
Vivo i UK ma la mia Alexa e’ configurata in Italiano ma anche in Inglese.
Ciao Giuseppe. Purtroppo la skill che avevo consigliato non è più disponibile. La buona notizia è che ho appena aggiornato la guida con un nuovo metodo molto migliore e funzionale, ti consiglio di provarlo!
Ciao Guido, grazie per la Guida. Purtroppo il deployement è fallito. Cosa posso fare?
Questo è quello che esce cliccando:
Cerchi qualcosa in particolare?
Siamo spiacenti. L’indirizzo web inserito non è una pagina funzionante sul nostro sito.
Clicca qui per tornare alla home page di Amazon
Ciao Tanno, purtroppo la skill non era più operativa. Proprio per questo ho aggiornato la guida con un nuovo metodo migliorato per usare ChatGPT con Alexa. Ti consiglio di dargli un occhiata 😉
La skill non sembra più operativa, nell’app Alexa non c’è e al link indicato la pagina non si apre.
Ciao luigi, purtroppo la skill non funziona più. Proprio per questo ho aggiornato la guida con un nuovo metodo ancora più interessante e funzionale, ti consiglio di provarlo!
error request failed with status code 429
Questo è ciò che Alexa riferisce quando provo ad interrogaree chat gpt
Ciao Alex, come prima cosa controlla se hai sostituito il codice originale con quello del file scaricato in tutte le sezioni senza errori. Assicurati anche di aver inserito correttamente la tua API e l’organization ID. Se il problema dovesse persistere, ti consiglio di ripetete il processo da capo creando una nuova skill
Niente da fare… Ho controllato, ho rifatto, anche con un’altro account sia di alexa sia di openia e da sempre lo stesso errore, ed è incredibile…
Ciao, anche a me da lo stesso identico errore, anche io ho ripetuto l’installazione, ma continua a darlo
L’errore “Request failed with status code 429” indica che la richiesta è stata respinta dal server poiché è stato superato il limite di richieste consentite in un certo periodo di tempo. Questo potrebbe essere dovuto a diversi fattori, ma per fortuna ci sono varie soluzioni. La prima è quella di generare una nuova chiave API. Se anche così l’errore dovesse persistere, ti consiglio di creare un nuovo account OpenAI e di generare una nuova chiave API da quest’ultimo.
Ciao , a me da “error request failed with status code 401”
Ho già provato a rifare tutti i passaggi controllando bene l’api key e tutto il resto.
Risolto grazie. Avevo tolto un apice nel campo dell’organization.
Buonasera Guido, è possibile sostituire le istruzioni di controllo avvio cosicché invece di dire Alexa apri Chat Gpt dire Alexa aprì “nome qualsiasi”?
Ciao Marco, ho appena aggiornato l’articolo aggiungendo questa spiegazione;)
Buonasera, innanzitutto grazie per le dritte..
anche a me , la skill parte correttamente chiedendomi “come posso aiutarti”
ma poi qualsiasi cosa chiedo, anche a me risponde con
Error: Request failed with status code 429
L’errore “Request failed with status code 429” indica che la richiesta è stata respinta dal server poiché è stato superato il limite di richieste consentite in un certo periodo di tempo. Questo potrebbe essere dovuto a diversi fattori, ma per fortuna ci sono varie soluzioni. La prima è quella di generare una nuova chiave API. Se anche così l’errore dovesse persistere, ti consiglio di creare un nuovo account OpenAI e di generare una nuova chiave API da quest’ultimo.
Tutte queste cose le ho già fatte, ma continua a non funzionare… Rimango in attesa se qualcuno ha sbloccato la situazione, sempre che non sia la stessa Alexa a bloccare qualcosa a questo punto…
PER L’ERRORE 429, INSERITE UN METODO DI PAGAMENTO SU OPEN IA E RIFATE IL PROCESSO, IL PROBLEMA SARÀ RISOLTO.
Grazie mille, mi hai risolto un bel problema!
Ho configurato il tutto e impostato il metodo di pagamento ma continuo ad avere Error: Request failed with status code 429…
Se chiedo a echo mi risponde che si è verificato un problema con la skill richiesta.
Buongiorno, però se non capisco male, al momento per aggiungere un metodo di pagamento, bisogna prima fare partire un abbonamento, mentre prima credo ci fosse la possibilità di aggiungere il metodo di pagamento, ma senza attivare nessun pagamento mensile. Sono cambiate le cose?
Confermo. Il credito gratuito mi era scaduto ad Aprile 2023. Impostando un metodo di pagamento e rigenerando la API key il problema si è risolto.
Io ho provato ma mi risponde:
Skill response was marked as failure
Request Identifier: amzn1.echo -api.request.e7a1534b-6744-4 4fc-aeb4-dd2602eccbb5 The target Lambda application returned a failure response
Ho provato 2 volte a creare questa skill
Ciao Cristian, questo errore appare solitamente quando viene commesso un errore nella fase in cui bisogna incollare il codice del file scaricato al posto di quello presente di default. Controllalo attentamente e ricorda di cliccare su “save” e “deploy” al termine di ogni modifica.
Ciao,
ho creato la skills e tutto funziona perfettamente.
La sto utilizzando per creare favole della buonanotte per i miei bambini.
Solo che le risposte sono troppo corte e devo sempre usare il comando “continua”.
Credevo che la lunghezza dipendesse dal valore del Max Token impostato a 99.
Appena provo ad aumentare il valore mi da un’errore della skill.
Come faccio ad aumentare la durata delle risposte?
Purtroppo al momento non è possibile aumentare la lunghezza delle risposte fornite dalla skill poiché dipende dall’API di OpenAi. Se dovesse diventare possibile farlo ti avviserò.
Però secondo me si potrebbe modificare la skill in modo che continui in maniera automatica, senza quel fastidioso intermezzo al quale occorre rispondere “continua”, credi che sia possibile farlo?
Salve, ho seguito la procedura ma mi da errore:
Skill response was marked as failure
Request identifier:
amzn1.echo-api.request.74816a32-8187-4e57-bf81-68c0fc7871c7
The target Lambda application returned a failure response.
Ho controllato la sintassi dei copia /incolla.
Ora sembra rispondere, ma…
“Mi dispiace, io sono una IA di testo e non posso aprire una chat GPT in quanto non ho accesso diretto ad esso. Tuttavia, posso rispondere alle tue domande e conversare con te qui. Di cosa vorresti parlare?. Se vuoi che continui, puoi dirmi continua”
Ciao Giacomo, solitamente questo errore appare quando è stato commesso un errore nella sostituzione del codice o quando non è stato cambiato dove necessario. Controlla attentamente. Se dovesse continuare a non andare ti consiglio di creare una nuova skill seguendo la medesima procedura.
/* *
* This sample demonstrates handling intents from an Alexa skill using the Alexa Skills Kit SDK (v2).
* Please visit https://alexa.design/cookbook for additional examples on implementing slots, dialog management,
* session persistence, api calls, and more.
* */
const Alexa = require(‘ask-sdk-core’);
const prompt = “Ciao, sono Chat Gi Pi Ti, come posso aiutarti?”;
const openaiApiKey = ”;
const organization = ”;
const { Configuration, OpenAIApi } = require(“openai”);
const configuration = new Configuration({
organization: organization,
apiKey: openaiApiKey,
});
const openai = new OpenAIApi(configuration);
var resultit = ”;
const MAX_TOKENS = 4096;
const MAX_RESPONSE_TOKENS = 99;
const truncateConversation = (messages) => {
let totalTokens = 0;
const truncatedMessages = [];
for (let i = messages.length – 1; i >= 0; i–) {
const messageTokens = messages[i].content.split(/\s+/).length + 1; // Add 1 for role token
totalTokens += messageTokens;
if (totalTokens > MAX_TOKENS) {
break;
}
truncatedMessages.unshift(messages[i]);
}
return truncatedMessages;
};
const getChatGPTResponse = async (query, conversation_history) => {
const truncatedConversation = truncateConversation(conversation_history.map((message) => ({ role: message.role, content: message.content })));
truncatedConversation.push({ role: “user”, content: query });
const response = await openai.createChatCompletion({
“model”: “gpt-3.5-turbo”,
“max_tokens”: MAX_RESPONSE_TOKENS,
“messages”: truncatedConversation
});
console.log(‘OpenAI API Response:’, response); // Aggiungi questo log
return response.data.choices[0].message.content;
};
const LaunchRequestHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === ‘LaunchRequest’;
},
async handle(handlerInput) {
const speakOutput = prompt;
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(speakOutput)
.getResponse();
}
};
const ChatGPTIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === ‘IntentRequest’
&& Alexa.getIntentName(handlerInput.requestEnvelope) === ‘ChatGPTIntent’;
},
async handle(handlerInput) {
const userInput = handlerInput.requestEnvelope.request.intent.slots.userInput.value;
const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
const conversation_history = sessionAttributes.conversation_history || [];
const response = await getChatGPTResponse(userInput, conversation_history);
console.log(‘ChatGPTIntentHandler response:’, response); // Aggiungi questo log
resultit = response;
sessionAttributes.conversation_history = conversation_history.concat([{ role: ‘user’, content: userInput }, { role: ‘assistant’, content: response }]);
handlerInput.attributesManager.setSessionAttributes(sessionAttributes);
const responseTokens = response.split(/\s+/).length;
const continuePrompt = responseTokens >= MAX_RESPONSE_TOKENS-50 ? “.. Se vuoi che continui, puoi dirmi continua.” : “”;
return handlerInput.responseBuilder
.speak(response + continuePrompt)
.reprompt(“Se vuoi che continui, puoi dirmi continua, oppure puoi farmi un’altra domanda”)
.getResponse();
}
};
const ContinueIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === ‘IntentRequest’
&& Alexa.getIntentName(handlerInput.requestEnvelope) === ‘ContinueIntent’;
},
async handle(handlerInput) {
const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
const conversation_history = sessionAttributes.conversation_history || [];
const result = await getChatGPTResponse(“Ho bisogno di sapere di più su” + resultit, conversation_history);
console.log(‘ContinueIntentHandler response:’, result); // Aggiungi questo log
sessionAttributes.conversation_history = conversation_history.concat([{ role: ‘user’, content: “Ho bisogno di sapere di più su” + resultit }, { role: ‘assistant’, content: result }]);
handlerInput.attributesManager.setSessionAttributes(sessionAttributes);
const resultTokens = result.split(/\s+/).length;
const continuePrompt = resultTokens >= MAX_RESPONSE_TOKENS-50 ? “.. Se vuoi che continui, puoi dirmi continua.” : “”;
return handlerInput.responseBuilder
.speak(result + continuePrompt)
.withShouldEndSession(false)
.getResponse();
}
};
const ErrorHandler = {
canHandle() {
return true;
},
handle(handlerInput, error) {
console.error(`Error: ${error.message}`);
const speakOutput = `Error: ${error.message}`;
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(speakOutput)
.getResponse();
}
};
const HelpIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === ‘IntentRequest’
&& Alexa.getIntentName(handlerInput.requestEnvelope) === ‘AMAZON.HelpIntent’;
},
handle(handlerInput) {
const speakOutput = ‘Puoi chiedere qualcosa! Come posso aiutare?’;
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(speakOutput)
.getResponse();
}
};
const CancelAndStopIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === ‘IntentRequest’
&& (Alexa.getIntentName(handlerInput.requestEnvelope) === ‘AMAZON.CancelIntent’
|| Alexa.getIntentName(handlerInput.requestEnvelope) === ‘AMAZON.StopIntent’
|| Alexa.getIntentName(handlerInput.requestEnvelope) === ‘AMAZON.NoIntent’);
},
handle(handlerInput) {
const speakOutput = ‘Arrivederci!’;
return handlerInput.responseBuilder
.speak(speakOutput)
.getResponse();
}
};
/**
* This handler acts as the entry point for your skill, routing all request and response
* payloads to the handlers above. Make sure any new handlers or interceptors you’ve
* defined are included below. The order matters – they’re processed top to bottom
* */
exports.handler = Alexa.SkillBuilders.custom()
.addRequestHandlers(
LaunchRequestHandler,
HelpIntentHandler,
CancelAndStopIntentHandler,
ChatGPTIntentHandler,
ContinueIntentHandler)
.addErrorHandlers(
ErrorHandler)
.withCustomUserAgent(‘sample/hello-world/v1.2’)
.lambda();
Mi sono permesso di modificarla un poco.. ora ricorda la conversazione precedente
Ciao Stefano,
solo per info, copiando la tua versione purtroppo copia apici e virgolette sbagliati:
– sostituire “ con ”
– Cambiare var resultit = “; in var resultit = ”;
– Sostituire
for (let i = messages.length – 1; i >= 0; i–) {
con
for (let i = messages.length – 1; i >= 0; i–) con
ciao domanda…. come mai se faccio il test funziona tutto ma quando vado sull echo e chiamo chat gpt non riponde??? grazie
ciao ragazzi , a me funzona nel test sul sito ma se vado davanti a ECHO e dico chat gpt nulla non va!! specifico che ho lasciato il nome chat gpt per prova
Ciao a tutti, funziona ancora o con il blocco in italia di ChatGPT non va più? Perchè a me da errore: “Si è verificato un problema con la risposta della Skill richiesta”
Scusate, risolto, avevo inserito come linguaggio italian.. in inglese funziona.
Risponde in inglese o italiano? E le domande le fai in italiano? Grazie.
Ciao, complimenti per il post!
Ho fatto tutto, ma il funzionamento dipende dalla domanda… se chiedo di inventare una barzelletta, ad esempio, funziona.
Se invece chiedo di inventare una breve storia di fantascienza mi restituisce un errore: Si è verificato un problema con la risposta della Skill richiesta
“value”: “inventa 1 breve storia di fantascienza”,
“resolutions”: {
“resolutionsPerAuthority”: [
{
“authority”: “amzn1.er-authority.echo-sdk.amzn1.ask.skill.d8450c98-1b04-41fe-91ef-dac******ea8.SEARCH”,
“status”: {
“code”: “ER_SUCCESS_NO_MATCH”
}
Da cosa potrebbe dipendere? Grazie anticipatamente per l’eventuale supporto! 🙂
Ho seguito alla lettera la procedura, l’ho rifatta per sicurezza 2 volte, ma continuo a visualizzare l’errore: Error: Request failed with status code 429.
Andando su “https://platform.openai.com/account/usage” ho notato che i $18.00 di prova gratuiti risultano mai usati ma a quanto pare scaduti, visualizzo infatti il messaggio: Expired 1 maggio 2023
Il credito ha quindi una scadenza? E’ questo il motivo dell’errore? E’ possibile usufruire ancora della prova gratuita?
Purtroppo le API di OpenAI sono diventate a pagamento, pertanto questo metodo non va più bene.
Funziona… purtroppo di tanto in tanto mi dice “sì è verificato un problema con la skill richiesta…” anche se la chiamata alla skill funziona e pure le domande & risposte… ma appunto ogni tanto compare questa cosa strana.
Qualcuno sa dirmi se funziona ancora?
non mi funziona, alla fine della procedura mi dice che si è verificato un errore con la skill richiesta, come mai?
Io ho appena fatto tutto, ma la risposta di Alex in test è sempre “Purtroppo si è verificato un problema, prova tra un po’”…
A qualcuno funziona ancora?
Buongiorno, è possibile aumentare la lunghezza delle risposte fornite dalla skill?