LangChain+DeepSeek实现华为交换机自然语言运维

发布时间:2026/6/23 7:51:27
LangChain+DeepSeek实现华为交换机自然语言运维
1. 项目概述让运维指令“开口说话”用自然语言直连华为交换机你有没有过这样的时刻深夜收到告警说某台华为S5735交换机的端口流量突增需要立刻查VLAN配置、看STP状态、确认端口是否被误shutdown——但你手边只有手机没有CRT也没有跳板机更没法打开ENSP模拟器。这时候如果能直接在微信里打一行字“帮我看看192.168.10.201上GigabitEthernet0/0/23的当前状态和最近5分钟的CRC错误计数”然后自动返回带高亮的关键字段结果是不是比翻命令手册快十倍这正是本项目要落地的事不写一行原始Telnet/SSH脚本不硬编码命令拼接逻辑而是用LangChain构建一个语义理解层把“人话”精准翻译成华为交换机可执行的CLI指令流并安全、稳定、可审计地完成登录、执行、解析、反馈闭环。核心关键词是LangChain、DeepSeek、华为、交换机、自然语言——它不是玩具Demo而是我在某省电力公司二级骨干网实际部署过的轻量级运维助手已稳定运行14个月日均处理37条自然语言指令覆盖华为S5700/S6720/S5735系列适配VRPv5/v8双协议栈。它解决的不是“能不能做”的技术验证问题而是“敢不敢在生产环境放行”的工程可靠性问题命令生成零幻觉、会话管理防中断、输出解析抗格式漂移、异常响应可追溯。如果你是网络工程师、DevOps或SRE正被重复性CLI操作拖慢响应速度或者你是AI应用开发者想验证大模型在垂直硬件控制场景的真实能力边界——这篇就是为你写的实操笔记所有代码、配置、避坑点都来自真实机房不是Jupyter Notebook里的理想国。2. 整体设计与思路拆解为什么必须用LangChainDeepSeek而不是直接调API2.1 拒绝“大模型直连设备”的三大致命陷阱很多初学者看到标题第一反应是“直接用DeepSeek API发个prompt让它返回‘display interface GigabitEthernet0/0/23’不就完了”——我试过而且踩得极深。去年在山东某地市政务云机房我们曾用纯Prompt Engineering方式让DeepSeek-v2生成华为命令结果在第3次批量巡检时触发了严重事故模型将“检查所有up状态的端口”错误理解为“shutdown所有down状态的端口”自动生成了27条shutdown指令并全部执行。这不是模型能力问题而是架构缺陷。根本原因在于三个不可绕过的工程鸿沟语义鸿沟自然语言中的“查端口”在VRP中对应至少5个命令display interface、display transceiver diagnosis、display eth-trunk、display port-security、display lldp neighbor而模型无法自主判断上下文意图。人工写Prompt可以限定但运维需求千变万化不可能为每个场景预设模板。协议鸿沟交换机CLI不是REST API它没有标准Schema。display ip interface brief的输出格式在VRPv5和v8中存在字段顺序偏移、空格数量差异、甚至中文提示符乱码如HUAWEIvs[HUAWEI]纯文本匹配极易失效。我见过最离谱的案例模型生成的正则表达式rUP\s\d在v5中匹配成功在v8中因多了一个制表符\t而全盘崩溃。会话鸿沟真实运维需要状态保持。比如先system-view进入系统视图再interface GigabitEthernet0/0/23最后display this——这三个命令必须在同一个SSH会话中连续执行。而HTTP API调用是无状态的每次请求都是新会话无法维持CLI上下文。LangChain不是银弹但它是目前唯一能系统性缝合这三道鸿沟的框架。它的核心价值在于分层解耦用LLM只负责最高层的“意图识别与指令规划”用专门的Tool工具封装底层协议细节用Agent智能体协调多步会话流程。DeepSeek在这里的角色非常明确——它不是执行者而是“首席调度官”只做两件事1听懂用户说的“帮我把10.1.1.100这个IP从VLAN100挪到VLAN200”背后的真实操作序列2把序列分解成get_vlan_config、modify_vlan_member、verify_vlan_change三个原子动作。真正的登录、命令发送、输出解析全部交给经过千次压测的专用Tool模块。这种设计让模型能力缺陷被严格隔离在决策层不会污染执行层。2.2 为什么选DeepSeek而非其他开源模型当前可本地部署的中文大模型中DeepSeek系列特别是v4-pro在结构化指令生成任务上表现突出这是它被选中的决定性因素。我们对比了Qwen2-7B、GLM-4-9B、Phi-3-mini在相同测试集上的表现测试项DeepSeek-v4-proQwen2-7BGLM-4-9BPhi-3-mini华为命令语法准确率100条98.2%86.5%79.3%62.1%多步骤指令分解成功率含system-view嵌套94.7%73.8%65.2%41.6%中文指令歧义识别如“关掉端口”指shutdown还是undo shutdown91.3%68.9%57.4%33.2%VRP专有名词召回如port-group、qos-profile、traffic-policy96.8%71.2%62.5%38.7%数据来源我们在华为S5735-S24交换机上构建的200条真实运维指令测试集覆盖配置、查询、故障排查三类场景。DeepSeek的优势源于其训练数据中大量网络设备文档和华为官方eNSP实验手册的深度注入。特别值得注意的是v4-pro对VRP命令的动词-宾语结构泛化能力极强。例如输入“让这个端口变成access模式”Qwen2会生成port link-type access正确但遇到“把这个接口设置成trunk并允许VLAN10和20通过”时Qwen2常漏掉port trunk allow-pass vlan 10 20中的allow-pass关键字而DeepSeek-v4-pro的完整率稳定在95%以上。这不是参数微调的结果而是基座模型对网络领域语义空间的原生建模优势。2.3 架构全景图四层流水线如何协同工作整个系统采用清晰的四层流水线设计每层职责单一接口明确定义[自然语言输入] ↓ ## 1. 意图识别层LangChain Agent DeepSeek - 使用ReAct Agent框架强制模型按Thought/Action/Action Input/Observation循环思考 - Action Space严格限定为3个Toolget_device_info、execute_cli_command、parse_cli_output - 所有Action Input必须是JSON Schema校验后的结构化参数杜绝自由文本 ## 2. 工具调度层LangChain Tool Wrapper - 封装Paramiko SSH连接池支持华为交换机特有的VTY会话保持机制 - 内置VRP命令白名单引擎自动过滤危险命令如reboot、format、delete - 实现命令执行超时熔断默认15秒和重试策略最多2次 ## 3. 协议适配层华为VRP专用Driver - 解析VRPv5/v8双版本提示符HUAWEI / [HUAWEI] / HUAWEI-1 - 自动处理中文乱码检测终端编码GBK/UTF-8并动态转码 - 输出清洗管道移除ANSI颜色码、折叠长行、标准化空格、提取关键字段 ## 4. 结果呈现层MarkdownTable渲染 - 将结构化结果如端口状态表自动转为GitHub风格表格 - 关键数值高亮UP状态标绿DOWN标红CRC错误标黄 - 附带执行元信息设备IP、执行时间、命令耗时、会话ID这个架构的关键创新点在于Tool的强约束设计。我们没有让模型直接生成字符串命令而是定义了execute_cli_command这个Tool的输入Schema{ device_ip: string, required, format: ipv4, command: string, required, enum: [display interface, display vlan, display stp brief, ...], args: object, optional, schema varies by command }当模型试图生成display interface GigabitEthernet0/0/23时Agent框架会强制它调用execute_cli_command并传入{device_ip: 192.168.10.201, command: display interface, args: {interface: GigabitEthernet0/0/23}}。这种设计彻底规避了模型自由发挥导致的语法错误同时为后续审计埋下伏笔——所有执行记录都带有结构化参数可直接入库分析。3. 核心细节解析与实操要点华为交换机CLI交互的魔鬼细节3.1 华为VRP会话状态管理为什么不能用普通SSH库绝大多数Python SSH库如paramiko默认将每次exec_command()视为独立会话这在华为交换机上会引发灾难性后果。真实场景中我们必须维持一个持久化VTY会话原因有三权限层级嵌套华为CLI有严格的视图切换机制。用户视图HUAWEI下无法执行system-view系统视图[HUAWEI]下无法执行interface接口视图[HUAWEI-GigabitEthernet0/0/23]下无法执行display this。普通SSH的exec_command()每次都在用户视图重启导致多步配置必然失败。会话超时机制华为交换机默认VTY空闲超时为10分钟但超时后不会主动断开连接而是进入“假死”状态。此时发送命令无响应recv()阻塞普通库无法感知。中文提示符乱码华为交换机默认使用GBK编码而paramiko默认UTF-8。若不显式设置termvt100和encodinggbkHUAWEI会显示为HU?WEI导致正则匹配完全失效。我们的解决方案是自研VRPConnection类它继承paramiko.SSHClient但重写了核心交互逻辑class VRPConnection: def __init__(self, host, username, password, port22): self.client paramiko.SSHClient() self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) self.client.connect(host, port, username, password, look_for_keysFalse, allow_agentFalse, termvt100, encodinggbk) # 关键强制终端类型和编码 # 获取交互式shell并禁用回显 self.shell self.client.invoke_shell() self.shell.settimeout(30) # 全局超时 self._wait_for_prompt() # 等待初始提示符 def _wait_for_prompt(self): 智能等待提示符兼容VRPv5/v8双版本 buffer start_time time.time() while time.time() - start_time 10: if self.shell.recv_ready(): chunk self.shell.recv(1024).decode(gbk, errorsignore) buffer chunk # 同时匹配两种提示符HUAWEI 和 [HUAWEI] if re.search(r\w, buffer) or re.search(r\[\w\], buffer): return True time.sleep(0.1) raise TimeoutError(fTimeout waiting for prompt on {self.host}) def send_command(self, command, expect_promptTrue): 发送命令并返回输出自动处理换行和提示符 self.shell.send(command \n) buffer start_time time.time() while time.time() - start_time 15: # 命令执行超时15秒 if self.shell.recv_ready(): chunk self.shell.recv(1024).decode(gbk, errorsignore) buffer chunk # 当expect_prompt为True时等待提示符出现才返回 if expect_prompt and (re.search(r\w, buffer) or re.search(r\[\w\], buffer)): return self._clean_output(buffer) time.sleep(0.05) raise TimeoutError(fCommand timeout: {command}) def _clean_output(self, raw_output): 深度清洗VRP输出 # 移除ANSI转义序列 cleaned re.sub(r\x1b\[[0-9;]*m, , raw_output) # 移除回车符\r保留换行\n cleaned cleaned.replace(\r, ) # 折叠连续空格为单个空格 cleaned re.sub(r , , cleaned) # 移除首尾空白行 cleaned \n.join(line.strip() for line in cleaned.split(\n) if line.strip()) return cleaned这个类的关键设计点在于_wait_for_prompt()方法——它不依赖固定字符串匹配而是用正则同时捕获HUAWEI和[HUAWEI]两种格式确保在VRPv5老设备和v8新设备上都能可靠工作。实测中该类在华为S5735-S24VRPv8.190和S5700-24TP-SIVRPv5.170上100%通过会话保持测试。3.2 LangChain Tool的华为专用封装安全与鲁棒性如何保障LangChain的Tool是连接LLM与物理世界的桥梁其设计直接决定系统生死。我们为华为交换机定制的Tool包含三层防护第一层命令白名单引擎静态防护我们构建了华为VRP命令的三级白名单体系L1基础命令集100%允许display version、display device、display interface brief等只读查询命令。L2受限命令集需参数校验display interface、display vlan、display stp等要求args中必须包含interface或vlan_id等具体标识禁止无参数调用。L3禁用命令集永久拦截reboot、format、delete、reset saved-configuration等高危命令任何尝试调用立即返回{error: Command forbidden by security policy}。白名单以JSON Schema形式定义由Pydantic校验from pydantic import BaseModel, Field, validator class DisplayInterfaceArgs(BaseModel): interface: str Field(..., patternr^[a-zA-Z][0-9/]$) # 如GigabitEthernet0/0/23 verbose: bool False class ExecuteCliCommandInput(BaseModel): device_ip: str Field(..., patternr^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$) command: str Field(..., enum[display interface, display vlan, display stp brief]) args: dict Field(default{}) validator(args) def validate_args(cls, v, values): if values[command] display interface: return DisplayInterfaceArgs(**v) return v第二层会话熔断机制动态防护每个Tool调用前系统会检查当前会话状态若上次执行耗时超过10秒自动重建SSH连接避免假死会话若连续2次执行失败对该设备IP启动5分钟冷却期所有执行记录写入SQLite数据库包含device_ip、command、start_time、end_time、statussuccess/error、output_length。第三层输出解析抗漂移设计容错防护VRP输出格式极易因版本、补丁、终端宽度变化。我们采用多策略解析引擎主策略正则锚定法——对关键字段如端口状态、VLAN ID、CRC错误用强约束正则如rCurrent state\s*:\s*(\w)备策略位置偏移法——当正则失败时按列位置提取华为输出通常是固定列宽如第3列第5行必为端口速率兜底策略语义模糊匹配——用Sentence-BERT计算输出片段与预设关键词UP、DOWN、CRC的相似度取最高分作为结果。实测表明该引擎在VRPv5.170补丁SPC100和v8.190补丁SPC300上对display interface命令的解析准确率从单策略的78%提升至99.2%。3.3 DeepSeek模型微调与提示工程让大模型真正“懂”华为即使选用DeepSeek-v4-pro开箱即用仍无法满足生产要求。我们进行了两项关键优化提示工程ReAct Agent的华为专属System Prompt我们为Agent设计了长达287字的System Prompt强制模型遵循华为运维规范你是一名资深华为网络工程师正在为电力行业客户开发智能运维助手。请严格遵守 1. 所有CLI命令必须使用华为VRPv8标准语法禁止使用思科/锐捷命令 2. 配置类操作必须分三步a) 进入系统视图system-view b) 进入目标视图interface/vlan c) 执行配置命令 3. 查询类操作优先使用display命令禁止使用undisplay或show非华为命令 4. 当用户指令模糊时如“检查端口”必须追问具体设备IP和端口编号禁止猜测 5. 输出必须为JSON格式{thought: ..., action: ..., action_input: {...}} 6. 绝对禁止生成reboot/format/delete等高危命令发现即返回{error: Security violation}。这个Prompt的关键在于将领域知识硬编码为约束条件。测试显示未加此Prompt时模型生成show interface思科命令的概率为12.3%加入后降为0%。轻量微调LoRA适配华为术语空间我们收集了327条真实华为工单指令来自某省电力公司2023年运维日志用QLoRA对DeepSeek-v4-pro进行微调数据格式{instruction: 把10.1.1.100这个IP从VLAN100挪到VLAN200, input: , output: {action: execute_cli_command, action_input: {device_ip: 10.1.1.100, command: display vlan, args: {vlan_id: 100}}}}微调参数rank8, alpha16, dropout0.1, epochs3效果在华为专用测试集上指令分解F1值从91.7%提升至96.3%尤其改善了port-group、traffic-policy等专业术语的召回。提示微调并非必须但能显著降低Prompt长度和推理延迟。我们实测发现微调后Agent的平均思考步数从4.2步降至2.8步这对实时性要求高的场景至关重要。4. 实操过程与核心环节实现从零部署一个可运行的华为运维助手4.1 环境准备与依赖安装避开华为设备连接的常见坑部署环境必须满足三个硬性条件Python版本锁定、SSH库版本精确、华为设备基础配置合规。以下是我在线上环境反复验证的最小可行配置Python环境必须3.9推荐3.10.12# 创建隔离环境 python3.10 -m venv langchain-huawei-env source langchain-huawei-env/bin/activate # 安装核心依赖注意版本 pip install --upgrade pip pip install langchain0.1.20 langchain-community0.0.38 langchain-core0.1.49 pip install deepseek-rag0.1.1 # DeepSeek官方SDK pip install paramiko3.4.0 # 关键3.4.0修复了VRPv8的编码bug pip install pycryptodome3.18.0 # paramiko依赖 pip install pydantic2.6.4 # Schema校验必需 pip install sentence-transformers2.2.2 # 输出解析用注意paramiko 3.4.0是分水岭版本。3.3.x在VRPv8.190上会出现UnicodeDecodeError: gbk codec cant decode byte 0x80因为旧版未正确处理华为交换机返回的GBK扩展字符。必须指定3.4.0。华为交换机前置配置缺一不可在目标交换机上执行以下命令否则SSH连接必然失败# 开启SSH服务VRPv5/v8通用 [HUAWEI] stelnet server enable [HUAWEI] ssh server enable # 创建专用运维账号禁止console登录仅限SSH [HUAWEI] local-user aiops password irreversible-cipher H123456 [HUAWEI] local-user aiops service-type ssh [HUAWEI] local-user aiops level 3 # 赋予最高权限3级 # 配置VTY线路关键 [HUAWEI] user-interface vty 0 4 [HUAWEI-ui-vty0-4] authentication-mode aaa [HUAWEI-ui-vty0-4] protocol inbound ssh [HUAWEI-ui-vty0-4] idle-timeout 30 0 # 30分钟空闲超时 # 可选关闭中文提示符乱码VRPv8.190 [HUAWEI] language-mode english # 强制英文提示符彻底规避编码问题实操心得language-mode english是隐藏王牌。很多工程师坚持用中文界面但实际生产中英文提示符HUAWEI比中文华为更稳定且所有正则匹配无需考虑GBK编码转换。我们在12台不同型号交换机上测试开启后连接成功率从83%提升至100%。4.2 核心代码实现LangChain Agent与华为Tool的完整对接以下是可直接运行的核心代码已脱敏替换IP和密码即可# huawei_agent.py import os import json import time import paramiko from typing import Dict, Any, Optional from pydantic import BaseModel, Field, validator from langchain_core.tools import BaseTool from langchain.agents import AgentExecutor, create_react_agent from langchain import hub from langchain_community.chat_models import ChatDeepSeek from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.messages import HumanMessage, AIMessage # 华为VRP专用Tool定义 class VRPConnection: # 此处省略前面已定义的VRPConnection类代码完全复用 pass class ExecuteCliCommandInput(BaseModel): device_ip: str Field(..., patternr^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$) command: str Field(..., enum[display interface, display vlan, display stp brief, display ip interface]) args: dict Field(default{}) class ExecuteCliCommandTool(BaseTool): name execute_cli_command description Execute a CLI command on Huawei switch. Input must be JSON with device_ip, command, and optional args. args_schema ExecuteCliCommandInput def _run(self, device_ip: str, command: str, args: Optional[Dict[str, Any]] None) - str: try: # 从环境变量读取凭据生产环境严禁硬编码 username os.getenv(HUAWEI_USER, aiops) password os.getenv(HUAWEI_PASS, H123456) # 初始化连接带重试 for attempt in range(3): try: conn VRPConnection(device_ip, username, password) break except Exception as e: if attempt 2: raise e time.sleep(1) # 构建命令字符串 cmd_str command if args and interface in args: cmd_str f {args[interface]} elif args and vlan_id in args: cmd_str f {args[vlan_id]} # 执行命令 output conn.send_command(cmd_str) conn.close() # 返回结构化结果 return json.dumps({ device_ip: device_ip, command: cmd_str, output: output[:2000], # 截断过长输出 status: success }, ensure_asciiFalse) except Exception as e: return json.dumps({ device_ip: device_ip, command: command, error: str(e), status: error }, ensure_asciiFalse) # LangChain Agent初始化 def create_huawei_agent(): # 加载DeepSeek模型需提前申请API Key llm ChatDeepSeek( modeldeepseek-v4-pro, api_keyos.getenv(DEEPSEEK_API_KEY), base_urlhttps://api.deepseek.com/v1 ) # 定义Tool列表 tools [ExecuteCliCommandTool()] # 加载ReAct提示模板华为定制版 prompt ChatPromptTemplate.from_messages([ (system, 你是一名资深华为网络工程师...此处插入3.3节的287字System Prompt), (human, {input}), MessagesPlaceholder(agent_scratchpad), ]) # 创建Agent agent create_react_agent(llm, tools, prompt) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue) return agent_executor # 主执行函数 if __name__ __main__: # 设置环境变量生产环境应使用Secret Manager os.environ[HUAWEI_USER] aiops os.environ[HUAWEI_PASS] H123456 os.environ[DEEPSEEK_API_KEY] sk-xxx # 替换为你的Key # 创建Agent agent create_huawei_agent() # 测试指令 result agent.invoke({ input: 帮我查看192.168.10.201上GigabitEthernet0/0/23的当前状态和错误计数 }) print(json.dumps(result, indent2, ensure_asciiFalse))关键参数说明与计算依据idle-timeout 30 0华为VTY空闲超时设置。30分钟是平衡安全与体验的黄金值——短于15分钟会导致频繁重连长于45分钟增加未授权访问风险。计算依据电力行业《网络安全运维规范》要求会话超时≤30分钟。output[:2000]截断VRPdisplay interface完整输出可达15KB但关键信息99%集中在前2KB。截断既降低网络传输开销又避免LLM处理超长文本导致的OOM。实测显示2000字节覆盖了端口状态、速率、双工、CRC/输入错误等所有核心字段。重试机制3次基于泊松分布计算华为交换机SSH连接失败率约2.3%实测1000次连接3次重试可将最终失败率降至0.0001%以下满足金融级可用性要求。4.3 首次运行调试指南如何快速定位90%的连接失败首次运行失败90%源于连接层问题。按以下顺序排查可节省80%调试时间步骤1手动SSH验证绕过所有代码# 用完全相同的凭据手动连接 ssh -o StrictHostKeyCheckingno -o UserKnownHostsFile/dev/null aiops192.168.10.201 # 输入密码后应看到HUAWEI提示符然后执行 HUAWEI display version HUAWEI display interface GigabitEthernet0/0/23✅ 成功说明设备配置正确问题在代码层❌ 失败Connection refused检查stelnet server enable是否执行❌ 失败Permission denied检查local-user aiops service-type ssh是否配置❌ 失败Timeout检查防火墙是否放行TCP 22端口步骤2Paramiko连接测试最小化代码# test_ssh.py import paramiko client paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(192.168.10.201, 22, aiops, H123456, look_for_keysFalse, allow_agentFalse, termvt100, encodinggbk) shell client.invoke_shell() shell.send(display version\n) time.sleep(1) print(shell.recv(4096).decode(gbk)) client.close()✅ 成功说明paramiko配置正确❌ 失败UnicodeDecodeError确认paramiko版本为3.4.0且encodinggbk❌ 失败No existing session检查user-interface vty是否启用protocol inbound ssh步骤3Agent执行日志分析启用verboseTrue后观察Agent的Thought链Thought: 我需要先获取设备基本信息... Action: execute_cli_command Action Input: {device_ip: 192.168.10.201, command: display version} Observation: {error: Command timeout: display version} Thought: 命令超时可能设备无响应...观察Observation字段若出现Command timeout说明VRPConnection的send_command()超时需检查time.sleep(0.05)间隔是否过短网络延迟高时调至0.1若Observation为空说明shell.recv()未收到任何数据大概率是termvt100未生效尝试改为termxterm实操心得我遇到最隐蔽的Bug是华为交换机的screen-length 0 temporary未配置。默认每屏24行display interface输出被暂停recv()永远等不到提示符。解决方案是在VRPConnection.__init__()末尾添加self.shell.send(screen-length 0 temporary\n) self._wait_for_prompt()5. 常见问题与排查技巧实录线上环境踩过的12个坑5.1 华为设备侧问题那些让你怀疑人生的“设备特性”问题现象根本原因解决方案影响范围display interface输出中端口名被截断为GigabitE...华为交换机默认终端宽度为80字符长接口名自动缩写在VRPConnection初始化后执行terminal width 200命令S5700/S5735全系列HUAWEI提示符偶尔变成HUAWEI-1华为多用户登录时自动添加会话ID后缀正则匹配失效修改_wait_for_prompt()正则为r\w(-\d)?VRPv8.180所有版本执行system-view后display this返回空内容display this仅在配置视图有效用户视图下无输出在Tool中强制所有配置类命令走system-view→interface→display this三步流所有VRP版本display stp brief在某些补丁版本中字段顺序错乱华为补丁SPC200修改了STP输出列顺序原正则失效启用多策略解析引擎的位置偏移法按列索引提取第2列端口第4列状态