Selene

Python 3.10+ discord.py OpenAI DeepSeek Gemini ChromaDB Docker LLM Agent

A Selene é um assistente para Discord com personalidade própria, memória vetorial, execução de comandos em sandbox Docker, suporte a visão (Gemini) e troca dinâmica de modelos LLM em tempo real. O selene_server conecta um bot Discord a um "cérebro" de IA capaz de conversar em contexto de canal, lembrar informações relevantes via ChromaDB, usar ferramentas (ler/escrever arquivos, terminal, web, análise de imagem), executar tarefas recorrentes agendadas e alternar entre DeepSeek e modelos OpenAI sob demanda. Selene is a Discord assistant with its own personality, vector memory, command execution in a Docker sandbox, vision support (Gemini), and real-time LLM model switching. The selene_server connects a Discord bot to an AI "brain" capable of channel-aware conversation, memory recall via ChromaDB, tool use (read/write files, terminal, web, image analysis), scheduled recurring tasks, and on-demand switching between DeepSeek and OpenAI models.

Ver no GitHubView on GitHub

Principais recursosMain features

StackStack

Estrutura do projetoProject structure

.
├── main.py                  # Entrada do bot Discord
├── selene_brain.py          # Orquestração de LLM + tool calls
├── ferramentas.py           # Implementação das ferramentas
├── requirements.txt
├── quarto_da_selene/        # Estado local (plano, tarefas, vetor_db, uploads)
└── README.md

Pré-requisitosPrerequisites

InstalaçãoInstall

$ python -m venv .venv
$ source .venv/bin/activate
$ pip install -r requirements.txt

Configuração (.env)Configuration (.env)

Crie um arquivo .env na raiz com: Create a .env file in the project root:

DISCORD_TOKEN=seu_token_do_discord
OWNER_ID=123456789012345678

# LLMs
DEEPSEEK_API_KEY=sua_chave_deepseek
OPENAI_API_KEY=sua_chave_openai

# Visão (opcional)Vision (optional)
GEMINI_API_KEY=sua_chave_gemini

ExecutandoRunning

$ python main.py

Ao subir, o sistema inicializa automaticamente o container Docker de sandbox e o loop de tarefas agendadas. On startup, the system automatically initializes the sandbox Docker container and the scheduled task loop.

Comandos do botBot commands

ComandoCommand FunçãoFunction
!s <mensagem>Envia uma solicitação para a Selene.Sends a request to Selene.
!setllm [modelo]Troca o modelo ativo (somente OWNER_ID).Switches the active model (only OWNER_ID).
!csmLimpa memória de curto prazo da conversa.Clears the conversation's short-term memory.
!docker_resetRecria o container de sandbox.Recreates the sandbox container.

Modelos suportados em !setllmModels supported in !setllm

Persistência localLocal persistence

Os dados gerados em runtime ficam em quarto_da_selene/: Runtime-generated data lives in quarto_da_selene/:

Esse diretório está no .gitignore. This directory is in .gitignore.

Segurança e operaçãoSecurity and operation

MotivaçãoMotivation

A Selene nasceu como um experimento de agente persistente: um bot conversacional que não esquece o que aprendeu, pode executar trabalho real (código, leitura de arquivos, buscas) de forma isolada, e cuja "personalidade" emerge da combinação entre prompt de sistema, memória vetorial e o histórico do canal. A possibilidade de trocar o LLM em tempo de execução é uma ferramenta de comparação prática entre modelos sob a mesma interface, contexto e conjunto de ferramentas. Selene was born as an experiment in persistent agency: a conversational bot that doesn't forget what it has learned, can perform real work (code, file reading, searches) in isolation, and whose "personality" emerges from the combination of system prompt, vector memory, and channel history. Runtime LLM switching is a practical comparison tool — same interface, same context, same tools, different model.