Comment les réponses de code de ChatGPT m'ont rendu ivre
ChatGPT m'a aidé à gratter les sites Web de cocktails pour créer un index universel des boissons.
Dernièrement, je suis devenu fan de faire des cocktails. Après avoir obtenu le meilleur équipement et l'argent que l'argent peut acheter, j'ai réalisé que le principal bloqueur pour moi était les recettes de cocktails. Je voulais une plate-forme où je pourrais entrer les ingrédients que j'ai à la maison, et le résultat serait une liste de cocktails que je pourrais faire. Il existe quelques applications pour cela, mais leur variété est limitée à moins que vous ne payiez pour l'application. Et comme la seule chose que j'aime plus que les cocktails, ce sont les cocktails gratuits , je cherchais une alternative.
C'était environ une semaine après la sortie de ChatGPT , et il était déjà devenu mon meilleur ami. Serait-ce aussi mon compagnon de beuverie ? J'ai réalisé que de nombreuses recettes étaient disponibles en ligne, et je n'avais qu'à les indexer correctement. ChatGPT peut-il me créer un outil pour les indexer moi-même ?
TLDR — oui, voici le repo GitHub . Il existe même des fichiers README générés par ChatGPT.
Le plan
J'ai décidé de tenter le coup. Je voulais utiliser ChatGPT pour créer un système simple permettant d'indexer les cocktails du Web. La solution comporterait deux parties :
- Crawler - un processus qui permet à un domaine d'explorer et de générer des URL qui semblent être des recettes de cocktails dans une file d'attente. Il suit également les URL supplémentaires sur la page de manière récursive pour rechercher d'autres pages avec des recettes. Cela semblait être une tâche assez facile pour laisser le code ChatGPT tout seul
- Indexeur - Ce composant est destiné à obtenir une URL, à déterminer si la page contient une recette de cocktail et à la stocker dans une base de données. Le problème est que les blogs avec des recettes de cocktails sont très peu structurés et contiennent beaucoup de texte inutile avant d'atteindre le but. ChatGPT peut-il m'aider à comprendre ce gâchis ?
Après avoir examiné ses suggestions, j'ai décidé d'opter pour RabbitMQ car j'avais une certaine expérience avec lui. J'ai demandé à ChatGPT de me poser les bases :
Une fois le projet mis en place, l'étape suivante consistait pour ChatGTP à développer le robot d'exploration.
Le rampant
J'ai demandé à ChatGPT de faire le travail pour moi, et mon garçon, a-t-il livré :
Lorsque j'ai exécuté le programme, je suis tombé sur deux problèmes. Premièrement, les URL visitées n'étaient pas mises en cache, et comme presque toutes les pages étaient liées à la page d'accueil, nous nous retrouvions dans une boucle infinie. J'ai demandé à ChatGPT de gérer cela, et il a modifié le code correctement :
Le deuxième problème était qu'il a également commencé à explorer d'autres domaines - par exemple, pour une page contenant une vidéo, le robot d'exploration a également commencé à explorer YouTube. J'ai demandé à ChatGTP de corriger cela également, et cela a obligé :
Et c'était tout ! Le crawler était prêt et l'étape suivante consistait à coder l'indexeur.
L'indexeur
Comme je l'ai déjà mentionné, analyser le contenu d'une page Web pour déterminer si elle décrit une recette de cocktail est un défi. Voici un exemple de page web de recette de cocktail :
Il est presque impossible de gérer tous les différents cas d'utilisation pour analyser la page et extraire les ingrédients. Encore une fois - ChatGPT à la rescousse !
Je suis tombé sur une implémentation python non officielle de l'API ChatGPT et j'ai décidé de l'utiliser dans mon indexeur. L'idée était simple, en utilisant une invite bien conçue, je devrais pouvoir utiliser ChatGPT pour extraire les ingrédients de la page du cocktail. Comme ChatGPT n'a pas d'accès à Internet, il n'a pas pu coder cette partie, mais cela m'a aidé avec les composants génériques de celui-ci. Voici le code que j'ai utilisé :
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()
Maintenant, je n'avais plus qu'à le stocker dans une base de données. J'ai demandé à ChatGPT de créer la base de données pour moi :
Ensuite, je lui ai donné un exemple d'entrée généré par lui-même et lui ai demandé d'écrire du code pour insérer les informations dans la base de données. L'implémentation initiale fournie utilisait psycopg2. Je lui ai demandé de l'utiliser SQLAlchemycar je trouve plus facile de travailler avec un ORM:
J'ai intégré ce code dans l'indexeur et j'ai enfin eu la base de données de cocktails de mes rêves !
Ensuite, j'utiliserai ChatGPT pour m'aider à créer une API et une interface utilisateur pour parcourir la base de données de cocktails et choisir celui que je veux faire aujourd'hui.
Conclusion
Tout ce projet m'a pris environ 3 heures de bout en bout. La capacité de ChatGPT à accélérer mon processus de développement m'a époustouflé. La plus grande victoire a été l'analyse de texte fournie par ChatGPT, ce que je ne pouvais pas faire moi-même, et ChatGPT a été simplifié.
Cependant, plus une tâche est complexe, plus les chances que ChatGPT l'exécute correctement diminuent considérablement. Lors de l'association avec ChatGPT, il incombe toujours au développeur de décomposer le travail en tâches suffisamment petites pour qu'il puisse avaler, du moins pour le moment.
J'ai hâte de voir ce qui va suivre !
DrinkIndex partie II est sorti ! Vérifiez-le ici .
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































