网络运营
](https://github.com/E-Conners-Lab/NetworkOps_Platform/releases)  
人工智能网络自动化平台
管理多供应商基础设施的自然语言命令
NetworkOps是基于模型上下文协议(MCP)构建的网络自动化平台。它支持通过自然语言对思科、瞻博网络、诺基亚、Arista和Linux设备进行人工智能辅助管理,无需脚本。
______________________________________________________________________
截图
拓扑仪表板
具有设备健康指示器、图例和网络统计数据的交互式强制网络拓扑。
设备详情
单击任何设备以查看其属性、接口状态和补救控件。
OSPF邻接重叠
直接在拓扑链路上用区域标签可视化OSPF邻接。
BGP会话覆盖
对等链路上带有AS号注释的BGP会话状态。
DMVPN结构状态
DMVPN集线器和辐条覆盖,带有显示隧道IP、NBMA地址和正常运行时间的对等状态表。
使用延迟热图进行Ping扫描
批量ping结果可视化为整个拓扑的颜色编码延迟热图。
命令终端
在任何具有完整输出显示的设备上执行显示命令。
AI文档助理
RAG支持的实时网络查询聊天——用自然语言提问,并获得源引用的答案。
实时遥测(MDT)
实时CPU、内存、接口流量和计数器以5秒的间隔通过gRPC进行流式传输。
影响分析
在执行配置更改之前,预测其爆炸半径。
意图漂移引擎
YAML定义了预期的状态验证,包括每项合规性检查和违规警报。
路由器工具
内置子网计算器,带有VLSM分割和快速参考表。
______________________________________________________________________
快速开始
演示模式(无需网络设备)
尝试不使用任何硬件的NetworkOps。演示模式模拟具有路由器、交换机和FRR边缘设备的多设备网络。
git clone https://github.com/E-Conners-Lab/NetworkOps_Platform.git && cd NetworkOps_Platform
./scripts/quickstart.sh --demo
# Follow the prompts, then open http://localhost:5001 — Login: admin/admin或手动:
git clone https://github.com/E-Conners-Lab/NetworkOps_Platform.git && cd NetworkOps_Platform
uv venv --python 3.11 # downloads Python 3.11 if needed
source .venv/bin/activate
uv pip install -r requirements.txt
cd dashboard && npm install && npm run build && cd ..
JWT_SECRET=$(python3 -c "import secrets; print(secrets.token_hex(32))")
DEMO_MODE=true JWT_SECRET=$JWT_SECRET python dashboard/api_server.py没有紫外线? 用以下方式安装curl -LsSf https://astral.sh/uv/install.sh | sh。您也可以使用python3.11 -m venv .venv和pip install -r requirements.txt相反。
使用真实设备
git clone https://github.com/E-Conners-Lab/NetworkOps_Platform.git && cd NetworkOps_Platform
./scripts/quickstart.sh
# Edit .env with your device IPs and credentials
# Edit config/devices.py with your device inventory
python dashboard/api_server.py码头工人
git clone https://github.com/E-Conners-Lab/NetworkOps_Platform.git && cd NetworkOps_Platform
./scripts/docker-init.sh
# Edit .env with your credentials (or add DEMO_MODE=true for demo)
docker compose up______________________________________________________________________
演示模式
演示模式使用模拟网络数据提供功能齐全的仪表板体验。不需要真正的设备、SSH连接或实验室基础设施。
演示模式下的工作原理
| 功能 | 状态 | 详细信息 |
|---|---|---|
| 拓扑可视化 | 全 | 7节点网络,带路由器、交换机和FRR边缘设备 |
| BGP覆盖 | 全 | 模拟iBGP(AS 65000)和eBGP(AS 65100)对等互联 |
| OSPF覆盖 | 全 | 所有路由器上的区域0邻接 |
| DMVPN覆盖 | 完整 | 具有3个辐条的轮毂和辐条拓扑 |
| 交换机织物覆面 | 满 | 2个具有上行链路状态和端口数的交换机 |
| 平扫 | 完全 | 模拟100%可达性,具有真实的延迟 |
| 接口列表 | 完整 | 每个设备界面显示状态 |
| 显示命令 | 部分 | show ip interface brief, show version, show ip route 返回模拟输出;其他命令返回占位符消息 |
| 登录/RBAC | 完整 | JWT身份验证,基于角色的权限,所有仪表板功能已解锁 |
| 健康终点 | 满 | /healthz 和 /health/detailed 在没有Redis的情况下工作 |
什么在演示模式下不起作用
| 特性 | 原因 |
|---|---|
| 配置变更 | 没有真正的设备可以推送配置 |
| NETCONF/YANG查询 | 需要实时设备连接 |
| pyATS基线/差异 | 需要SSH连接到真实设备 |
| RAG聊天机器人 | 需要 ANTHROPIC_API_KEY ChromaDB指数 |
| 流式遥测 | 需要来自真实设备的gRPC流 |
| 终端(任意命令) | 大多数命令返回占位符输出 |
| NetBox集成 | 需要一个正在运行的NetBox实例 |
| 通过Claude使用MCP工具 | SSH到设备的工具将失败;只读工具工作 |
演示拓扑
R1 ──── R2
│ │
Switch-R1 Switch-R2
│
R3 ──── R4
│
edge1 (FRR, AS 65100)- R1至R4:思科C8000V路由器(IOS-XE)——OSPF区域0、iBGP AS 65000、DMVPN集线器/辐条
- 开关-R1、开关-R2:思科Cat9kv开关
- 边缘1:FR路由设备——与R3的eBGP对等
______________________________________________________________________
特性
React仪表板
- 具有拖放定位的交互式力导向拓扑
- 实时设备健康监测(健康/退化/严重)
- 基于角色的访问控制(管理员/操作员/查看器)
- 带输出显示的命令终端
- AI聊天面板(RAG-powered,需要Anthropic API键)
- 设备详细信息面板:
- Cisco设备:带有管理员/线路协议状态、补救按钮的接口列表 - Linux主机:正常运行时间、内存、磁盘、网关可达性 - Containerlab设备:容器状态、正常运行时间、内存
- 可视化覆盖:
- 带有AS号的BGP会话状态 - 具有区域映射的OSPF邻接 - DMVPN集线器/辐条结构 - 具有EIGRP状态的交换结构 - 带延迟热图的Ping扫描
- 意图漂移引擎:
- YAML定义的预期状态验证 - 力导向依赖图 - 前/后/爆炸半径影响分析 - 跨子系统事件关联
- 分层站点视图(区域→ Site → Rack → 设备)
- 通过本地存储实现位置持久化
- 变更管理工作流程
MCP工具(178种工具,24类)
与Claude Code或Claude Desktop集成,用于自然语言网络管理。
健康与监测
| 工具 | 说明 |
|---|---|
health_check | 检查单个设备连接 |
health_check_all | 所有设备的并行健康检查 |
full_network_test | 验证OSPF、BGP、DMVPN和可达性 |
linux_health_check | Linux主机状态(正常运行时间、内存、磁盘) |
get_cpu_memory | CPU和内存利用率 |
ping_sweep | 从设备到所有目标的批量ping |
设备操作
| 工具 | 说明 |
|---|---|
get_devices | 列出可用设备 |
send_command | 执行显示命令 |
send_config | 发送配置命令 |
discover_topology | 通过CDP/LDP发现拓扑 |
get_interface_status | 详细的接口状态 |
remediate_interface | 修复接口(无关机、反弹) |
bulk_command | 在多个设备上并行执行命令 |
配置管理
| 工具 | 说明 |
|---|---|
backup_config | 将运行配置保存到带时间戳的文件中 |
compare_configs | 区分两个配置或备份文件 |
list_backups | 列出已保存的配置备份 |
路由和故障排除
| 工具 | 说明 |
|---|---|
get_routing_table | 带协议过滤的解析路由表 |
traceroute | 逐跳路径分析 |
get_arp_table | 支持VRF的解析ARP表 |
get_mac_table | 来自交换机的MAC地址表 |
get_neighbors | 结构化CDP/LDP邻居数据 |
get_logs | 具有严重性过滤的Syslog缓冲区 |
网络配置协议
| 工具 | 说明 |
|---|---|
get_interfaces_netconf | 通过NETCONF/YANG获取接口信息 |
get_netconf_capabilities | 设备NETCONF功能 |
get_bgp_neighbors_netconf | 通过NETCONF连接BGP邻居 |
pyATS集成
| 工具 | 说明 |
|---|---|
pyats_learn_feature | 了解设备功能状态 |
pyats_snapshot_state | 捕获设备状态基线 |
pyats_diff_state | 与基线进行比较 |
pyats_check_compliance | 对照黄金模板检查配置 |
pyats_list_baselines | 列出已保存的基线 |
pyats_list_templates | 列出黄金配置模板 |
NetBox集成
| 工具 | 说明 |
|---|---|
netbox_get_devices | 列出NetBox中的设备 |
netbox_get_interfaces | NetBox的设备接口 |
netbox_get_prefixes | NetBox的IP前缀 |
netbox_generate_configs | 通过Jinja2从NetBox生成FRR配置 |
netbox_generate_iosxe_config | 从NetBox生成IOS-XE配置 |
netbox_allocate_ip | 从前缀分配下一个可用IP |
记忆与上下文系统
| 工具 | 说明 |
|---|---|
memory_search | 跨对话历史的语义搜索 |
memory_save | 保存笔记以供以后检索 |
memory_recall_device | 设备的最近事件 |
memory_stats | 内存系统统计信息 |
事件记录和缓存
| 工具 | 说明 |
|---|---|
get_event_log | 审核日志事件(可过滤) |
clear_event_log | 清除审核日志 |
cache_status | Redis缓存统计 |
流遥测(MDT)
- 通过gRPC实时计算CPU、内存和接口计数器(间隔5秒)
- WebSocket通过Socket推送到仪表板。输入
- 配置在C8000V路由器和Cat9kv开关上
RAG文档聊天机器人
- 使用语义搜索对CCIE/Cisco文档进行索引
- ChromaDB+句子转换器嵌入
- 聊天时通过SSH进行实时网络查询
- Claude以源引用为动力的回应
Discord Bot(聊天操作)
- 命令:
!devices,!health,!bgp,!ping,!events,!topology,!run - RBAC:管理员命令需要“网络管理员”角色
企业功能
| 类别 | 功能 |
|---|---|
| 认证 | JWT令牌、带恢复代码的MFA/TOTP |
| 授权 | 基于角色的访问控制(管理员/操作员/查看器) |
| 缓存 | Redis支持的响应缓存 |
| 速率限制 | 可配置的每个端点速率限制 |
| 异步作业 | 具有PostgreSQL持久性的Celery任务队列 |
| 健康探测器 | /healthz, /readyz, /health/detailed, /metrics |
| TLS/HTTPS | 使用TLS 1.2/1.3的Nginx反向代理 |
| 日志记录 | 用于聚合的结构化JSON日志 |
| SIEM转发 | Splunk、Elasticsearch、Syslog、Webhook |
| Kubernetes | HPA、PDB、滚动部署的完整清单 |
| 优雅地关闭 | SIGTERM处理请求耗尽 |
______________________________________________________________________
建筑
┌─────────────────────────────────────────────────────────────────────┐
│ NetworkOps Platform │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌────────────────────┐ │
│ │ Frontend │ │ API Server │ │ MCP Server │ │
│ │ (React) │◄──►│ (Flask) │ │ (Claude Tools) │ │
│ │ Port 3000 │ │ Port 5001 │ │ │ │
│ │ │ │ │ │ 178 tools across │ │
│ │ • Topology │ │ • REST API │ │ 24 categories │ │
│ │ • Terminal │ │ • WebSocket │ │ • NETCONF/YANG │ │
│ │ • RAG Chat │ │ • Auth/RBAC │ │ • pyATS │ │
│ └──────────────┘ └──────┬───────┘ └──────────┬─────────┘ │
│ │ │ │
│ ┌────────────┴───────────────────────┴──────────┐ │
│ │ Shared Data Layer │ │
│ │ • networkops.db (Alembic-managed) │ │
│ │ • chromadb/ (RAG) • baselines/ (pyATS) │ │
│ └───────────────────────┬───────────────────────┘ │
│ │ │
├─────────────────────────────────────────┼──────────────────────────┤
│ │ │
│ Network Devices (SSH / NETCONF) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌───────┐ │
│ │ Cisco │ │ Juniper │ │ Nokia │ │ Arista │ │ Linux │ │
│ │ IOS-XE │ │ Junos │ │ SR Linux│ │ EOS │ │ FRR │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └───────┘ │
└─────────────────────────────────────────────────────────────────────┘______________________________________________________________________
建立自己的实验室
使用快速入门脚本为您自己的网络设备配置NetworkOps:
# Interactive setup (recommended)
./scripts/quickstart.sh
# Demo mode (no devices needed)
./scripts/quickstart.sh --demo
# Non-interactive (CI/CD, Docker)
./scripts/quickstart.sh --headless
# Setup and auto-start
./scripts/quickstart.sh --headless --auto-start脚本检测 紫外线 自动实现更快的依赖关系安装。
在Linux虚拟机(Proxmox、裸机等)上部署
您可以在单个Linux主机上运行整个平台和containerlab,无需多路径。
1.安装必备组件:
# Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER && newgrp docker
# Containerlab
sudo bash -c "$(curl -sL https://get.containerlab.dev)"
# uv (Python version manager + package installer)
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc
# Node.js (for building the React frontend)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs2.克隆并设置项目:
git clone https://github.com/E-Conners-Lab/NetworkOps_Platform.git && cd NetworkOps_Platform
uv venv --python 3.11
source .venv/bin/activate
uv pip install -r requirements.txt3.配置 .env:
cp .env.example .env在中设置这些值 .env:
CONTAINERLAB_LOCAL=true
CONTAINERLAB_ONLY=true
CONTAINERLAB_TOPOLOGY_PATH=/path/to/NetworkOps_Platform/containerlab/datacenter.clab.yml
DEMO_MODE=false
JWT_SECRET=4.提取图像并部署实验室:
docker pull frrouting/frr:v8.4.1
docker pull ghcr.io/nokia/srlinux:24.10.1
docker pull alpine:3.19
cd containerlab
sudo containerlab deploy -t datacenter.clab.yml
cd ..5.构建前端,运行迁移,然后开始:
cd dashboard && npm install && npm run build && cd ..
alembic upgrade head
python dashboard/api_server.py6.更改默认密码:
TOKEN=$(curl -s http://localhost:5001/api/auth/login -H "Content-Type: application/json" -d '{"username":"admin","password":"admin"}' | python3 -c "import sys,json;print(json.load(sys.stdin)['token'])")
curl -X POST http://localhost:5001/api/auth/change-password -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d '{"old_password":"admin","new_password":"YourNewPassword"}'7.访问仪表板 在 http://:5001 并使用登录 admin 以及您的新密码。
注:CONTAINERLAB_LOCAL=true直接运行Docker命令,而不是通过Multipass路由。CONTAINERLAB_ONLY=true隐藏不存在的EVE-NG/物理设备,在仪表板中仅显示containerlab设备。
通过多路径(macOS)访问Containerlab
如果您使用的是macOS,并且更喜欢使用Multipass来托管containerlab VM,请离开 CONTAINERLAB_LOCAL=false (默认)并设置 CONTAINERLAB_VM 您的VM名称。看 core/containerlab.py 了解详情。
支持的设备类型
| 平台 | device_type | 特点 |
|---|---|---|
| 思科IOS-XE | cisco_xe | SSH、NETCONF、pyATS |
| 思科IOS | cisco_ios | 仅限SSH |
| Linux | linux | SSH |
| FR路由 | containerlab_frr | SSH(通过Containerlab) |
| 诺基亚SR Linux | containerlab_srlinux | SSH(通过Containerlab) |
设备输入示例
DEVICES = {
"core-router": {
"host": "192.168.1.10",
"device_type": "cisco_xe",
"username": "admin",
"password": "secret",
"netconf_port": 830,
},
"linux-server": {
"host": "192.168.1.100",
"device_type": "linux",
"username": "root",
"password": "password",
},
}______________________________________________________________________
Claude命令示例
"Show me the interfaces on R1"
"What's the OSPF neighbor status across all routers?"
"Run a health check on all devices"
"Take a baseline snapshot of R2 and check for drift"
"Ping from R1 to all router loopbacks"
"Compare the running config of R1 and R2"
"Show me the PIM neighbors and RP mapping"______________________________________________________________________
项目结构
.
├── network_mcp_async.py # MCP server entry point
├── mcp_tools/ # 178 MCP tools (24 categories)
├── config/
│ └── devices.py # Device inventory (static or NetBox)
├── core/ # Core engines
│ ├── intent_engine.py # Intent-based validation
│ ├── impact_analyzer.py # Impact analysis
│ ├── demo/ # Demo mode fixtures
│ └── unified_db.py # Unified SQLite database
├── dashboard/ # React dashboard + Flask API
│ ├── api_server.py # Flask API backend (port 5001)
│ ├── routes/ # Modular route blueprints
│ ├── auth/ # JWT, MFA/TOTP, RBAC
│ ├── src/ # React frontend
│ ├── Dockerfile.api # API container
│ └── Dockerfile.frontend # React + nginx container
├── templates/ # Jinja2 config templates (FRR, IOS-XE)
├── alembic/ # Database migrations
├── ansible/ # Playbooks and inventory
├── containerlab/ # Topology and device configs
├── docker/ # Production Dockerfiles
├── helm/ # Helm chart for Kubernetes
├── k8s/ # Kubernetes manifests
├── nginx/ # TLS reverse proxy config
├── netbox/ # NetBox integration
├── scripts/ # Quickstart, benchmarks, utilities
├── services/ # Discord bot, background services
├── tests/ # Test suite
└── docs/ # Documentation______________________________________________________________________
需求
- Python 3.11+(推荐使用;pyATS尚不支持3.14)
- Node.js 18+(用于仪表板)
- 可通过SSH访问的网络设备(用于非演示用途)
- 支持MCP的Claude Code或Claude Desktop(用于AI工具)
可选的
- Redis(缓存和速率限制)
- PostgreSQL(作业持久化)
- 人类API密钥(RAG聊天机器人)
- NetBox实例(IPAM集成)
______________________________________________________________________
使用本地LLM
RAG聊天机器人默认使用Claude,但如果你想让一切都在本地,你可以交换本地LLM。
什么已经在本地运行
- 嵌入 —
sentence-transformers(all-MiniLM-L6-v2)在本地运行,用于所有矢量搜索和文档索引。没有外部API调用。 - MCP工具 --178个MCP工具使用SSH/NETCONF上的标准MCP协议。任何兼容MCP的客户端都可以使用它们,HTTP代理也可以使用它们(
mcp_http_proxy.py)将它们作为任何LLM或脚本的REST端点公开。
本地LLM需要什么变化
RAG聊天面板(rag/query.py)连接到Anthropic SDK。要将其指向本地模型(Ollama、vLLM、LM Studio、llama.cpp等),您需要修改三个文件:
1. rag/query.py --将Anthropic客户端替换为与OpenAI兼容的客户端:
# Before (Anthropic)
import anthropic
client = anthropic.Anthropic(api_key=api_key)
response = client.messages.create(
model=model,
max_tokens=1024,
system=self.SYSTEM_PROMPT,
messages=[{"role": "user", "content": user_message}]
)
# After (OpenAI-compatible — works with Ollama, vLLM, LM Studio)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="unused")
response = client.chat.completions.create(
model="llama model here",
max_tokens=1024,
messages=[
{"role": "system", "content": self.SYSTEM_PROMPT},
{"role": "user", "content": user_message}
]
)2. rag/sanitizer.py --更新模型allowlist(第15-22行)以包含您的本地模型名称,或完全删除allowlist检查。
3. dashboard/routes/chat.py --更改默认模型 claude-sonnet-4-20250514 到您当地的型号名称。
工具调用(实时设备查询)
RAG聊天可以在对话过程中对您的设备执行实时SSH命令(例如,“运行健康检查”)。这使用了Anthropic的 tool_use 块格式。如果你想与当地法学硕士合作:
- 中的工具调用循环
rag/query.py(第406行附近)需要适应OpenAI函数调用模式 - 你需要一个支持可靠函数调用的模型-- Llama 3.1 70B+, Qwen 2.5 72B,或 西北风大 运作良好
- 较小的型号(7B/8B)将难以使用多步工具链
如果你只需要RAG问答(询问有关索引文档的问题)而不需要实时设备查询,你可以完全跳过调用重构的工具。任何处理基本聊天完成的本地模型都可以工作。
推荐的本地设置
| 设置 | 型号 | 需要VRAM | 工具调用 |
|---|---|---|---|
| 奥拉玛 | llama3.1:70b | 约40 GB | 是 |
| 奥拉玛 | qwen2.5:32b | 约20 GB | 是 |
| 奥拉玛 | llama3.1:8b | ~5 GB | 仅限RAG(无工具) |
| vLLM | 任何HuggingFace模型 | 变化 | 是(使用OpenAI服务器) |
| LM 工作室 | 任何GGUF型号 | 变化 | 是(与OpenAI兼容的API) |
______________________________________________________________________
演出
在Gunicorn的MacBook Pro M4上与4名工人进行了测试:
| 并发 | 请求/秒 | 平均延迟 |
|---|---|---|
| 100 | 5376 | 24毫秒 |
| 500 | 5100+ | 略有增加 |
| 1000 | 4800+ | 接近饱和 |
所有并发级别均无错误。看 scripts/wrk_benchmark.sh 对于完整的基准测试套件。
______________________________________________________________________
安全须知
- 永不承诺
.env--它包含凭据和机密 - 生成唯一
JWT_SECRET对于每次部署 - 仪表板使用RBAC按角色限制命令访问
- 危险指令(
reload,write erase等)被阻塞 - 在生产中执行之前审查命令
______________________________________________________________________
