N'hésitez pas à m'acheter un café pour aider à soutenir ce projet.
Soupy est un chatbot pour Discord qui peut générer des images avec un générateur d'images local (flux) et / ou avec Dall-E 3. Pour discuter, il utilise une combinaison de JSON, de chatgpt et d'un moteur de recherche local pour engager une conversation avec ses utilisateurs. Il indexera les messages de chat de votre utilisateur et utilisera ces messages pour créer des profils d'utilisateurs. Il indexera également chaque canal de votre serveur auquel il a accès.
Il existe plusieurs versions de Soupy.
Soupy nécessite un accès à l'API Openai aux modèles Chatgpt. Par conséquent, la partie de chat de Soupy utilise de l'argent réel . La génération d'images de Dall-E 3 le fait également. Vous pouvez ignorer la génération de Dall-E 3 et utiliser uniquement le flux localement.
La configuration initiale, dans laquelle l'historique des canaux de votre serveur sera téléchargé et indexé et tous les utilisateurs de votre serveur auront des profils en coûte de l'argent via l'API de Chatgpt. Un jour, je soutiendrai également les LLM locales, mais pas encore.
Pour faire fonctionner le flux, je vous suggère fortement de commencer ici, avec le référentiel de flux officiel. Mais une fois que vous avez un flux up-and-running, vous pouvez utiliser soupy-gradio.py , inclus dans ce référentiel.
!flux (modèle d'image local),! !generate (Dall-E 3),! !analyze (ChatGpt) et !transform (chatgpt) pour effectuer une gamme d'actions intéressantes.BEHAVIOUR dans le .env . Mais soyez prudent avec la façon dont vous le changez. Son libellé est important pour garder la soupe sur piste. Avant de configurer Soupy, assurez-vous que vous avez installé le suivant sur votre système:
Commencez par cloner le référentiel de soupe à votre machine locale:
git clone https://github.com/sneezeparty/soupy.git
cd soupy
Il est recommandé d'utiliser un environnement virtuel pour gérer les dépendances.
python -m venv soupy
Activez l'environnement virtuel:
Sur macOS et Linux:
source soupy/bin/activate
Sur Windows:
soupyScriptsactivate
Installez les packages Python requis à l'aide de pip :
pip install -r requirements.txt
Créez un fichier .env dans le répertoire racine du projet et remplissez-le avec les variables d'environnement nécessaires:
DISCORD_TOKEN=your_discord_bot_token
OPENAI_API_KEY=your_openai_api_key
CHANNEL_IDS=00,11
MAX_TOKENS=2500
MAX_TOKENS_RANDOM=75
MODEL_CHAT=gpt-4o-mini
UPDATE_INTERVAL_MINUTES=61
TRANSFORM="You give detailed and accurate descriptions, be specific in whatever ways you can, such as but not limited to colors, species, poses, orientations, objects, and contexts."
BEHAVIOUR="You are Soupy Dafoe, a sarcastic and witty Discord chatbot. You recall past interactions and conversations to inform your responses. Your replies are concise, straightforward, and infused with a bit of sarcasm, much like Jules from "Pulp Fiction." You are not overly positive and avoid asking questions unless necessary. Prioritize the most recent five messages when formulating your responses, especially if not directly mentioned. If the latest message is brief, focus your reply accordingly and consider ignoring extensive chat history. Integrate the user's profile information subtly to tailor your responses without making it the main focus. Be conversational, stay in the moment, and avoid being too random or wordy. Remember, you're kind of a jerk, but in a human-like way."
Veuillez noter que Soupy aura accès à tous les canaux auxquels il peut accéder. Mais il répondra à tous les messages des canaux spécifiés ci-dessus. Sinon, il ne répondra que par hasard, ou quand @tagged.
Dans le script, recherchez "/ absolu / répertoire / de / votre / script /" et remplacez-le par le répertoire absolu de l'emplacement de votre script.
Apache Solr est utilisé pour indexer et rechercher des messages et des profils d'utilisateurs. Suivez ces étapes pour installer et configurer SOLR pour Soupy.
Téléchargez SOLR : Visitez le site Web d'Apache Solr et téléchargez la dernière version stable. Vous pouvez également utiliser certains gestionnaires de packages - consultez les informations de votre distribution.
Extraire le package
Installez SOLR en tant que service : Suivez la documentation sur les étapes exactes de ce processus. Ce n'est pas difficile, cependant. Vous pouvez le faire.
Vérifiez l'installation :
Ouvrez votre navigateur et accédez à http://localhost:8983/solr pour accéder à l'interface SOLR Admin.
Soupy nécessite un seul noyau solr avec des champs spécifiques pour indexer efficacement les profils d'utilisateur.
bin/solr create -c soupy
Ajoutez les champs nécessaires au noyau soupy pour stocker les profils d'utilisateurs.
Interface d'administration d'accès SOLR :
Accédez à http://localhost:8983/solr et sélectionnez le noyau soupy .
Définir les champs :
curl -X POST -H 'Content-type:application/json'
http://localhost:8983/solr/soupy/schema
-d '{
"add-field": {
"name": "id",
"type": "string",
"indexed": true,
"stored": true,
"required": true,
"multiValued": false
}
}'
ou celui-ci
curl -X POST -H "Content-Type: application/json"
"http://localhost:8983/solr/soupy/schema"
-d '{
"add-field":{
"name":"user_problems",
"type":"text_general",
"indexed":true,
"stored":true
}
}'
Ajoutez les champs nécessaires au noyau soupy pour stocker les profils d'utilisateurs et les informations de canal.
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="username" type="string" indexed="true" stored="true"/>
<field name="nicknames" type="string" indexed="true" stored="true" multiValued="true"/>
<field name="join_date" type="date" indexed="true" stored="true"/>
<field name="political_party" type="string" indexed="true" stored="true"/>
<field name="user_job_career" type="text_general" indexed="true" stored="true"/>
<field name="user_family_friends" type="text_general" indexed="true" stored="true"/>
<field name="user_activities" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_games" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_movies" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_music" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_television" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_life" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_food" type="text_general" indexed="true" stored="true"/>
<field name="general_opinions" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_politics" type="text_general" indexed="true" stored="true"/>
<field name="personality_traits" type="text_general" indexed="true" stored="true"/>
<field name="hobbies" type="text_general" indexed="true" stored="true"/>
<field name="user_interests" type="text_general" indexed="true" stored="true"/>
<field name="user_problems" type="text_general" indexed="true" stored="true"/>
<field name="tech_interests" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_technology" type="text_general" indexed="true" stored="true"/>
<field name="sports_interests" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_sports" type="text_general" indexed="true" stored="true"/>
<field name="book_preferences" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_books" type="text_general" indexed="true" stored="true"/>
<field name="art_interests" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_art" type="text_general" indexed="true" stored="true"/>
<field name="health_concerns" type="text_general" indexed="true" stored="true"/>
<field name="health_habits" type="text_general" indexed="true" stored="true"/>
<field name="science_interests" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_science" type="text_general" indexed="true" stored="true"/>
<field name="travel_preferences" type="text_general" indexed="true" stored="true"/>
<field name="travel_experiences" type="text_general" indexed="true" stored="true"/>
<field name="food_preferences" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_food" type="text_general" indexed="true" stored="true"/>
<field name="last_updated" type="date" indexed="true" stored="true"/>
<field name="channel_id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="username" type="string" indexed="true" stored="true"/>
<field name="content" type="text_general" indexed="true" stored="true"/>
<field name="timestamp" type="pdate" indexed="true" stored="true"/>
Commettre des changements :
Après avoir ajouté tous les champs, engagez les modifications pour les rendre efficaces.
Après avoir terminé les étapes d'installation et de configuration, vous pouvez démarrer le bot à l'aide des commandes suivantes. La première exécution prendra un certain temps, selon l'activité sur votre serveur et le nombre d'utilisateurs. Cela pourrait prendre des minutes ou des heures. La sortie du terminal vous dira ce qu'elle fait.
python soupy-solr.py
OU
python soupy-flux.py
ET
python gradio-soupy.py
Assurez-vous que vous êtes dans l'environnement virtuel et le bon répertoire où se trouve soupy .
gradio-soupy.py est le back-end basé sur Gradio pour le flux. Vous pouvez également y accéder via un navigateur.
!fluxGénérez une image en utilisant le modèle de flux avec la prise en charge de divers modificateurs et boutons interactifs pour une personnalisation supplémentaire.
Et avec le modificateur -Fant, ou avec le bouton "Rewrite" par exemple:
Modificateurs :
--wide : génère une image large (1920x1024).--tall : génère une image haute (1024x1920).--small : génère une petite image (512x512).--fancy : élabore l'invite à être plus créative et détaillée. Cela utilise les chatppt via l'API.--seed <number> : Utilisez une graine spécifique pour la génération d'images.Utilisation :
!flux A mystical forest with glowing plants --tall
Après avoir généré une image avec la commande !flux , Soupy fournit des boutons interactifs pour plus de personnalisation:
Remix : génère une nouvelle image basée sur l'invite existante, avec une nouvelle graine aléatoire.Rewrite : élabore l'invite pour améliorer la créativité et les détails. Cela utilise l'API de Chatgpt ( identique au modificateur --fancy ).Wide : ajuste les dimensions de l'image en un format large.Tall : ajuste les dimensions de l'image en un format haut. !generateGénérez une image à l'aide de DALL-E 3 basée sur une invite de texte avec des modificateurs facultatifs. Cela peut être obsolète bientôt.
Modificateurs :
--wide : génère une image large (1920x1024).--tall : génère une image haute (1024x1920).Utilisation :
!generate A futuristic city skyline at sunset --wide
!analyzeAnalyser une image jointe basée sur des instructions fournies, telles que la traduction du texte dans l'image ou l'identification des objets et leurs attributs.
Utilisation :
!analyze Identify all the animals in this image.
!analyze Describe this image forensically.
Joignez une image lors de l'utilisation de cette commande.
!8ballPosez une question au Magic 8-Ball. N'utilise pas un LLM ou un ML.
Utilisation :
!8ball Will I get an A on my exam?
!whattimeRécupérez et affichez l'heure actuelle dans une ville spécifiée.
Utilisation :
!whattime New York
Ce projet est autorisé sous la licence du MIT.
Licence du MIT Copyright (C) 2024 Sneezeparty
L'autorisation est accordée gratuitement à toute personne à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le "logiciel"), pour traiter le logiciel sans restriction, y compris sans limiter les droits d'utilisation, de copie, de modification, dans toutes les copies ou des parties substantielles du logiciel.
Le logiciel est fourni "tel quel", sans garantie d'aucune sorte, express ou implicite, y compris, mais sans s'y limiter, les garanties de qualité marchande, d'adéquation à un usage particulier et de non-contrefaçon. En aucun cas, les auteurs ou les détenteurs de droits d'auteur ne seront pas responsables de toute réclamation, dommage ou autre responsabilité, que ce soit dans une action de contrat, de délit ou autre, découlant de, hors du logiciel ou de l'utilisation ou d'autres relations dans le logiciel.
Si vous rencontrez des problèmes ou si vous avez des questions, n'hésitez pas à ouvrir un problème dans la section des problèmes GitHub du référentiel.
Achetez-moi un café pour soutenir ce projet.