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