一句话搞定ENSP自动化:MCP + LLM实战(架构图、工具清单、踩坑全解)

🍃 作者介绍:25 届网络工程,本科时期主攻 Java 后端,如今做 AI 工程落地。
🦅 个人主页:@逐梦苍穹
📕 所属专栏:人工智能
🌻 Gitee:xzl 的人工智能代码仓库
✈ 觉得有用,记得收藏 + 关注;需要完整工程与模板,评论区留「ENSP」获取。

1、前言

如果你做过网络自动化,大概率踩过这些坑:脚本一次能跑过,但二次上线就变脆;CLI 回显经常乱码;一遇到复杂变更就要加班写 Playbook。更别说让非网工同事 “看得懂、用得上”

这篇文章分享一个更自然的解法:把 LLM 的“能理解人话”,和 MCP(Model Context Protocol,模型上下文协议)的“安全工具调用”,接到华为 ENSP 设备上。最终效果:对 AI 说一句话,它会用标准化的“工具”去连设备、执行命令、拿结果、存档留痕。

这套方案来自我的真实项目实践“基于模型上下文协议MCP实现ENSP设备自动化操作”,用更轻松的方式带你从原理走到落地。

读完你将收获:

  • 为什么用 MCP 做网络自动化:它把“会话里的工具调用”标准化,安全可控、可扩展。
  • 一套可复用的最小实现:三种工具覆盖 80% 日常场景(配置、查询、保存)。
  • 从零到一的落地清单:接入、鉴权、编码、容错、可观测,一次性讲清。

2、MCP 是什么,为什么适合网络自动化

MCP 是一种让模型“安全、标准化地”调用外部工具/数据的协议。它解决了 LLM“只能聊天”的局限,把“指令 → 工具调用 → 回显 → 决策”这条链路串成闭环。

  • 标准化:工具接口有描述、有约束,谁接谁用都统一。
  • 可观测:每次调用与返回都在会话链路中,有迹可循,便于审计与回放。
  • 可扩展:新增一个工具不影响其它能力,按需组合。

把 MCP 放进网络自动化,模型就不再“直接下命令”,而是“请求使用某个工具”。你可以对工具做权限、风控、参数校验,风险更可控。


MCP 与一般函数调用的区别

从“函数调用”到“协议化工具调用”,最大的不同在于:

  • 调用对象:不再是单一函数,而是受控的工具集合。
  • 治理能力:请求/响应全链路可观测,可做审计与回放。
  • 扩展性:新增工具不侵入既有能力,按需组合更灵活。

常见调用方式与 MCP 的差异(其一)

常见调用方式与 MCP 的差异(其二)

3、整体架构与数据流

LLM / AI 助手 ⇄ MCP 客户端 ⇄ ensp 服务器(Python) ⇄ SSH(Paramiko) ⇄ 华为设备

  • LLM/助手:把自然语言意图转为“调用哪个工具 + 参数”。
  • ensp 服务器:用 Python 实现 MCP 端点,真正去连设备、跑命令、处理文件。
  • Paramiko:稳定的 SSH 执行通道。

模型上下文协议的核心遵循Client-Server架构(即客户端-服务器架构),其中主机应用程序可以连接到多个MCP服务器,主要架构原理如下图:

MCP 结合 ENSP 的自动化架构设计图

拓扑图总览

跨不同操作系统打通 ENSP 访问与 MCP 总体结合方案

4、三个核心工具:覆盖 80% 场景

  • configure-device:批量执行配置命令(如进入 system-view、创建 VLAN、应用 ACL 等)。
  • show-device-info:执行查询类命令(如 display version / interface brief)。
  • save-to-file:把回显落盘,同时自动识别编码并纠正,避免乱码。

如果调用的工具是configure-device或show-device-info:

5、工程结构与依赖

为了让自动化“跑得稳、能维护”,工程分层清晰、依赖可控是关键:

  • 依赖与环境:记录依赖与版本,确保可复现。
  • 目录结构:代码与配置分离、工具与业务分离。
  • 最小核心:server 初始化、工具注册、调用路由、设备执行。

ensp server 的依赖与版本信息

完整 ensp server 结构

聚焦代码结构的简化视图

6、工具与接口契约

MCP 的强大在于“契约清晰”。以 list_tools 返回的三类工具为例:

  • configure-device:配置命令批量下发。
  • show-device-info:查询命令执行。
  • save-to-file:回显持久化,处理编码。

工具清单的定义与返回结构

配置工具定义

查询工具定义

持久化工具定义

7、调用链路与执行流程

从“意图”到“设备回显”,链路如下:

  1. 初始化与注册:server 启动并注册工具。
  2. 调用路由:根据 name 与 arguments 分派。
  3. 设备执行:通过 SSH 执行命令并收集回显。
  4. 落盘存证:检测编码、写入文件。

server 初始化与装饰器

handle_call_tool 的路由与参数校验

execute_device_commands 核心逻辑

save-to-file 的保存路径

编码检测与回退策略,保障可读可写

server 主程序入口

8、关键实现要点(也是排坑指南)

8.1 SSH 连接要“耐心+容错”

确保连接超时、密钥禁用、Agent 关闭等细节到位,避免环境差异导致连接失败:

ssh_client.connect(

    hostname=ip,

    username=username,

    password=password,

    look_for_keys=False,

    timeout=20,  # 增加连接超时时间

    allow_agent=False

)

最常用的python第三方库是paramiko,利用它来对网络设备进行SSH远程连接,下面是使用paramiko库ssh连接网络设备的示例代码:

8.2 命令执行要“等一等”

网络设备回显不是即时的。适当 sleep 并用 recv_ready() 拉取缓冲,避免丢字:

