Tenho usado a API da OpenAI por várias semanas e tenho pensado em como o ChatGPT é inteligente e consegue entender minhas instruções mesmo quando faltam palavras no texto.
Foi aí que me ocorreu uma ideia: “E se eu pudesse reduzir as palavras usadas nos meus prompts da API para economizar tokens?”
É exatamente isso que vou demonstrar neste post, e você vai ver que é um processo bem simples. Vou dividir o conteúdo em duas seções: uma para aqueles que querem aprender o código e como eu o fiz, e a outra com um aplicativo pronto onde você pode simplesmente inserir o texto desejado.
Como o redutor de prompts funciona
A primeira coisa que você precisa saber é que o nosso prompt passará por duas fases de limpeza:
- Primeiro, vamos remover as palavras de parada do texto. Palavras de parada se referem a um conjunto de palavras frequentemente usadas em um determinado idioma. Por exemplo, no português, palavras como “o,” “é,” e “e” são bons exemplos de palavras de parada.
- Em seguida, vamos lematizar todos os verbos. O lematizador é um processo que reduz as palavras à sua forma base ou raiz, o que ajuda a simplificar e padronizar as formas verbais e facilita para modelos de linguagem como o GPT entenderem e gerarem texto.
Portanto, vamos dar um exemplo com esta descrição do jogo Baldur’s Gate 3, retirada da Wikipedia:
“Baldur’s Gate III é um jogo eletrônico de RPG com elementos para um jogador e multijogador. Jogadores podem criar um ou mais personagens e formar um grupo ao lado de uma variedade de personagens já criados para explorar o enredo do jogo.”
Se colocássemos isso no Tokenizador da OpenAI, ele nos diria que gastaríamos 82 tokens:
Depois de usar nosso redutor de prompts, o texto que obtemos é:
“Baldurs Gate III jogo eletrônico RPG elementos jogador multijogador Jogadores podem criar personagens formar grupo lado variedade personagens criados explorar enredo jogo”
Passamos de 82 para 54 tokens, o que representa uma redução de 34,15% no uso de tokens.
Possíveis Casos de Uso: Por Que Você Iria Querer Reduzir o Uso de Tokens?
Se você já usou a API da OpenAI, provavelmente sabe que ela cobra com base no número de tokens, incluindo tanto os seus prompts quanto as respostas da OpenAI. Embora o uso de um modelo como o GPT-3.5 possa não ser muito caro, o uso do GPT-4 com dados extensos pode se tornar caro.
No meu caso, desenvolvi um aplicativo que busca descrições de produtos em um arquivo .xlsx e as reescreve. Para cada produto em um site, envio uma descrição de produto ao GPT-4 e recebo a descrição de produto reescrita em retorno. Se você, como eu, estiver enviando uma quantidade grande de conteúdo para a API, reduzir os tokens pode ser uma boa ideia.
Também criei um script que extrai descrições de páginas da web e gera títulos e descrições para SEO. Este script usa o mesmo método de limpeza de texto que estou demonstrando aqui.
Como o código do Redutor de Prompts da OpenAI funciona
Seção 1: Entendendo o Código
O código é bastante simples e, além de importar os módulos, gira em torno de 12 linhas de código.
Primeiro, você começa importando os módulos de que precisa, que são:
import nltk # Kit de ferramentas de linguagem natural para processamento de texto from nltk.corpus import stopwords # Conjunto de palavras de parada para filtrar palavras comuns from nltk.stem import WordNetLemmatizer # Lematização para normalização de palavras import string # Fornece uma coleção de caracteres de pontuação
Em seguida, você faz o download de alguns recursos que precisará, e só precisa executar esta parte uma vez. Depois de baixá-la, você pode excluir essas linhas:
# Baixe os recursos necessários do NLTK nltk.download('stopwords') # Baixe o conjunto de palavras de parada nltk.download('punkt') # Baixe o tokenizador punkt nltk.download('wordnet') # Baixe o conjunto de dados WordNet para lematização
Em seguida, insira a função completa para processar o texto:
# Função para pré-processamento de texto def preprocess_text(text): # Crie um objeto lematizador para o inglês lematizador = WordNetLemmatizer() # Carregue o conjunto de palavras de parada para o inglês palavras_de_parada = set(stopwords.words('english')) # Divida o texto de entrada em palavras (tokenização) palavras = text.split() # Aplique lematização, remova palavras de parada, remova espaços em branco e remova caracteres especiais palavras_filtradas = [lematizador.lemmatize(palavra) for palavra in palavras if palavra.lower() not in palavras_de_parada and palavra.strip() != ''] # Remova aspas simples, hifens e sinais de pontuação palavras_filtradas = [palavra.replace("'", "").replace("-", "") for palavra in palavras_filtradas] palavras_filtradas = [''.join(char for char in palavra if char not in string.punctuation) for palavra in palavras_filtradas] # Reconstrua o texto processado a partir das palavras filtradas texto_processado = ' '.join(palavras_filtradas) return texto_processado
Em seguida, você precisará adicionar apenas mais três linhas de código para inserir seu texto e receber a saída formatada:
# Processar texto texto = "Seu texto aqui" texto_processado = preprocess_text(texto) print(texto_processado)
Aqui está o código completo no GitHub: https://github.com/ViniciusStanula/gpt-prompt-reducer
Seção 2: Usando o Aplicativo Pronto
Se você não sabe como programar em Python e está apenas curioso para ver como esse redutor de instruções funciona, criei um aplicativo web simples para você usar:
- Vá até o aplicativo web em https://gpt-prompt-reducer.streamlit.app/;
- Insira seu texto ou prompt;
- Clique no botão;
- E obtenha seus resultados.
Então, basicamente é isso. Espero que tenha gostado do conteúdo e ficaria feliz em ver suas aplicações e receber qualquer feedback que você tenha.