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 ได้ตามเดิม.