网络自动化助手

一款基于AI和MCP的网络自动化助手,通过自然语言聊天实现对Arista cEOS设备的命令执行、配置推送和状态验证,支持本地或云环境部署。

  • by satyam-thakur
  • Python
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 satyam-thakur/AI-Network-Assistant

使用说明

AI网络助手

🤖 一种基于人工智能的网络自动化助手,使用MCP在Containerlab设置中安全地调用pyATS工具来对抗Arista cEOS设备。自然聊天以运行show命令、推送配置、验证状态,并可选择使用Terraform配置实验室EC2主机。


演示


架构图

              ╔════════════════════════════════════╗
              ║  AI Network Assistant Flow         ║
              ╚════════════════════════════════════╝

                        ┌──────────┐
                        │   User   │  
                        └─────┬────┘
                              │ chat query
                              ▼
                   ┌──────────────────────┐
                   │   agent.py (Gemini)  │ ◄─ Gemini API
                   └──────────┬───────────┘
                              │ MCP stdio
                              │ (list_devices, run_show, configure)
                              ▼
                   ┌──────────────────────┐
                   │  server.py (FastMCP) │ ◄─ pyATS
                   └──────────┬───────────┘
                              │ SSH (testbed.yaml)
                              ▼
                  ┌────────────────────────┐
                  │  Containerlab Topology │
                  │  ┌────┐  ┌────┐ ┌────┐ │
                  │  │ceos│──│ceos│─│ceos│ │
                  │  │ 1  │  │ 2  │ │ 3  │ │
                  │  └────┘  └────┘ └────┘ │
                  └────────────────────────┘

  Optional: Terraform → EC2 → Containerlab → cEOS

工作原理(机制)

  • MCP首次设计:服务器通过MCP公开安全、明确的网络自动化工具(列出设备、运行显示、推送配置、ping等)。
  • 人工智能代理(Gemini): src/agent.py 使用Gemini,并在需要时调用MCP工具。该模型从不具有原始设备访问权限;它仅通过MCP工具起作用。
  • pyATS集成: src/server.py 加载pyATS试验台(PYATS_TESTBED_PATH)并使用稳健的发送/期望流在设备上执行命令。
  • Containerlab拓扑结构:Arista cEOS实验室样本如下 containerlab/ 带着一个 topology.clab.yaml 以及一个现成的pyATS测试台。
  • 可选的云配置: terraform/ 如果您喜欢云实验室环境,可以启动EC2主机来运行Containerlab。

主要特点:

  • 工具安全:AI只能做MCP工具允许的事情。破坏性命令被设计阻止。
  • 可重复实验室:Containerlab拓扑+测试平台YAML=快速、可重复的演示。
  • 云可选性:本地或EC2。使用适合您环境的东西。

设置

1) Python虚拟环境

使用venv来避免依赖冲突。

cd AI-Network-Assistant
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt

2) 环境变量(.env)

创建一个 .env 项目根目录中的文件(它已在 .gitignore 以避免秘密泄露)。

cat > .env << 'EOF'
GEMINI_API_KEY=your_gemini_api_key_here
PYATS_TESTBED_PATH=./containerlab/testbed_containerlab.yaml
EOF

笔记:

  • GEMINI_API_KEY 代理人要求。
  • PYATS_TESTBED_PATH 必须指向您的pyATS测试台YAML。现成的文件存在于 containerlab/testbed_containerlab.yaml.

3) Containerlab(本地实验室)

此仓库包括一个简单的3节点Arista cEOS拓扑。

使用辅助脚本安装Containerlab和依赖项:

./clab.sh

部署实验室:

sudo containerlab deploy -t containerlab/topology.clab.yaml

您有:

  • 3个cEOS节点(ceos1, ceos2, ceos3)启动配置如下 containerlab/backup_configs/
  • 链接定义见 containerlab/topology.clab.yaml
  • 一个现成的pyATS测试台 containerlab/testbed_containerlab.yaml 具有SSH访问权限和默认凭据(admin/admin 对于演示)

完成后拆卸:

sudo containerlab destroy -t containerlab/topology.clab.yaml

4) 可选:使用Terraform配置EC2主机

如果你想在AWS而不是本地运行实验室,你可以配置一个实例,然后在那里安装Containerlab。如果你没有使用云,你可以跳过这一节。

安装AWS CLI和Terraform:

./terraform.sh

配置AWS凭据(一次):

aws configure

审查/调整 terraform/terraform.tfvars 根据需要,然后提供:

cd terraform
terraform init
terraform plan
terraform apply -auto-approve

有用的输出将包括实例详细信息和SSH命令。配置后,通过SSH连接到实例,克隆此仓库,重复步骤1-3,并在云VM中部署Containerlab拓扑。

完成后销毁:

terraform destroy -auto-approve

运行AI网络助手

当你的静脉处于活动状态时 .env 已配置:

python3 src/agent.py

发生了什么:

  • 代理启动并连接到MCP服务器(src/server.py)超过stdio。
  • 服务器从以下位置加载pyATS测试平台 PYATS_TESTBED_PATH 并暴露工具。
  • 你和代理人聊天;必要时,它调用MCP工具对设备进行操作。

示例问题:

  • “列出设备”
  • “在clab-test_network-ceos1上运行显示ip路由”
  • “在clab-test_network-ceos2上配置Ethernet1的描述”
  • “从clab-test_network-ceos1 Ping 10.0.12.2”

建筑细部

  • 服务器(src/server.py)

    • 用途 fastmcp 通过MCP(stdio传输)公开工具。
    • 通过以下方式加载pyATS试验台 PYATS_TESTBED_PATH 并按需连接到设备。
    • 实现安全助手来运行show命令、推送配置、获取日志和运行ping。
    • 清理CLI输出(删除ANSI代码),阻止危险输入,并干净地断开连接。
  • 代理商(src/agent.py)

    • 负载 .env 并初始化Gemini(google-generativeai).
    • 作为stdio客户端连接到MCP服务器,并将服务器工具作为功能反映到Gemini。
    • 向Gemini发送用户提示,处理函数调用,执行MCP工具,返回结果。
    • 提供一个简单的聊天循环,供交互式使用。
  • Containerlab和pyATS

    • containerlab/topology.clab.yaml 定义cEOS节点和链接。
    • 启动配置实时 containerlab/backup_configs/.
    • pyATS试验台位于 containerlab/testbed_containerlab.yaml 指向具有SSH凭据的实验室设备IP。
  • 地形(可选)

    • terraform/ 定义EC2实例、安全组和实例状态控制。
    • terraform.sh 在运行之前在计算机上安装AWS CLI和Terraform terraform 命令。

故障排除

  • 确保 .venv 已激活,并且 pip install -r requirements.txt 成功。
  • 验证 .env 存在有效 GEMINI_API_KEY 和 PYATS_TESTBED_PATH.
  • 确认Containerlab设备可以使用测试台YAML中的IP通过SSH访问。
  • 如果在AWS中运行,请确认安全组允许从您的IP进行SSH。

安全和范围

  • MCP服务器将操作限制在定义的工具上;危险命令被拒绝。
  • 示例:擦除/删除/重定向在命令过滤器和配置应用程序中被阻止。您可以查看@mcp.tools了解实施情况。
  • 始终检查并调整启动配置、凭据和安全组以用于生产。

贡献

欢迎投稿!请按照以下步骤操作:

  • 分叉存储库
  • 创建要素分支
git checkout -b feature-branch-name
  • 提交您的更改
git commit -m "Add new feature"
  • 推你的叉子
git push origin feature-branch-name
  • 打开拉取请求

许可证

Apache 2.0