Como as respostas do código do ChatGPT me deixaram bêbado
O ChatGPT me ajudou a raspar sites de coquetéis para criar um índice universal de bebidas.
Ultimamente, tenho me tornado fã de fazer coquetéis. Depois de obter o melhor equipamento e bebida que o dinheiro pode comprar, percebi que o principal obstáculo para mim eram as receitas de coquetéis. Eu queria uma plataforma onde pudesse inserir os ingredientes que tenho em casa e o resultado fosse uma lista de coquetéis que eu poderia fazer. Existem alguns aplicativos para isso, mas eles são limitados em sua variedade, a menos que você pague pelo aplicativo. E como a única coisa que gosto mais do que coquetéis são coquetéis gratuitos , estava procurando uma alternativa.
Foi cerca de uma semana após o lançamento do ChatGPT e ele já havia se tornado meu melhor amigo. Também poderia ser meu companheiro de bebida? Percebi que muitas receitas estavam disponíveis online e só precisava indexá-las corretamente. O ChatGPT pode criar uma ferramenta para eu indexá-los por conta própria?
TLDR — sim, aqui está o repositório do GitHub . Existem até READMEs gerados pelo ChatGPT.
O plano
Eu decidi tentar. Eu queria usar o ChatGPT para construir um sistema simples para indexar coquetéis da web. A solução teria duas partes:
- Rastreador — um processo que faz com que um domínio rastreie e gere URLs que parecem ser receitas de coquetéis para uma fila. Ele também segue URLs adicionais na página recursivamente para pesquisar outras páginas com receitas. Isso parecia uma tarefa fácil o suficiente para permitir que o ChatGPT codificasse por conta própria
- Indexador — Este componente destina-se a obter uma URL, determinar se a página contém uma receita de coquetel e armazená-la em um banco de dados. O problema é que os blogs com receitas de coquetéis são altamente desestruturados e têm muito texto desnecessário antes de chegar ao ponto. O ChatGPT pode me ajudar a entender essa bagunça?
Depois de revisar suas sugestões, decidi usar o RabbitMQ, pois já tinha alguma experiência com ele. Pedi ao ChatGPT para estabelecer as bases para mim:
Com o projeto montado, o próximo passo foi o ChatGTP desenvolver o crawler.
O rastreador
Pedi ao ChatGPT para fazer o trabalho para mim e, cara, ele entregou:
Quando executei o programa, me deparei com dois problemas. Primeiro, os URLs visitados não eram armazenados em cache e, como quase todas as páginas estavam vinculadas à página inicial, acabávamos em um loop infinito. Pedi ao ChatGPT para lidar com isso e modificou o código corretamente:
O segundo problema foi que ele também começou a rastrear outros domínios - por exemplo, para uma página que contém um vídeo, o rastreador também começou a rastrear o youtube. Pedi ao ChatGTP para consertar isso também, e ele obrigou:
E foi isso! O rastreador estava pronto e a próxima etapa era codificar o indexador.
O Indexador
Como mencionei antes, analisar o conteúdo de uma página da Web para identificar se ela descreve uma receita de coquetel é um desafio. Aqui está um exemplo de uma página da web de receitas de coquetéis:
É quase impossível lidar com todos os diferentes casos de uso para analisar a página e extrair os ingredientes. Mais uma vez - ChatGPT para o resgate!
Encontrei uma implementação python não oficial da API ChatGPT e decidi usá-la em meu indexador. A ideia era simples, usando um prompt bem elaborado, eu deveria conseguir usar o ChatGPT para extrair os ingredientes da página do coquetel. Como o ChatGPT não tem acesso à Internet, ele não conseguiu codificar esta parte, mas me ajudou com os componentes genéricos dela. Aqui está o código que usei:
import pika
import time
import sys
import requests
from bs4 import BeautifulSoup
from revChatGPT.revChatGPT import Chatbot
from db import CocktailRecipe, Ingredient, session
import traceback
print(sys.argv)
config = {
"session_token": sys.argv[1],
"cf_clearance": sys.argv[2],
"user_agent": sys.argv[3]
}
chatbot = Chatbot(config, conversation_id=None)
# connect to RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# create a queue to consume messages from, if it does not already exist
channel.queue_declare(queue='drink_urls', durable=True)
QUESTION = """
From the following text below, please understand if it is an article
describing a cocktail recipe. If it is, output the following: The first
line should be: "<cocktail name>: <ranking>". If the ranking doesn't exist
output "-". use only lowercase letters and the generic name of the cocktail
, without mentioning brands. the following lines contain the ingredients:
each line should contain one ingredient and it's amount in the format
"<ingredient>: <amount>". The ingredient part (before the semicolon)
should contain only the ingredient name, not the amount. If it is not a
cocktail recepie, output only the word "no". Output the ingredients in
their generic name, and don't include a brand. For example, instead of
"bacardi white rum" output "white rum". All of the output should be lower
cased, don't capitalize any word. The text is: %s"""
# define a callback function to process incoming messages
def process_message(ch, method, properties, body):
time.sleep(5)
try:
print(body)
page = requests.get(body)
soup = BeautifulSoup(page.content, "html.parser")
response = chatbot.get_chat_response(QUESTION % soup.text, output="text")['message']
if response == "no":
print("not a cocktail")
return
print(response)
except Exception:
print(traceback.format_exc())
# consume messages from the queue, using the callback function to process them
channel.basic_consume(queue='drink_urls', on_message_callback=process_message, auto_ack=True)
# start consuming messages
channel.start_consuming()
Agora eu só tinha que armazená-lo em um banco de dados. Pedi ao ChatGPT para criar o banco de dados para mim:
Em seguida, dei a ele uma entrada de amostra gerada por ele mesmo e pedi que escrevesse o código para inserir as informações no banco de dados. A implementação inicial fornecida estava usando psycopg2. Pedi para usar SQLAlchemypois acho mais fácil trabalhar com um ORM:
Integrei esse código no indexador e finalmente tive o banco de dados de coquetéis dos meus sonhos!
Em seguida, usarei o ChatGPT para me ajudar a criar uma API e uma interface do usuário para navegar no banco de dados de coquetéis e escolher o que quero fazer hoje.
Conclusão
Todo esse projeto me levou cerca de 3 horas de ponta a ponta. A capacidade do ChatGPT de acelerar meu processo de desenvolvimento me surpreendeu. A maior vitória foi a análise de texto que o ChatGPT forneceu, o que eu não poderia fazer sozinho, e o ChatGPT simplificou.
No entanto, quanto mais complexa uma tarefa se torna, as chances de o ChatGPT executá-la corretamente diminuem drasticamente. Ao emparelhar com o ChatGPT, ainda é trabalho do desenvolvedor dividir o trabalho em tarefas pequenas o suficiente para engolir, pelo menos por enquanto.
Estou animado para ver o que vem a seguir!
DrinkIndex parte II está fora! Confira aqui .





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)