WiseCoderSam/rag-document-qa-system

GitHub: WiseCoderSam/rag-document-qa-system

基于 FastAPI 与 React 构建的 AI 驱动 SOC 控制台,支持日志摄取、规则检测、MITRE ATT&CK 映射及 RAG 调查问答。

Stars: 0 | Forks: 0

# 企业日志监控与威胁检测平台 一个由 AI 驱动的 SOC 风格平台,可摄取应用程序、服务器和安全日志,通过基于规则的检测发现可疑活动,并支持使用检索增强生成 (RAG) 进行调查。 ## 仓库结构 - `frontend/` - Vite (React, TypeScript, Tailwind CSS, @base-ui/react) 应用程序。 - `backend/` - FastAPI (Python, SQLAlchemy, Alembic, FAISS, Google Gemini) 应用程序。 ## 前置条件 - [Node.js](https://nodejs.org/) (v18+) - [Python](https://www.python.org/) (v3.10+) - [Google Gemini API key](https://ai.google.dev/) — 用于 embeddings 和聊天/摘要。如果没有,应用程序仍可运行,但 AI 功能将返回“未配置”消息,且 embeddings 将回退为零向量。 - [Supabase 账户](https://supabase.com/)(用于 Auth 和 Storage;关系型数据库默认为本地 SQLite 文件 — 见下文) ## 快速开始 ### 1. 后端设置 1. 导航到 `backend/` 目录。 2. 创建虚拟环境:`python -m venv venv`。 3. 激活环境:`venv\Scripts\activate` (Windows) 或 `source venv/bin/activate` (Mac/Linux)。 4. 安装依赖:`pip install -r requirements.txt`。 5. 根据 `.env.example` 创建 `.env` 文件,并至少设置 `SUPABASE_URL`、`SUPABASE_KEY`、`SUPABASE_JWT_SECRET` 和 `GEMINI_API_KEY`。 6. 执行数据库迁移:`alembic upgrade head`。 7. 启动 FastAPI 服务器:`uvicorn app.main:app --reload`。 ### 2. 前端设置 1. 导航到 `frontend/` 目录。 2. 安装依赖:`npm install`。 3. 根据 `.env.example` 创建 `.env.local` 文件。 4. 启动开发服务器:`npm run dev`。 ## 运行测试 - 后端:`pip install -r backend/requirements-dev.txt`,然后运行 `pytest backend/test_parser_rules.py backend/test_rag.py`(其他 `backend/test_*.py` 文件是用于针对实时服务器运行的手动验证脚本,而不是 pytest 套件)。 - 前端:在 `frontend/` 目录下运行 `npm run test`。 - 两者均会在每次 push/PR 时在 CI 中自动运行 — 参见 `.github/workflows/ci.yml`。 ## 部署 前端和后端部署在不同类型的平台上,因为它们具有不同的 runtime 需求 — 前端是静态/无状态的,而后端需要常驻进程(用于日志/文档处理的进程内后台任务)以及真正的数据库。 - **前端 → [Vercel](https://vercel.com)。** 导入仓库,将项目根目录设置为 `frontend/`,并设置以下环境变量:`VITE_API_URL`(您部署的后端 URL)、`VITE_SUPABASE_URL`、`VITE_SUPABASE_ANON_KEY`。Vercel 会自动检测 Vite 构建;无需额外配置。 - **后端 → [Render](https://render.com)**(或 Railway/Fly.io — 任何可以运行长期 Docker container 的平台)。本仓库包含 `render.yaml`:将其作为 [Render Blueprint](https://dashboard.render.com/blueprints) 导入,它会自动从 `backend/Dockerfile` 配置服务。您仍需通过 Render 控制面板自行粘贴密钥(`DATABASE_URL`、`SUPABASE_URL`、`SUPABASE_KEY`、`SUPABASE_JWT_SECRET`、`GEMINI_API_KEY`、`ALLOWED_ORIGINS`)。 - **数据库 → Supabase Postgres**,而不是本地的 SQLite 回退方案。免费托管层级(包括 Render 的免费层)不保证在重新部署/重启后磁盘数据持久化,因此 SQLite 文件会悄无声息地丢失数据 — 请改用您 Supabase 项目的 Postgres 连接字符串(项目设置 → Database → Connection string → URI)作为 `DATABASE_URL`,并在首次使用前针对它运行一次 `alembic upgrade head`。 ## 演示模式 认证页面可以显示一键式 **“探索实时演示”** 按钮,以便访客(例如招聘人员)无需注册即可浏览预加载了事件数据的控制台。要启用此功能: 1. **创建演示账户**:在 Supabase 控制面板(Authentication → Users → Add user)中,创建例如 `demo@yourdomain.com` 并设置密码,勾选“Auto Confirm User” — 或者通过应用程序注册并确认电子邮件。 2. **使用示例数据填充**:`backend/sample_data/` 包含一个精心制作的安全日志(一个连贯的暴力破解 → 权限提升 → 凭据转储攻击,会触发每一条检测规则)以及一个用于文档问答的事件响应剧本。通过真实的 API 上传它们,命令如下: cd backend python seed_demo.py --email demo@yourdomain.com --password --api-url https://your-api.onrender.com (省略 `--api-url` 可填充本地运行的后端。)重新运行时会跳过已上传的文件。 3. **显示按钮**:在前端环境中设置 `VITE_DEMO_EMAIL` 和 `VITE_DEMO_PASSWORD`(Vercel 环境变量,或在本地使用 `.env.local`)。这些变量按设计会被构建到公共 bundle 中 — 演示账户是公开的。只有当两者都设置后,按钮才会显示。 注意:演示账户是一个普通账户 — 访客可以删除预置的文件或上传他们自己的文件。如果发生这种情况,只需重新运行填充脚本即可。 ## 当前架构 本节描述了实际实现的内容,与 `tech.md`/`prd.md` 中最初的挑战目标计划相对。 - **数据库**:通过 `DATABASE_URL` 使用 SQLAlchemy(默认使用本地 SQLite 文件以实现零配置的本地开发)。在生产环境中,它应指向 Supabase Postgres — 参见上文“部署” — 否则 Supabase 仅用于 Auth 和 Storage。 - **后台处理**:FastAPI `BackgroundTasks`(进程内),而不是单独的任务队列。没有 Celery/Redis 依赖。 - **向量搜索**:单个进程内的 FAISS `IndexFlatIP`,持久化到磁盘。这是一种单实例设计 — 它不支持针对共享索引运行多个后端副本。 - **AI**:Google Gemini(`gemini-embedding-001` 用于 embeddings,`gemini-2.5-flash` 用于聊天/摘要),而不是本地托管的模型。这意味着 AI 功能需要互联网连接和 Gemini API key。 - **监控**:未集成 Grafana/Prometheus/Sentry。日志记录通过 `print()`/stdout 进行。 ## 已知局限性 - FAISS 索引和 SQLite 数据库都是单进程/单文件 — 这是一个适用于开发/作品集规模的配置,不支持水平扩展。 - 检测规则目前涵盖暴力登录、SQL/XSS 注入特征、权限提升、可疑的 PowerShell 以及凭据转储关键字匹配。更广泛的覆盖范围(不可能的旅行、端口扫描、勒索软件模式、Sigma/YARA 集成)尚未实现。
标签:AMSI绕过, AV绕过, FAISS, FastAPI, RAG, React, Syscalls, 威胁检测, 安全运营中心, 测试用例, 网络映射, 逆向工具