sahastraWin/netops-ai-copilot

GitHub: sahastraWin/netops-ai-copilot

一个基于Next.js和本地大语言模型的网络运维AI助手,通过智能日志分析和自然语言转配置来提升Cisco网络设备的管理效率。

Stars: 0 | Forks: 0

# 🌐 NetOps AI Copilot [![Next.js](https://img.shields.io/badge/Next.js-15-black?logo=nextdotjs)](https://nextjs.org) [![TypeScript](https://img.shields.io/badge/TypeScript-5-blue?logo=typescript)](https://typescriptlang.org) [![Tailwind CSS](https://img.shields.io/badge/Tailwind-3-38bdf8?logo=tailwindcss)](https://tailwindcss.com) [![MongoDB](https://img.shields.io/badge/MongoDB-Atlas-green?logo=mongodb)](https://mongodb.com) [![License](https://img.shields.io/badge/License-MIT-yellow)](LICENSE) ## 📸 屏幕截图 | 仪表盘 | 日志分析器 | 配置生成器 | |-----------|-------------|-----------------| | ![Dashboard](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/987437c68b214316.png) | ![Log Analyzer](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/751d8a340e214321.png) | ![Config Generator](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/7f3f2add97214326.png) | | 实时统计与图表 | AI 驱动的 syslog 分析 | 意图转 IOS-CLI | ## ✨ 核心功能 ### 🔍 AI 日志分析器 (可观测性) - 粘贴 Cisco syslog 数据(路由器、交换机、防火墙) - 通过 **Ollama** 运行的本地 **Llama 3** 可检测异常:BGP 摆动、接口掉线、暴力破解尝试、CPU 飙升 - 提供通俗易懂的英文解释,并附带用于调查的具体 Cisco `show` 命令 - 严重性分类:CRITICAL → HIGH → MEDIUM → LOW → INFO - 如果 Ollama 处于离线状态,OpenAI GPT-4o-mini 将作为自动备用方案 ### ⚙️ 意图转配置生成器 (自动化) - 输入自然语言:*"Block IP 192.168.1.50 and allow all else"*(屏蔽 IP 192.168.1.50 并允许其他所有流量) - 获取可用于生产环境的 **Cisco IOS / NX-OS / ASA CLI** 命令 - 平台选择器:IOS、IOS-XE、NX-OS、ASA、IOS-XR - 包含验证命令和回滚步骤 - 所有配置均保存至 MongoDB 以供审计追溯 ### 🛡️ RBAC 安全 (基于角色的访问控制) | 角色 | 权限 | |------|------------| | `VIEWER` | 仅查看仪表盘 | | `JUNIOR_ENGINEER` | + 生成配置 | | `SENIOR_ENGINEER` | + 分析日志 | | `ADMIN` | 完全访问权限 + 用户管理 | ### 📊 威胁情报仪表盘 - 每周活动面积图(日志、配置、严重警报) - 严重性分布条形可视化 - 实时近期活动流 - 系统状态面板(AI 引擎、数据库、Ollama) ### 🔒 隐私优先的 AI 架构 ``` Request → Try Ollama (local, private) → If unavailable → OpenAI (fallback) ``` 当 Ollama 运行时,网络日志绝不会离开您的基础设施。 ## 🛠️ 技术栈 | 层级 | 技术 | |-------|-----------| | **前端** | Next.js 15 (App Router), TypeScript, Tailwind CSS | | **UI 组件** | 定制的 Cisco 主题深色 UI, Recharts | | **后端** | Next.js Route Handlers (无服务器 API) | | **数据库** | MongoDB Atlas + Prisma ORM | | **认证** | Auth.js v5 (Credentials + JWT) | | **主 AI** | Ollama + Llama 3 (本地, 私有) | | **备用 AI** | OpenAI GPT-4o-mini | | **数据验证** | Zod | | **密码哈希** | bcryptjs (cost factor 12) | ## 🚀 入门指南 ### 前置条件 请确保您已安装以下软件: ``` node --version # v18+ required (v20+ recommended) npm --version # v9+ ``` ### 步骤 1:克隆仓库 ``` git clone https://github.com/YOUR_USERNAME/netops-ai-copilot.git cd netops-ai-copilot ``` ### 步骤 2:安装依赖项 ``` npm install ``` ### 步骤 3:配置 MongoDB (免费) 1. 访问 [https://cloud.mongodb.com](https://cloud.mongodb.com) 2. 创建一个免费账户 → **Create a Free Cluster** (M0 Sandbox) 3. **Database Access** → 添加一个带有密码的用户 4. **Network Access** → 添加 IP `0.0.0.0/0`(允许所有)以便开发 5. **Connect** → **Drivers** → 复制连接字符串 它看起来像这样: ``` mongodb+srv://username:password@cluster0.xxxxx.mongodb.net/netops?retryWrites=true&w=majority ``` ### 步骤 4:配置环境变量 ``` cp .env.example .env.local ``` 编辑 `.env.local`: ``` # MongoDB MONGODB_URI="mongodb+srv://username:password@cluster0.xxxxx.mongodb.net/netops?retryWrites=true&w=majority" # Auth.js — 生成 secret: # 运行:openssl rand -base64 32 AUTH_SECRET="your-generated-secret-here" NEXTAUTH_URL="http://localhost:3000" # Ollama(可选 — 从 https://ollama.ai 安装) OLLAMA_BASE_URL="http://localhost:11434" OLLAMA_MODEL="llama3" # OpenAI(可选 fallback) OPENAI_API_KEY="sk-..." # AI 模式:"auto" 首先尝试 Ollama,然后回退到 OpenAI AI_PROVIDER="auto" ``` ### 步骤 5:推送数据库 Schema ``` npx prisma generate # Generate Prisma client npx prisma db push # Push schema to MongoDB ``` ### 步骤 6:初始化演示账户 ``` npx tsx scripts/seed.ts ``` 这将创建 3 个演示账户: | 邮箱 | 密码 | 角色 | |-------|----------|------| | admin@netops.dev | admin123 | ADMIN | | senior@netops.dev | senior123 | SENIOR_ENGINEER | | junior@netops.dev | junior123 | JUNIOR_ENGINEER | ### 步骤 7:配置 Ollama(可选,但强烈推荐) ``` # 从 https://ollama.ai 安装 Ollama # macOS: brew install ollama # 然后拉取 Llama 3: ollama pull llama3 # 启动 Ollama server: ollama serve ``` ### 步骤 8:启动开发服务器 ``` npm run dev ``` 打开 [http://localhost:3000](http://localhost:3000) 🎉 ## 📁 项目结构 ``` netops-ai-copilot/ ├── src/ │ ├── app/ # Next.js App Router │ │ ├── api/ │ │ │ ├── auth/ │ │ │ │ ├── [...nextauth]/ # Auth.js catch-all handler │ │ │ │ └── register/ # User registration endpoint │ │ │ ├── analyze-logs/ # AI log analysis endpoint │ │ │ ├── generate-config/ # AI config generation endpoint │ │ │ ├── dashboard/stats/ # Dashboard statistics endpoint │ │ │ ├── logs/[id]/ # Log CRUD operations │ │ │ └── configs/[id]/ # Config CRUD operations │ │ ├── auth/ │ │ │ ├── login/ # Login page │ │ │ ├── register/ # Registration page │ │ │ └── error/ # Auth error page │ │ ├── dashboard/ │ │ │ ├── layout.tsx # Dashboard layout (sidebar + topbar) │ │ │ ├── page.tsx # Main dashboard │ │ │ ├── logs/ # Log analyzer page │ │ │ ├── configs/ # Config generator page │ │ │ └── settings/ # User settings page │ │ ├── globals.css # Global styles + Cisco theme │ │ ├── layout.tsx # Root layout │ │ └── page.tsx # Landing page / redirect │ ├── components/ │ │ ├── dashboard/ # Dashboard-specific components │ │ │ ├── sidebar.tsx │ │ │ ├── topbar.tsx │ │ │ ├── stats-cards.tsx │ │ │ ├── activity-chart.tsx │ │ │ ├── recent-activity.tsx │ │ │ ├── alerts-panel.tsx │ │ │ └── quick-actions.tsx │ │ ├── logs/ │ │ │ ├── log-analyzer.tsx # AI log analysis UI │ │ │ └── log-history.tsx # Paginated log history │ │ ├── config/ │ │ │ ├── config-generator.tsx # AI config generation UI │ │ │ └── config-history.tsx # Saved configs list │ │ ├── shared/ │ │ │ ├── landing-page.tsx │ │ │ ├── login-form.tsx │ │ │ ├── register-form.tsx │ │ │ ├── session-provider.tsx │ │ │ └── permission-gate.tsx # RBAC UI component │ │ └── ui/ │ │ └── toaster.tsx │ ├── hooks/ │ │ └── use-toast.ts │ ├── lib/ │ │ ├── ai.ts # AI provider (Ollama → OpenAI) │ │ ├── auth.ts # Auth.js config + RBAC helpers │ │ ├── mongodb.ts # MongoDB connection │ │ ├── prisma.ts # Prisma singleton │ │ └── utils.ts # Shared utilities │ ├── middleware.ts # Route protection │ └── types/ │ └── index.ts # TypeScript types ├── prisma/ │ └── schema.prisma # Database schema ├── scripts/ │ └── seed.ts # Demo data seeder ├── screenshots/ # UI screenshots for README ├── .env.example # Environment template ├── next.config.ts ├── tailwind.config.ts └── tsconfig.json ``` ## 🔐 认证与 RBAC 深入解析 ### Auth.js v5 在此的工作原理 1. 用户提交登录表单 → `POST /api/auth/signin` 2. Auth.js 调用我们的 `authorize()` 函数 3. 我们通过 MongoDB (bcrypt) 验证邮箱/密码 4. Auth.js 创建一个包含 `{ id, email, name, role }` 的 **JWT** 5. JWT 存储在 **httpOnly cookie** 中(安全,防 XSS) 6. 每个请求都会自动包含该 cookie 7. `auth()` 函数在服务器组件/API 路由上读取 JWT ### RBAC 的工作原理 ``` // Define permissions per role (src/lib/auth.ts) const ROLE_PERMISSIONS = { VIEWER: ["view:dashboard"], JUNIOR_ENGINEER: ["view:dashboard", "generate:config"], SENIOR_ENGINEER: ["view:dashboard", "analyze:logs", "generate:config"], ADMIN: ["view:dashboard", "analyze:logs", "generate:config", "view:all_logs", ...] } // API Route check (server-side) if (!canAnalyzeLogs(session.user.role)) { return NextResponse.json({ error: "Forbidden" }, { status: 403 }); } // UI check (client-side via PermissionGate component) ``` ## 🤖 AI 架构深入解析 ### 提供者优先级 ``` Request → isOllamaAvailable()? → YES → Use Ollama (local, private) NO → OpenAI API key set? → YES → Use OpenAI NO → Mock response ``` ### 为什么企业选择本地 AI - **数据隐私**:网络日志包含敏感的拓扑数据——它们绝不会离开您的基础设施 - **成本**:进行大量日志分析时无需按 Token 支付 API 费用 - **延迟**:AI 推理无需网络往返 - **合规性**:对 GDPR, SOC2, HIPAA 友好 ### 自定义 AI 提示词 编辑 `src/lib/ai.ts` → `SYSTEM_PROMPTS` 对象,以针对您特定的 Cisco 环境进行调整。 ## 🌍 部署指南 ### 选项 1:Vercel (推荐 — 最简单) 1. 将代码推送到 GitHub 2. 前往 [vercel.com](https://vercel.com) → **New Project** → 从 GitHub 导入 3. 在 Vercel 控制台中添加环境变量(与 `.env.local` 相同) 4. 将 `NEXTAUTH_URL` 更改为您的 Vercel 域名:`https://your-app.vercel.app` 5. **Deploy** — 大功告成!🎉 ### 选项 2:Railway ``` npm install -g @railway/cli railway login railway init railway up ``` 在 Railway 控制台中设置环境变量。 ### 选项 3:Docker (自托管) ``` FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run build EXPOSE 3000 CMD ["npm", "start"] ``` ``` docker build -t netops-ai-copilot . docker run -p 3000:3000 --env-file .env.local netops-ai-copilot ``` ## 📝 可用脚本 ``` npm run dev # Start development server (hot reload) npm run build # Build for production npm run start # Start production server npm run lint # Run ESLint npx prisma db push # Push schema changes to MongoDB npx prisma studio # Open Prisma Studio GUI (database viewer) npx tsx scripts/seed.ts # Seed demo accounts ``` ## 🎯 面试要点 (Cisco 专项) ### 为什么该项目与 Cisco 契合 1. **基于意图的网络 (IBN)**:我们的配置生成器正是 Cisco DNA Center 所做的工作——将业务意图转化为网络配置 2. **AIOps**:Cisco 正在将 AI 整合到 Catalyst Center 中;我们的日志分析器正是反映了这一用例 3. **数据隐私**:使用本地 LLM (Ollama) 展示了对企业安全需求的理解——日志是高度敏感的 4. **RBAC**:Cisco 的企业客户需要细粒度的访问控制——我们在 middleware、API 和 UI 层面都实现了这一点 5. **可观测性**:日志分析与 Cisco 的 ThousandEyes 和 AppDynamics 产品保持一致 ### 值得阐述的关键技术决策 - **为什么选 MongoDB 而不是 PostgreSQL?** 日志数据是半结构化的(不同的异常、可变的字段)——MongoDB 灵活的 schema 能够很好地处理这种情况 - **为什么选 JWT 而不是数据库会话?** JWT 是无状态的——与无服务器/边缘部署以及 Ollama 的本地特性配合得更好 - **为什么优先使用 Ollama?** 企业安全原则:尽量减少数据外发,尤其是网络拓扑信息 - **为什么选择 Next.js App Router?** Server Components 减少了客户端 JavaScript,提升了数据密集型仪表盘的性能 ## 📄 许可证 MIT 许可证 — 详情请参见 [LICENSE](LICENSE) 文件。 ## 🙏 致谢 - [Cisco DevNet](https://developer.cisco.com) 提供网络灵感 - [Ollama](https://ollama.ai) 提供本地 LLM 基础设施 - [Auth.js](https://authjs.dev) 提供身份验证 - [Prisma](https://prisma.io) 提供数据库 ORM - [Vercel](https://vercel.com) 提供部署平台 **用 ❤️ 为 Cisco 网络工程师打造** *NetOps AI Copilot — 当意图遇见网络智能*
标签:AI助手, AI风险缓解, ChatGPT, Cisco, DLL 劫持, Docker 部署, GPT-4o, IOS-CLI, Llama 3, LLM, LLM评估, MongoDB, NetOps, Ollama, Prisma, Promptflow, RBAC, Syslog, Tailwind CSS, TypeScript, Unmanaged PE, 人工智能, 仪表盘, 基于角色的访问控制, 基础设施管理, 大模型微调, 大语言模型, 威胁情报, 安全插件, 开发者工具, 异常检测, 思科, 意图转配置, 智能自动化, 用户模式Hook绕过, 网络安全, 网络自动化, 网络运维, 自动化攻击, 配置生成, 隐私保护