Alimente seus filmes Plex assistidos recentemente em uma cadeia LLM alimentada por RAG para obter recomendações com base em seu histórico de exibição.
Você precisará de duas coisas:
preferences.xml
em seu caminho de instalação. Eu executo o Plex em um Synology NAS usando o Package Center, então encontrei o meu em /PlexMediaServer/AppData/Plex Media Server/Preferences.xml
. Forneça ambos para as variáveis de ambiente PLEX_ADDRESS
e PLEX_TOKEN
.
Na inicialização, o sistema detectará se sua biblioteca Plex está armazenada no banco de dados vetorial. Caso contrário, sua mídia será recuperada. Você precisa fornecer a biblioteca padrão para baixar mídia por meio da variável de ambiente PLEX_DEFAULT_LIBRARY_SECTION
. Você mesmo precisará consultar o Plex para obter isso, mas para mim, meus filmes estão na seção 3. Voltarei a esta seção se você não fornecer uma.
Este mecanismo de recomendação se conecta ao Ollama. Você pode trazer o seu próprio ou executá-lo na nuvem. Basta fornecer OLLAMA_ADDRESS
, OLLAMA_EMBEDDING_MODEL
e OLLAMA_LANGUAGE_MODEL
como variáveis de ambiente.
Você pode encontrar o prompt RAG em backend/internal/pkg/langchain/generate.go
. Isto foi escrito de acordo com minhas necessidades específicas. Se suas necessidades não forem as minhas, ajuste o prompt de aterramento de acordo. Observe que se você tiver uma coleção de mídia muito grande, ela poderá exceder a janela de contexto do modelo que você está usando. Você pode ajustar a quantidade de títulos recuperados ajustando os limites passados para os getters de mídia em backend/internal/pkg/plex/api.go
.
Baixe este repositório e crie o aplicativo usando go build -o recommendations .backend/cmd/main.go
. Isso cria um binário chamado recommendations
que você pode executar com ./recommendations
.
Um banco de dados Postgres está anexado em ./pg-data
e é usado para armazenar recomendações em cache. Os títulos fornecidos recentemente visualizados são codificados em base 64 e armazenados junto com a recomendação normalizada fornecida pelo LLM. Esse cache é consultado antes de solicitar a recomendação do LLM e é retornado como está se for encontrado.
O ambiente padrão do Postgres é o seguinte:
POSTGRES_PASSWORD=postgres
POSTGRES_USER=postgres
POSTGRES_DB=caches
POSTGRES_PORT=5432
POSTGRES_HOST=postgres
Você pode substituir isso fornecendo seus próprios valores para essas variáveis de ambiente
Há um arquivo docker-compose.yml
na raiz deste repositório. Você pode executar o Recommendation Engine e o banco de dados Weaviate associado emitindo o comando TAG_VERSION=foo docker compose up --build
. Certifique-se de ter o Docker e o Docker Compose instalados.
Existem vários testes nos pacotes internos que foram quase todos escritos por um LLM. Você pode testar este programa usando go test ./...
na raiz deste repositório. Esses testes são executados automaticamente quando você cria com Docker.
O rastreamento de telemetria aberta é instrumentado no back-end. Para usar isso imediatamente, defina OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=otlp://jaeger:4317
no ambiente e certifique-se de que o serviço Jaeger seja iniciado no Docker Compose. Os rastreamentos são coletados no Jaeger e acessíveis em http://localhost:16686
. As métricas estão disponíveis para extensão, passando a opção telemetry.WithMeter
telemetry.InitOtel()
. Você mesmo terá que instrumentar as métricas.
A telemetria pode ser desabilitada definindo DISABLE_TELEMETRY=true
em seu ambiente. Observe que se estiver usando docker compose up
, o contêiner Jaeger ainda será iniciado.