for cmd in commands:

    command_shell.send(f"{cmd}\n")

    # 增加等待时间,确保命令执行完成

    time.sleep(2)

    while command_shell.recv_ready():

        output += command_shell.recv(65535).decode("utf-8", errors="ignore")

8.3 回显要“能落盘,还不能乱码”

很多设备回显带有本地化编码。这里用 chardet 检测编码并选择最优写入,必要时回退常见编码:

# 使用 chardet 检测编码

detected = chardet.detect(content_bytes)

encoding = detected['encoding']

confidence = detected['confidence']

if encoding:

    try:

        # 如果是字节,使用检测到的编码解码

        if not isinstance(content, str):

            content = content_bytes.decode(encoding)

9、上手实战:5 分钟跑通一条“能说人话”的变更

场景:在 10.0.0.1 上创建 VLAN 10 并命名为 APP,保存查询结果。

  1. 在聊天里直接说:
    • “在 10.0.0.1 上创建 VLAN 10,命名 APP,并展示接口简表,然后把回显保存到桌面。”
  2. 模型会顺序调用:
    • configure-device,参数形如:
{

  "ip": "10.0.0.1",

  "username": "admin",

  "password": "******",

  "commands": [

    "system-view",

    "vlan 10",

    "name APP",

    "quit",

    "save force"

  ]

}
  • show-device-info,参数:{“command”: “display interface brief”, …}
  • save-to-file,参数:{“content”: “<回显>”, “file_path”: “~/Desktop/ensp_result.txt”}

就这样,一次自然语言交互完成了配置、校验与归档。

10、多客户端接入与演示(Claude Desktop / Cline)

上层接入决定了体验与推广效率。这里展示两类典型客户端:

Claude Desktop:官方客户端,天然适配 MCP 生态

Claude Desktop 识别到的本地 MCP Tools

调用 configure-device 自动写入设备配置

调用 show-device-info 查询设备信息

调用 save-to-file 将回显持久化到本地文件

一次对话内组合调用多个工具

生成并写入的文件内容

11、Cline 自动纠错与多工具调用演示

以 Cline 为例,展示“失败自纠错、按需复用工具”的端到端过程:

插件识别任务背景

输入的自然语言需求

大模型给出初步计划与工具选择

首次写配置

失败后自动修正命令并重试

查询设备信息核验配置结果

返回有效回显

将回显保存到目标路径

一次端到端调用闭环完成

配置DeepSeek的API接口:

12、常见问题与建议

当找不到对应工具时的返回路径,便于定位参数/权限问题

  • 认证失败:确认用户名/密码、设备本地/AAA 策略与 SSH 打开状态。
  • SSH 异常:网络不通、算法协商失败、会话上限等因素要逐一排查。
  • 回显乱码:优先自动检测;若仍异常,手动尝试 utf-8/gbk/gb2312/utf-16 回退策略。
  • 长批量命令:适当提高 sleep,或按逻辑分段下发,避免回显截断。
  • 最小权限:为工具账户分配最小化权限与命令白名单,降低误操作风险。

13、和传统脚本/平台相比,优势在哪里?

  • 交互更自然:非网工也能“说人话办事”。
  • 治理更可控:工具级权限、参数校验、调用审计,天然适配生产规范。
  • 扩展更简单:新增一个工具就是一个新能力,不会牵动全局脚本。

14、还能怎么进化?

  • 流式回显与多轮纠错:长命令执行过程可边看边纠错。
  • 多厂商支持:抽象命令 DSL,适配不同网络设备。
  • 灰度/审批流:把高危命令接入审批或沙箱环境验证后再上生产。

15、性能与稳定性建议

  • 连接复用与并发:按任务类型复用会话,限制并发,防止设备侧资源耗尽。
  • 自适应等待:基于回显标识符/提示符优化 sleep,减少固定等待带来的抖动。
  • 超时与重试:区分连接超时、执行超时、写盘超时,分别设置重试与告警阈值。
  • 回显截断保护:循环 recv_ready() 拉满缓冲,必要时按分页符拼接。
  • 可观测性:在 MCP 调用链路记录关键信息(工具名、参数摘要、耗时、结果摘要),便于 SRE 观测与审计。

16、安全治理与审计

  • 白名单与最小权限:对工具名、命令集合做白名单;账户最小授权。
  • 敏感操作分级:保存配置、重启等高危操作走审批或沙箱验证。
  • 参数校验与脱敏:IP、用户名、路径等参数校验;日志中对口令等敏感信息脱敏。
  • 审计回放:保留 MCP 调用链路与设备回显摘要,支持按工单检索与回放。

17、部署清单(速查)

  1. 准备运行环境,安装依赖并配置 SSH 可达。
  2. 启动 ensp server,确认三类工具可被 list_tools 发现。
  3. 配置客户端(如 Claude Desktop / Cline)加载 MCP,连通本地 server。
  4. 跑通“配置 → 查询 → 落盘”的最小闭环,并固化参数模板与权限策略。

18、结语

网络自动化的难点,不只是“写脚本”,而是“把复杂能力包装成安全、好用、可治理的服务”。MCP 提供了这个“服务壳”。配合 ENSP 与少量 Python 代码,就能让自动化从“工程师能用”,走向“团队都能用”。

如果你正在推进网络自动化,不妨从这套最小实现开始:先用一次真实变更把链路跑通,再逐步把工具库做厚。觉得有帮助,欢迎收藏与转发;需要完整工程与模板,评论区留「ENSP」,我打包发你。


附:精选配图

为便于阅读,本文已将关键配图穿插到对应小节。这里仅保留少量示意图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逐梦苍穹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值