Sinta -se à vontade para me comprar um café para ajudar a apoiar este projeto.
O Soupy é um chatbot para o Discord que pode gerar imagens com um gerador de imagens local (Flux) e/ou com Dall-e 3. Para conversar, ele usa uma combinação de JSONs, ChatGPT e um mecanismo de pesquisa local para conversar com seus usuários. Ele indexará as mensagens de bate -papo do seu usuário e usará essas mensagens para criar perfis de usuários. Ele também indexará todos os canais do seu servidor para o qual ele tem acesso.
Existem várias versões de Soupy.
O Soupy requer acesso da API OpenAI aos modelos ChatGPT. Portanto, a parte de bate -papo do Soupy usa dinheiro real . A geração de imagens Dall-E 3 também faz. Você pode pular a geração Dall-E 3 e usar apenas o fluxo localmente.
A configuração inicial, em que o histórico de canais do seu servidor será baixado e indexado e todos os usuários do seu servidor terão perfis feitos deles custar dinheiro através da API do ChatGPT. Algum dia também apoiarei LLMs locais, mas ainda não.
Para fazer o Flux funcionar, sugiro fortemente que você comece aqui, com o repositório oficial de fluxo. Mas, depois de usar o fluxo, você pode usar soupy-gradio.py , incluído neste repositório.
!flux (modelo de imagem local) , !generate (Dall-e 3),! !analyze (ChatGPT) e !transform (Chatgpt) para executar uma variedade de ações legais.BEHAVIOUR no .env . Mas tenha cuidado com a forma como você muda. Sua redação é importante para manter a pista de sopa. Antes de configurar o Soupy, verifique se você tem o seguinte instalado em seu sistema:
Comece clonando o repositório de sopa para sua máquina local:
git clone https://github.com/sneezeparty/soupy.git
cd soupy
É recomendável usar um ambiente virtual para gerenciar dependências.
python -m venv soupy
Ative o ambiente virtual:
No macOS e Linux:
source soupy/bin/activate
No Windows:
soupyScriptsactivate
Instale os pacotes Python necessários usando pip :
pip install -r requirements.txt
Crie um arquivo .env no diretório raiz do projeto e preencha -o com as variáveis de ambiente necessárias:
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."
Observe que o Soupy terá acesso a todos os canais que pode acessar. Mas ele responderá a todas as mensagens nos canais especificados acima. Caso contrário, ele só responderá aleatoriamente ou quando @Tagged.
Dentro do script, pesquise "/absoluto/diretório/de/your/script/" e substitua -o pelo diretório absoluto da localização do seu script.
O Apache Solr é usado para indexar e pesquisar mensagens e perfis de usuário. Siga estas etapas para instalar e configurar o Solr para Soupy.
Faça o download do Solr : visite o site Apache Solr e faça o download do último lançamento estável. Você também pode usar alguns gerentes de pacotes - consulte as informações da sua distro.
Extraia o pacote
Instale o Solr como um serviço : siga a documentação sobre as etapas exatas para este processo. Não é difícil, no entanto. Você pode fazer isso.
Verifique a instalação :
Abra seu navegador e navegue para http://localhost:8983/solr para acessar a interface de administrador do Solr.
O Soupy requer um único núcleo Solr com campos específicos para indexar perfis de usuário de maneira eficaz.
bin/solr create -c soupy
Adicione os campos necessários ao núcleo soupy para armazenar perfis de usuário.
Access Solr Admin Interface :
Navegue para http://localhost:8983/solr e selecione o núcleo soupy .
Definir campos :
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 este
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
}
}'
Adicione os campos necessários ao núcleo soupy para armazenar perfis de usuário e canalizar informações.
<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"/>
Cometer mudanças :
Depois de adicionar todos os campos, comprometa as alterações para torná -las eficazes.
Depois de concluir as etapas de instalação e configuração, você pode iniciar o bot usando os seguintes comandos. A primeira execução levará um pouco, dependendo da atividade do seu servidor e do número de usuários. Pode levar minutos ou horas. A saída do terminal informará o que está fazendo.
python soupy-solr.py
OU
python soupy-flux.py
E
python gradio-soupy.py
Certifique -se de que você esteja no ambiente virtual e no diretório correto, onde soupy está localizado.
gradio-soupy.py é o back-end de Gradio para Flux. Você também pode acessar isso através de um navegador.
!fluxGere uma imagem usando o modelo de fluxo com suporte para vários modificadores e botões interativos para maior personalização.
E com o modificador -Fancy, ou com o botão "reescrever", por exemplo:
Modificadores :
--wide : gera uma imagem ampla (1920x1024).--tall : gera uma imagem alta (1024x1920).--small : gera uma imagem pequena (512x512).--fancy : elabora o prompt de ser mais criativo e detalhado. Isso usa o ChatGPT via API.--seed <number> : use uma semente específica para geração de imagens.Uso :
!flux A mystical forest with glowing plants --tall
Depois de gerar uma imagem com o comando !flux , o Soupy fornece botões interativos para personalização adicional:
Remix : gera uma nova imagem com base no prompt existente, com uma nova semente aleatória.Rewrite : elabore o prompt para melhorar a criatividade e os detalhes. Isso usa a API do ChatGPT ( o mesmo que o modificador --fancy ).Wide : ajusta as dimensões da imagem em um formato amplo.Tall : ajusta as dimensões da imagem para um formato alto. !generateGere uma imagem usando o Dall-E 3 com base em um prompt de texto com modificadores opcionais. Isso pode ser descontinuado em breve.
Modificadores :
--wide : gera uma imagem ampla (1920x1024).--tall : gera uma imagem alta (1024x1920).Uso :
!generate A futuristic city skyline at sunset --wide
!analyzeAnalise uma imagem anexada com base nas instruções fornecidas, como traduzir o texto dentro da imagem ou identificar objetos e seus atributos.
Uso :
!analyze Identify all the animals in this image.
!analyze Describe this image forensically.
Anexe uma imagem ao usar este comando.
!8ballFaça uma pergunta ao Magic 8-Ball. Não usa um LLM ou qualquer ML.
Uso :
!8ball Will I get an A on my exam?
!whattimePegue e exiba o horário atual em uma cidade especificada.
Uso :
!whattime New York
Este projeto está licenciado sob a licença do MIT.
MIT Licença Copyright (C) 2024 Sneezeparty
A permissão é concedida, gratuita, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, incluindo, sem limitação, os direitos de uso, copiar, modificar, mesclar, publicar, distribuir, distribuir o software e/ou vender cópias do software e permitir que as pessoas a quem incluído em todas as cópias ou partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsáveis por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações no software.
Se você encontrar algum problema ou tiver dúvidas, sinta -se à vontade para abrir um problema na seção de problemas do GitHub do repositório.
Compre um café para ajudar a apoiar este projeto.