Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Steam Review Agent Lab

Steam Review Agent Lab is an upgraded, agentic Steam review analyzer. The original direction was extracting top positive and negative aspects. This version expands that into a free-form review intelligence system where a user enters a Steam App ID, asks a natural-language question, and gets a structured answer built from live Steam reviews.

The project is deliberately interview-friendly:

  • No paid APIs
  • No OpenAI API
  • No Claude API
  • Ollama only for local LLM inference
  • Steam Reviews API integration
  • Mock analysis mode for deterministic local analysis without Ollama

What It Does

Users can ask questions like:

  • What are the top positive and negative aspects?
  • What are players most frustrated about?
  • If the studio only has one week, what should they fix first?
  • Are complaints mostly about performance, gameplay, pricing, bugs, or multiplayer?
  • What would a product manager conclude from these reviews?
  • What should the developer tell the community?
  • Which issue would create the biggest player satisfaction improvement if fixed?

The app then:

  1. Fetches recent English-language reviews from Steam by App ID
  2. Uses an IntentPlanner to classify the user question
  3. Runs only the relevant specialist agents
  4. Produces a final, action-oriented answer plus structured outputs
  5. Lets the user choose how many reviews to analyze, up to 10,000

If Steam has no reviews for the app, the app returns a clean no reviews found result. If Steam cannot be reached, the app returns an empty result with a fetch warning instead of inventing data.

Tech Stack

  • Backend: Node.js + Express
  • Frontend: React + Vite
  • Local LLM: Ollama
  • Validation: Zod
  • Database: none for MVP

Architecture

React + Vite
  -> POST /api/analyze
Express Backend
  -> Steam fetch
  -> IntentPlanner
  -> Selected agents
  -> SummaryAgent
  -> Response JSON

External services:

  • Steam Reviews API: https://store.steampowered.com/appreviews/{appId}
  • Ollama: http://localhost:11434/api/generate

Agent Workflow

Planner goals:

  • aspect_extraction
  • sentiment_overview
  • pain_point_detection
  • gameplay_analysis
  • product_prioritization
  • community_response
  • general_summary

Agents:

  • SentimentAgent: estimates sentiment distribution and overall mood
  • AspectAgent: extracts top positive and negative themes
  • IssueAgent: detects recurring complaints and issue categories
  • GameplayAgent: interprets gameplay, balance, bugs, performance, and multiplayer signals
  • ProductAgent: turns findings into product priorities and short-term actions
  • CommunityAgent: drafts player-facing communication
  • SummaryAgent: answers the user question directly and combines agent outputs

Steam Reviews API Notes

This project uses Steam's reviews endpoint:

https://store.steampowered.com/appreviews/{appId}

Parameters used:

  • json=1
  • filter=recent
  • language=english
  • purchase_type=all
  • review_type=all
  • num_per_page=100
  • cursor=*

Steam also supports review_type=positive and review_type=negative. Cursor pagination is handled in the backend and encoded safely with URLSearchParams. The fetcher uses Steam's num_per_page=100 maximum and keeps paginating until it reaches the user-selected reviewLimit, capped at 10,000 reviews.

Project Structure

steam-review-agent-lab/
  backend/
    src/
      server.js
      routes/
        analyzeRoutes.js
        steamRoutes.js
      services/
        steamService.js
      llm/
        ollamaClient.js
        mockClient.js
        llmRouter.js
      planner/
        intentPlanner.js
      agents/
        sentimentAgent.js
        aspectAgent.js
        issueAgent.js
        gameplayAgent.js
        productAgent.js
        communityAgent.js
        summaryAgent.js
      tools/
        reviewTools.js
        aggregationTools.js
      schemas/
        analysisSchemas.js
  frontend/
    src/
      main.jsx
      App.jsx
      api.js
      components/
        SteamAppInput.jsx
        QuestionBox.jsx
        ResultDashboard.jsx
        AgentReportCard.jsx
  README.md
  .gitignore

Backend API

GET /api/steam/reviews/:appId

Fetches Steam reviews.

Optional query parameters:

  • reviewLimit=1..10000

POST /api/analyze

Request body:

{
  "appId": "730",
  "question": "What are the top positive and negative aspects?",
  "provider": "ollama",
  "reviewLimit": 1000,
  "reviews": ["optional manual reviews"]
}

Response shape:

{
  "game": {
    "appId": "730",
    "source": "steam",
    "requestedReviewCount": 1000,
    "reviewCount": 0
  },
  "question": "What are the top positive and negative aspects?",
  "plan": ["aspect_extraction", "sentiment_overview"],
  "answer": "...",
  "sentiment": {
    "positive": 0,
    "negative": 0,
    "neutral": 0,
    "mixed": 0
  },
  "positiveAspects": [],
  "negativeAspects": [],
  "issues": [],
  "gameplayInsights": [],
  "recommendedActions": [],
  "communityMessage": "",
  "agentReports": [],
  "generatedBy": "ollama"
}

Mock Mode

Mock mode works immediately without Ollama. It still uses real Steam reviews, but the analysis itself is deterministic and keyword-based instead of LLM-generated.

Positive cues:

  • fun
  • addictive
  • beautiful
  • smooth
  • great
  • love
  • excellent
  • immersive
  • worth it
  • replayable

Negative cues:

  • bug
  • crash
  • lag
  • boring
  • repetitive
  • expensive
  • server
  • matchmaking
  • pay to win
  • toxic
  • unbalanced
  • stutter
  • fps

Issue categories:

  • performance
  • bugs
  • multiplayer
  • gameplay
  • pricing
  • content
  • balance
  • community

Ollama Setup

  1. Install Ollama.
  2. Start the Ollama service.
  3. Pull a local model:
ollama pull llama3.1
  1. Keep Ollama available at:
http://localhost:11434

The backend calls:

POST http://localhost:11434/api/generate

It uses:

  • OLLAMA_MODEL from .env
  • default model llama3.1
  • stream: false
  • JSON-only prompts
  • safe JSON parsing with automatic fallback to mock analysis

If Ollama is unavailable or returns invalid JSON, the app still works by keeping the same Steam reviews and switching only the analysis layer to mock mode.

Running The App

1. Backend

cd backend
npm install
cp .env.example .env
npm run dev

2. Frontend

cd frontend
npm install
npm run dev

Example Steam App IDs

  • 730 Counter-Strike 2
  • 570 Dota 2
  • 440 Team Fortress 2

Why This Project Is Useful

This MVP demonstrates:

  • local LLM inference
  • agent workflow design
  • dynamic agent selection
  • Steam API integration
  • structured JSON outputs
  • review analysis
  • product and action recommendations

Future Improvements

  • Supabase history storage
  • charts
  • CSV export
  • n8n scheduled weekly reports
  • webhook alerts
  • GitHub issue creation
  • comparison before and after game updates
  • trend analysis

About

Agentic Steam review intelligence system using dynamic agents to analyze player feedback and generate product insights.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages