DEV Community

Cover image for Tive ajuda do ChatGPT para integrar Skill da Alexa em mini maratona
Saulo Dias
Saulo Dias

Posted on

Tive ajuda do ChatGPT para integrar Skill da Alexa em mini maratona

Quarta-feira de Cinzas, 10:12 PM:
— "Você acha que eu consigo integrar o ChatGPT com a Alexa até meia-noite?", perguntei.
— "Sim. Já te ajudo aí", respondeu meu amigo, me enviando instruções que pediu à IA.

Ri e comecei.

Mini maratona

Desempoerei minha conta da AWS, "rascunhei" (lógico que foi o ChatGPT) um código e subi para o Amazon Lambda Function.

Não curti que tem que subir os node modules também, mas tem vantagens e desvantagens. Não discorrerei.

Criei a Skill no Amazon Developer Console.

Criei lá a key para acessar a API da OpenAI. É de graça também, heim!

Adicionei o endpoint para a Lambda Function, e na Lambda Function adicionei o ID da skill como trigger. Tudo muito redondinho.

const ChatGPTCommandIntentHandler = {
  canHandle(handlerInput) {
    return (
      Alexa.getRequestType(handlerInput.requestEnvelope) === "IntentRequest" &&
      Alexa.getIntentName(handlerInput.requestEnvelope) ===
        "ChatGPTCommandIntent"
    );
  },
  async handle(handlerInput) {
    const command =
      handlerInput.requestEnvelope.request.intent.slots.command.value;

    const speechOutput = await queryChatGPT(command);

    console.log(speechOutput);

    return handlerInput.responseBuilder.speak(speechOutput).getResponse();
  },
};

const skillBuilder = Alexa.SkillBuilders.custom();

const handler = skillBuilder
  .addRequestHandlers(
    ChatGPTCommandIntentHandler,
    Alexa.CancelIntentHandler,
    Alexa.HelpIntentHandler,
    Alexa.StopIntentHandler,
    Alexa.NavigateHomeIntentHandler
  )
  .lambda();

export { handler };
Enter fullscreen mode Exit fullscreen mode

Teoricamente eu consegui fazer tudo até meia-noite. Tudo bem cagado, mas fiz.

Hoje de noite fui tentar entender porque está tudo funcionando certinho, mas a Alexa não consegue entender os comandos de voz. Ela não detecta o intent. Via texto funciona muito bem, mas esse é um trabalho que eu tenho que terminar antes de pensar em publicar a Skill ou disponibilizar o código por completo. Caso tenha interesse, fale comigo.

Não era minha intenção me aprodundar na parte técnica aqui, e sim demonstrar que dá pra usar o ChatGPT para produzir mais? Dá! Porém só até a terceira página.

Realidade

A realidade é que eu acabei 80% do trabalho em 20% do tempo, mas teve muita coisa dando errado. 80% do tempo foi debugando e apurando a parte que eu achei que ia ser mais fácil, a criação do Modelo de Interação. Culpa do Developer Console da Alexa? Não sei, mas não é tão simples quanto parece e ainda tem bastante coisa pra ajustar.

Usuário testa Skill da Alexa que consulta o ChatGPT pergutando quem é Joelma. ChatGPT responde "Joelma é uma das mais famosas cantoras do Brasil. Ela é conhecida por suas músicas românticas e por sua voz linda."
A API é bem-humorada, às vezes. Outras vezes é bipolar.

Opinião precoce sobre a API

Tive a impressão API da OpenAI é bem fraquinha ainda se comparada com o ChatGPT em si, e isso parece muito escolhas de design, não capacidade. Também pode ser o ajuste dos parâmetros. Ainda tem bastante coisa a aprender em relação à API e eu meio que só fiz uns ajustes rápido pra testar.

export async function queryChatGPT(query) {
  const prompt = query;
  const headers = {
    "Content-Type": "application/json",
    Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
  };
  const data = JSON.stringify({ // Esses parâmetros aqui controlam
    prompt: prompt,             // características das respostas. 
    max_tokens: 50,             // Leia os docs.
    temperature: 0.3,
    n: 1,
  });

  const response = await axios.post(endpoint, data, { headers: headers });
  const answer = response.data.choices[0].text.trim();
  const speechOutput = answer.split("\n")[0];

  return speechOutput;
}
Enter fullscreen mode Exit fullscreen mode

Estou usando o endpoint https://api.openai.com/v1/engines/davinci/completions, não o davinci-codex.

Sobre a experiência

Desenvolver com completo auxílio da IA e usar o Google por opção foi muito interessante e dinâmico.

Houve momentos, porém, que o ChatGPT me induziu ao erro e me fez apagar código funcional pra tentar implementar algo que não fazia sentido.

Por exemplo, ele escreveu um Code Snipet que tinha algo como const chatGPT = new AWS.ChatGPT(). Eu fiquei feliz achando que a Amazon tinha integrado o Chat dentro do SDK, mas depois fiquei me sentindo burro quando pesquisei.

Ele é um excelente mentiroso, e se você não prosseguir com cautela, ele pode literalmente dizer pra você que nariz de porco é tomada sim, e é capaz de você acreditar, e o porco pagar o pato.

Em resumo, por enquanto, o desenvolvedor continua sendo super relevante. Decisões de arquitetura precisam ser feitas, erros precisam ser debugados, parâmetros refinados, e UX definida. Tem um mundo de coisas que ainda não dá pra delegar para a IA.

Oldest comments (0)