File size: 5,706 Bytes
857d4bf c4f5819 857d4bf c4f5819 857d4bf c4f5819 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | ---
title: ROGLAG Threat Console
emoji: 🛡️
colorFrom: blue
colorTo: purple
sdk: docker
app_port: 7860
pinned: false
---
# ROGLAG Demo
AI RAG demo สำหรับตรวจความเสี่ยงจาก security log:
- Monitor dashboard แยก category/severity/source
- Critical alert center พร้อม badge/banner/toast ในหน้าเว็บ
- Rule classifier สำหรับ pattern ชัดเจน เช่น brute force, port scan, SQLi/XSS, C2 beacon
- Local RAG retrieval จาก `Data/files/security_logs.jsonl`
- Q&A ภาษาไทยแบบ local fallback
- Optional OpenRouter API สำหรับ LLM answer
## Run
```bash
cd "/Volumes/Drive D/Code/Work/Work/LAGROG"
python3 server.py
```
เปิด:
```text
http://127.0.0.1:8765
```
## Use OpenRouter
Local mode ใช้ได้ทันที ไม่ต้องมี key. ถ้าจะให้ LLM ช่วยสรุป:
```bash
export OPENROUTER_API_KEY="your_key_here"
export OPENROUTER_MODEL="openrouter/free"
python3 server.py
```
หน้าเว็บจะใช้ local fallback ได้ทันที และจะเรียก LLM อัตโนมัติเมื่อมี key
โปรเจกต์อ่าน `.env` อัตโนมัติด้วย key เหล่านี้:
```text
OPENROUTER_API_KEY=...
OPENROUTER_MODEL=openrouter/free
OPENROUTER_EMBED_MODEL=nvidia/llama-nemotron-embed-vl-1b-v2:free
```
## Build Vector Index
ตัว demo ใช้ keyword retrieval ได้ทันที แต่ถ้าจะใช้ embedding/vector RAG จริง ให้ build index ก่อน:
```bash
python3 build_vector_index.py --limit 10000 --batch-size 32
python3 server.py
```
ไฟล์ vector DB จะถูกสร้างที่:
```text
Data/files/lograg_vectors.sqlite
```
ถ้าไฟล์นี้มีอยู่ server จะใช้ vector retrieval อัตโนมัติ และ fallback เป็น keyword retrieval เมื่อ OpenRouter rate-limit หรือ vector index ยังไม่มี
## Production Vector RAG
ผล RAG บน local กับ Vercel จะไม่เหมือนกันถ้า local ใช้ `Data/files/lograg_vectors.sqlite` แต่ Vercel ใช้ keyword fallback เพราะไฟล์ SQLite vector ขนาดใหญ่ถูก exclude จาก deploy.
แนะนำสำหรับ production demo:
- ใช้ **Qdrant Cloud** เป็น vector DB ภายนอก
- ใช้ `OPENROUTER_EMBED_MODEL` ตัวเดียวกับตอนสร้าง index
- ตั้ง env บน Vercel ให้ครบ แล้ว API จะใช้ `retrieval=vector_db` อัตโนมัติ
Env ที่ต้องเพิ่มบน Vercel:
```text
OPENROUTER_API_KEY=...
OPENROUTER_MODEL=openrouter/free
OPENROUTER_EMBED_MODEL=nvidia/llama-nemotron-embed-vl-1b-v2:free
QDRANT_URL=https://xxxxx.qdrant.io
QDRANT_API_KEY=...
QDRANT_COLLECTION=roglag_logs
```
Upload vector index เข้า Qdrant:
```bash
python3 upload_qdrant_index.py --limit 10000 --batch-size 32
```
เพิ่ม env บน Vercel:
```bash
vercel env add QDRANT_URL production
vercel env add QDRANT_API_KEY production
vercel env add QDRANT_COLLECTION production
vercel env add OPENROUTER_EMBED_MODEL production
vercel --prod
```
## Model notes
สำหรับ demo ฟรี แนะนำเริ่มที่:
- `openrouter/free` - ง่ายสุด ให้ OpenRouter route ไป free model ที่ใช้ได้ตอนนั้น
- `openai/gpt-oss-120b:free` - reasoning/Q&A ดี เหมาะกับสรุป incident
- `nvidia/nemotron-3-ultra:free` - context ใหญ่ เหมาะกับ log context ยาว
- `google/gemma-4-31b:free` - multilingual/doc understanding ดี
- `nvidia/llama-nemotron-embed-vl-1b-v2:free` - embedding ฟรีสำหรับ vector RAG
Free models มี rate limit และ availability เปลี่ยนได้ ควรมี local fallback เสมอ
## Regenerate data
```bash
cd Data/files
python3 gen_logs.py -n 10000 --profile mixed --seed 42
python3 gen_logs.py -n 50000 --profile realistic --seed 42
```
ไฟล์ชุดใหญ่สำหรับ train/eval แยกไว้แล้ว:
```text
Data/files/security_logs_extended_50k.jsonl
Data/files/security_logs_extended_sample_2k.jsonl
```
ถ้าจะรัน local server กับชุด 50k:
```bash
LOGRAG_DATA_FILE=Data/files/security_logs_extended_50k.jsonl python3 server.py
```
## Critical Alerts
Local และ Vercel API มี endpoint เดียวกัน:
```text
GET /api/alerts?limit=20
```
หน้าเว็บจะ poll ทุก 15 วินาที ถ้าเจอ critical alert ใหม่จะขึ้น toast และกด badge บน navbar เพื่อเปิด Incident queue ที่ filter เป็น Critical ทันที
## Deploy on Vercel
โปรเจกต์มี `vercel.json` และ `api/*.py` แล้ว ดังนั้น deploy เป็น static frontend + Python Functions ได้เลย:
```bash
npm i -g vercel
vercel login
vercel env add OPENROUTER_API_KEY
vercel --prod
```
บน Vercel จะใช้ `Data/files/security_logs.jsonl` ชุด 10k เพื่อให้ bundle เล็กและ cold start เร็ว ส่วน vector SQLite และไฟล์ 50k ถูก exclude จาก deployment. Local ยังใช้ vector index ได้ตามเดิม.
|