Raglooker for Steam

A RAG-powered recommendation engine that turns a plain-language mood into ranked Steam games with an LLM-written explanation.

Python
RAG
LLM
Flask
Ollama
Published

January 1, 2025

Overview

Raglooker for Steam is a retrieval-augmented recommendation engine for the Steam catalog. Describe the game you’re in the mood for in plain language, and get back ranked matches plus a natural-language explanation from a local LLM. It’s a hybrid retrieval + LLM re-explanation system rather than a single embedding lookup.


How It Works

  1. Candidate retrieval (BM25): the query is tokenized and scored against a BM25 index built over each game’s name, description, genres, categories, and tags, producing a shortlist of ~100 candidates.
  2. Re-ranking (hybrid score): candidates are embedded (nomic-embed-text via Ollama) alongside the query and scored on a weighted blend of:
    • 50% embedding cosine similarity
    • 30% BM25 score
    • 20% popularity (log-scaled positive reviews + recommendations)
    • plus small bonuses for direct tag/genre term overlap
  3. Answer generation: the top 5 ranked games are formatted into a context block and passed to a local LLM (phi3.5 via Ollama), which writes a short, natural-language recommendation summary.
  4. Frontend: a single-page Flask + vanilla JS app renders the LLM’s answer alongside game cards (image, score, tags, platforms, Steam link).

Stack

Flask (backend) · rank-bm25 + Ollama embeddings (retrieval) · Ollama-served phi3.5 (generation) · HTML/CSS/vanilla JS (frontend, no framework) · uv (env/deps)


View on GitHub