Tutorial completo: Integração do Telegram com ChatGPT da OpenAI

Olá a todos! Hoje, gostaria de compartilhar com vocês um projeto empolgante que desenvolvi recentemente: um chatbot personalizado utilizando a biblioteca Telebot para criar bots no Telegram e o GPT-3.5 Turbo da OpenAI, a API para o ChatGPT, esse poderoso modelo de linguagem capaz de gerar texto similar ao humano, que todo mundo já conhece, não conhece?. Neste artigo, mostrarei como construir um chatbot que mantém conversas separadas para cada usuário, semelhante ao ChatGPT. Vamos começar!

  1. Pré-requisitos e Instalação das Bibliotecas

Antes de começarmos, certifique-se de ter o Node.js instalado em sua máquina. Em seguida, abra seu terminal e navegue até o diretório do projeto. Inicie o projeto usando um dos comandos:

npm init -y

ou

yarn init -y

Feito isso, Precisaremos instalar as bibliotecas necessárias executando estes comandos:

npm install dotenv telebot openai

ou

yarn add dotenv telebot openai

Esse comando instalara as bibliotecas dotenv, Telebot e OpenAI.

  1. Criando o o arquivo main.js

Precisamos criar um arquivo, chamado main.js ou com o nome de sua escolha que será o nosso arquivo principal.

  1. Configurando o package.json

Como queremos utilizar a estrutura de imports mais modernas do javascript, precisamos configurar no package.json a chave "type": "module" para utilizar a sintaxe de módulos. O arquivo ficará mais ou menos assim:

{
  "name": "tutorial-bot",
  "version": "1.0.0",
  "main": "main.js",
  "type": "module",
  "license": "MIT",
  "dependencies": {
    "dotenv": "^16.0.3",
    "openai": "^3.2.1",
    "telebot": "^1.4.1"
  },
}
  1. Vamos criar um script no package.json para rodar o nosso bot
"scripts": {
  "dev": "node src/main.js"
}
  1. Importando bibliotecas:

Agora com tudo configurado vamos ao código:

import * as dotenv from 'dotenv'
import Telebot from 'telebot'
import { Configuration, OpenAIApi } from 'openai'

Primeiro, importamos as bibliotecas necessárias: dotenv para gerenciar as variáveis de ambiente, pré configuradas no arquivo .env, Telebot para trabalhar com o Telegram e OpenAIApi para integração com o ChatGPT.

TELEGRAM_BOT_TOKEN=<TOKEN>
OPENAI_API_KEY=<API_KEY>

Esse é um exemplo do arquivo .env

  1. Configurando dotenv e inicializando variáveis:
dotenv.config()
const userMessages = new Map()
const bot = new Telebot(process.env.TELEGRAM_BOT_TOKEN)

Chamamos a função config do dotenv para carregar as variáveis ambientes definidas no arquivo .env, inicializamos um novo Map chamado userMessages para armazenar os históricos de conversas de cada um dos usuários e criamos uma nova instância da classe Telebot com o token da API do Telegram.

  1. Configurando a API OpenAI
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
})
const openai = new OpenAIApi(configuration)

Aqui, criamos um objeto de configuração com nossa chave da API OpenAI e instanciamos um novo objeto OpenAIApi.

  1. A função chatgpt:

Agora vamos fazer, uma função para realizar as chamadas a API do ChatGPT.

async function chatgpt(messages) {
  const completion = await openai.createChatCompletion({
    model: 'gpt-3.5-turbo',
    messages,
  })

  const answer = completion.data.choices[0].message.content
  return answer
}

Esta função assíncrona recebe um argumento: o histórico da conversa. Ela gera uma resposta usando o modelo GPT-3.5 Turbo e a retorna.

  1. Lidando com mensagens de texto recebidas:
bot.on('text', msg => {
  const userId = msg.from.id
  const text = msg.text

  if (!userMessages.has(userId)) {
    userMessages.set(userId, [])
  }

  const messages = userMessages.get(userId)
  messages.push({ role: 'user', content: text })

  chatgpt(messages)
    .then((message) => {
      bot.sendMessage(userId, message)
      messages.push({ role: 'assistant', content: message })
    }).catch(console.log)
})

Usamos o método on para ouvir mensagens de texto recebidas e processá-las com uma função de retorno de chamada. O objeto msg contém informações sobre a mensagem e seu remetente. Na função de retorno de chamada, verificamos primeiro se há um histórico de conversa existente para o usuário atual (identificado por seu userId). Se não houver, criamos um novo array vazio para esse usuário no Map userMessages. Em seguida, recuperamos o array de messages específico do usuário e adicionamos a entrada do usuário a ele.

Após isso, chamamos a função chatgpt e enviamos o array de messages do usuário. Quando a promise é resolvida, enviamos a resposta de volta ao usuário e adicionamos a resposta do assistente ao array de messages do usuário. Se ocorrer um erro, registramos no console.

  1. Iniciando o bot:
bot.start()

Finalmente, chamamos o método start para iniciar o bot e começar a ouvir as mensagens recebidas.

E é isso! Com apenas algumas linhas de código, criamos um chatbot personalizado usando o Telegram e o ChatGPT da OpenAI. Ao manter conversas separadas para cada usuário, garantimos uma experiência mais personalizada. O código encontra-se no repositório lucassnts963/telegram-chatgpt-integration. Também gravei um video, está no meu canal no YouTube. CLIQUE AQUI PARA ASSISTIR O VIDEO