ACI架构深度解析:从EPG到Contract的SDN策略驱动实践
1. ACI 到底是个什么东西第一次听到 ACI 这个词很多人会以为是某个新出的前端框架或者云服务缩写。其实在数据中心和网络工程圈子里ACI 指的是Application Centric Infrastructure中文一般叫“以应用为中心的基础设施”。它是某家主流网络设备厂商推出的一套软件定义网络SDN架构方案核心思路是把网络策略的制定单位从传统的“IP 地址、VLAN、端口”换成“应用”本身。说白了以前我们配网络脑子里想的是一台台交换机、一条条 ACL、一个个 VLAN 号。而 ACI 想让你换个脑子你先描述“这个应用需要哪些服务、谁能访问谁、走什么路径”剩下的底层网络配置由控制器自动算出来下发。这个控制器就是 ACI 的大脑叫APICApplication Policy Infrastructure Controller。这套东西解决的核心问题是大规模数据中心里网络策略跟业务应用严重脱节。传统网络里加一个新业务可能要改十几台交换机的配置改完还得祈祷别把别的业务搞挂。ACI 把策略集中到 APIC 上用一套对象模型来描述改一处就全局生效。适合谁来了解如果你是数据中心网络运维、云平台工程师、或者正在做多租户隔离方案的人ACI 是绕不开的一个话题。哪怕你所在的环境不用它理解它的“策略驱动”思路对你设计任何网络自动化方案都有参考价值。我下面会从整体设计、核心对象、实操流程、踩坑经验几个角度把 ACI 拆开讲清楚。2. 整体设计与思路拆解2.1 为什么要把“应用”作为策略中心传统网络配置的粒度是设备级的。你要在核心交换机上写一条 ACL得先想清楚源 IP、目的 IP、端口号然后登录设备敲命令。问题在于业务部门跟你说“我要上一个新系统”你根本不知道这个系统对应哪些 IP。你得等服务器上架、IP 分配完、应用部署好才能回头配网络。这个顺序是反的。ACI 的做法是反过来先定义应用轮廓Application Profile里面包含这个应用需要的所有网络连接关系。比如“Web 层能访问 App 层App 层能访问 DB 层外部只能访问 Web 层的 443 端口”。这些描述不依赖具体 IP而是用EPGEndpoint Group来抽象。EPG 可以理解为一组具有相同网络策略的终端集合比如“Web 服务器组”。这里的关键转变是策略从“IP 到 IP”变成了“组到组”。组里的成员可以动态变化策略本身不用改。2.2 底层靠什么实现策略自动下发APIC 把用户定义的策略翻译成底层交换机的配置靠的是VXLAN隧道和COOP协议。每台接入交换机Leaf会把本地终端的 MAC、IP 信息通过 COOP 上报给 APIC 和 Spine 交换机。Spine 相当于一个分布式数据库知道哪个终端挂在哪个 Leaf 上。当 Web 层要访问 App 层时Leaf 交换机查一下本地有没有目的终端的表项。如果没有就封装成 VXLAN 包发给 SpineSpine 再转发给正确的 Leaf。整个过程对服务器完全透明服务器看到的还是普通以太网帧。这种设计的好处是终端可以在任意 Leaf 下接入IP 地址不用变策略自动跟随。虚拟机迁移、容器漂移都不会导致策略失效。坏处是 Spine 层需要维护全网的终端表项规模特别大时对硬件资源有要求。2.3 跟传统 VLAN 方案的对比对比维度传统 VLAN 方案ACI 方案策略单位VLAN ACLEPG Contract配置方式逐台设备 CLIAPIC 集中定义终端移动需重新配 VLAN自动跟随多租户隔离靠 VLAN 划分靠 Tenant VRF自动化能力弱依赖脚本强原生 API学习曲线平缓陡峭这张表不是要证明 ACI 全面优于传统方案。实际上如果你只有几十台服务器、一个业务系统传统 VLAN 方案更简单直接。ACI 的价值在规模上——当你有上千台虚拟机、几十个业务系统、多个租户需要隔离时集中策略管理的优势才会显现。3. 核心对象模型与实操要点3.1 从 Tenant 到 EPG 的层级关系ACI 的对象模型是一棵树根是Tenant租户。Tenant 下面可以分VRF虚拟路由转发实例、Bridge Domain桥接域、Application Profile应用轮廓。Application Profile 下面才是EPG。EPG 里挂的是具体的终端可以是物理服务器、虚拟机、容器。这个层级不是随便设计的。Tenant 对应一个业务单元或客户VRF 对应一个独立的路由表Bridge Domain 对应一个二层广播域。这样设计的好处是不同 Tenant 之间默认完全隔离连路由都不通。如果你需要两个 Tenant 互通必须显式配置共享服务或外部连接。新手最容易犯的错把所有东西都塞在一个 Tenant 里。这样虽然省事但失去了多租户隔离的意义。建议至少按业务系统分 Tenant哪怕初期只有一个业务。3.2 Contract 才是策略的核心EPG 本身不定义“谁能访问我”它只定义“我包含哪些终端”。真正的访问控制靠Contract契约。Contract 由Provider EPG和Consumer EPG组成。Provider 提供某种服务Consumer 消费这个服务。Contract 里定义FilterFilter 里才是具体的端口和协议。举个例子Web EPG 作为 Provider提供一个 ContractFilter 允许 TCP 443。App EPG 作为 Consumer绑定这个 Contract。这样 App 层就能访问 Web 层的 443 端口。反过来Web 层要访问 App 层需要另一个 ContractProvider 是 App EPGConsumer 是 Web EPG。这种“双向分别定义”的方式一开始会觉得啰嗦但它强制你理清每个方向的访问关系。传统 ACL 里经常出现“源和目的写反了”的低级错误在 Contract 模型里基本不会发生因为方向是由 Provider/Consumer 角色决定的。3.3 实操中必须注意的几个参数Bridge Domain 的 ARP 泛洪设置默认情况下BD 内的 ARP 请求会泛洪到所有 Leaf。如果 BD 里终端很多泛洪会消耗大量带宽。可以开启ARP Flooding的优化选项让 APIC 代答 ARP。但要注意如果终端有静态 ARP 或者特殊网络行为代答可能导致问题。VRF 的 Route Leaking不同 VRF 之间默认不通。如果确实需要互通比如共享服务 VRF 要被多个业务 VRF 访问需要配置 Route Leaking。这个操作在 APIC 界面上叫“Shared Services”底层是通过在 Leaf 上导入导出路由实现的。配置时要注意路由环路建议只做单向导入。EPG 的静态路径绑定物理服务器接入时需要把 EPG 绑定到具体的 Leaf 端口和 VLAN。这里有个坑同一个端口不能同时绑定两个不同 EPG 的相同 VLAN。如果你需要在一个端口上跑多个 EPG必须用不同的 VLAN 封装或者改用 VMM Domain 方式接入。4. 完整实操流程与配置示例4.1 初始化 APIC 集群APIC 通常三台起步组成集群。每台 APIC 需要配置管理 IP、集群 IP、以及跟 Spine 互联的接口。初始化时通过 CLI 或者初始 GUI 完成。# 通过 CLI 配置 APIC 基础参数示例 adminapic1:~ configure apic1# setup # 按提示输入管理 IP、网关、集群名称等 # 三台 APIC 的集群名称必须一致三台 APIC 都配置完后登录任意一台的 GUI在 System Controllers 里应该能看到三台都是“Fully Fit”状态。如果有一台显示“Not Fit”检查集群 IP 是否互通、时间是否同步。时间同步非常重要。APIC 集群内部用证书认证时间偏差超过几分钟就会导致节点掉出集群。建议所有 APIC 和交换机都指向同一个 NTP 源。4.2 创建 Tenant 和 VRF登录 APIC GUI路径是 Tenants Add Tenant。输入 Tenant 名称比如“Prod”。然后在 Tenant 下面创建 VRF名称比如“Prod-VRF”。VRF 里需要设置Policy Control Enforcement默认是“Enforced”表示策略强制生效。如果设为“Unenforced”所有流量都放行一般只在排障时临时用。创建 Bridge Domain 时需要绑定一个 VRF。BD 的L3 Configuration里可以开启“Limit IP Learning To Subnet”防止学习到不该学的 IP。子网网关地址也在这里配比如“10.1.1.1/24”。4.3 定义 Application Profile 和 EPG在 Tenant 下面创建 Application Profile比如“WebApp”。然后在里面创建 EPG比如“Web-EPG”、“App-EPG”、“DB-EPG”。每个 EPG 需要绑定一个 Bridge Domain。如果三个 EPG 在同一个 BD 里它们默认二层互通。如果要隔离需要分到不同 BD。EPG 创建完后需要把终端挂进去。两种方式静态路径适用于物理服务器。选择 Leaf 和端口指定 VLAN。比如 Leaf101 的 eth1/10VLAN 100。VMM Domain适用于虚拟机。需要先集成虚拟化管理平台然后 EPG 绑定 VMM Domain虚拟机的端口组会自动关联。# 通过 APIC REST API 创建 EPG 的示例JSON 格式 POST /api/mo/uni/tn-Prod/ap-WebApp/epg-Web-EPG.json { fvAEPg: { attributes: { dn: uni/tn-Prod/ap-WebApp/epg-Web-EPG, name: Web-EPG, rn: epg-Web-EPG, status: created }, children: [ { fvRsBd: { attributes: { tnFvBDName: Web-BD } } } ] } }4.4 配置 Contract 和 Filter先创建 Filter比如“Allow-HTTPS”里面加一条规则源端口任意目的端口 443协议 TCP。然后创建 Contract比如“Web-Contract”把 Filter 绑进去。最后在 Web-EPG 上把 Web-Contract 设为 Provider在 App-EPG 上把 Web-Contract 设为 Consumer。这里有个细节Contract 的作用域是 Tenant 内。如果两个 EPG 在不同 Tenant需要配置Inter-Tenant Contract或者通过 Shared Services 方式。Inter-Tenant Contract 需要在两个 Tenant 里都创建 Contract然后通过 Export/Import 关联。4.5 验证策略是否生效配置完后在 APIC 的Operational标签页里可以看 EPG 的终端学习情况。如果终端已经上线应该能看到 MAC、IP、所在 Leaf 和端口。然后在Contracts里看 Provider/Consumer 的绑定关系是否正确。实际测试时从 App 层服务器 ping Web 层的 443 端口应该通。从 Web 层 ping App 层的 22 端口如果不通说明 Contract 没放行这是符合预期的。如果该通的不通先检查 EPG 的静态路径 VLAN 是否和服务器实际 VLAN 一致再看 Contract 的 Filter 方向有没有写反。5. 常见问题与排查技巧实录5.1 终端学不到 MAC/IP 怎么办这是最常见的问题。终端明明上线了APIC 里就是看不到。排查顺序如下检查物理连接Leaf 端口是否 upVLAN 是否放行。检查 EPG 绑定静态路径的 VLAN 和端口是否正确。如果是 VMM Domain检查虚拟机端口组是否绑到了正确的 EPG。检查 BD 的网关如果终端需要跨子网通信BD 的网关地址必须配且终端网关指向这个地址。检查 COOP 状态在 Leaf 上用show coop命令看跟 Spine 的连接是否正常。如果 COOP 断了终端信息传不到 APIC。我遇到过一次终端能 ping 通网关但 APIC 里就是没表项。最后发现是 Leaf 和 Spine 之间的 IS-IS 邻居没起来COOP 虽然显示 up但底层路由不通。所以排查时不要只看 COOP 状态要确认底层路由。5.2 Contract 配了但不生效Contract 不生效通常有三个原因EPG 没绑定 BDEPG 必须绑定 Bridge Domain否则策略无法下发。Filter 方向反了Filter 里的源端口和目的端口是相对于 Provider 的。比如 Provider 是 Web 服务器监听 443那么 Filter 应该是“目的端口 443”。如果写成“源端口 443”就反了。VRF 的 Policy Control 设成了 Unenforced这样所有 Contract 都被忽略流量全通。检查 VRF 的设置。5.3 多租户环境下路由不通不同 Tenant 之间默认完全隔离。如果需要互通比如 Tenant A 的 Web 层要访问 Tenant B 的 DB 层需要配置Shared Services。具体做法是在 Tenant B 里创建一个 VRF设为 Shared。然后在 Tenant A 的 VRF 里导入 Tenant B 的路由。配置时注意只导入需要的子网不要全导入否则容易出环路。5.4 常见问题速查表现象可能原因排查命令/操作APIC 看不到终端端口 down / VLAN 错 / COOP 断show interface、show coopContract 不生效Filter 方向反 / VRF Unenforced检查 Filter 源目的端口跨 Leaf 不通Spine 路由问题 / VXLAN 隧道 downshow isis adjacency、show vxlan虚拟机迁移后不通VMM Domain 未同步 / EPG 未更新检查 VMM 集成状态APIC 集群节点掉出NTP 不同步 / 证书过期show ntp status、检查证书5.5 几个我踩过的坑坑一BD 子网配大了。比如配了 /16结果 APIC 认为整个 /16 都是本地子网导致本该走路由的流量被二层泛洪。建议 BD 子网按实际需求配一般 /24 足够。坑二静态路径的 VLAN 和服务器不一致。服务器上配的是 VLAN 100Leaf 端口上绑的是 VLAN 200结果就是终端学不到。这个错误很隐蔽因为端口是 up 的但流量就是不通。坑三Contract 的 Filter 用了“Any”。虽然省事但等于没做策略。生产环境建议明确端口和协议哪怕多写几条。坑四忽略 APIC 的 API 速率限制。用脚本批量创建 EPG 时如果并发太高APIC 会返回 429 错误。建议加个延时或者用 APIC 的批量 API。6. 自动化与扩展思路6.1 用 Python 脚本批量管理 ACIAPIC 提供了完整的 REST API用 Python 的 requests 库就能操作。我一般会封装一个简单的客户端类处理认证、重试、错误码。import requests import json import time class AciClient: def __init__(self, apic_ip, username, password): self.base fhttps://{apic_ip}/api self.session requests.Session() self.session.verify False self.login(username, password) def login(self, username, password): payload { aaaUser: { attributes: { name: username, pwd: password } } } resp self.session.post( f{self.base}/aaaLogin.json, datajson.dumps(payload) ) resp.raise_for_status() self.token resp.json()[imdata][0][aaaLogin][attributes][token] def get(self, dn): resp self.session.get(f{self.base}/mo/{dn}.json) return resp.json() def post(self, dn, payload): resp self.session.post( f{self.base}/mo/{dn}.json, datajson.dumps(payload) ) if resp.status_code 429: time.sleep(2) return self.post(dn, payload) return resp.json()这个类处理了 token 认证和 429 重试。实际用的时候可以把创建 Tenant、VRF、BD、EPG 的操作都封装成方法传入 YAML 配置文件实现声明式管理。6.2 跟现有自动化平台集成ACI 的 API 可以跟 Ansible、Terraform 等工具集成。Ansible 有专门的 aci 模块Terraform 也有 aci provider。如果你已经在用这些工具管理基础设施可以把 ACI 的策略也纳入版本控制。我个人的习惯是所有 ACI 配置都通过 Terraform 管理APIC GUI 只用来查看状态和排障。这样每次变更都有记录回滚也方便。6.3 监控和告警APIC 本身有 SNMP、Syslog、REST API 三种监控数据出口。我一般用 Prometheus 的 snmp_exporter 采集 Leaf 和 Spine 的接口流量、CPU、内存用 APIC 的 API 采集 Tenant 和 EPG 的健康状态。告警规则里重点关註COOP 邻居状态、IS-IS 邻居状态、APIC 集群健康度、EPG 终端数量突变。7. 一些个人体会ACI 这套东西刚上手时确实容易被各种对象和术语绕晕。但一旦理解了“Tenant 是隔离边界、EPG 是策略单位、Contract 是访问规则”这个核心逻辑后面的操作就顺了。我建议新手不要一上来就搭全套生产环境先用三台虚拟机装 APIC 模拟器配一个最简单的 Web-App-DB 三层架构把 Contract 的 Provider/Consumer 关系跑通。这个过程走一遍比看十篇文档都管用。另外ACI 的排障跟传统网络差别很大。传统网络你登录设备看路由表、看 ACL 计数就行。ACI 里策略是集中定义的但执行是分布式的所以排查时要同时看 APIC 的策略状态和 Leaf 的底层表项。我一般会先在 APIC 里确认策略绑定关系再去 Leaf 上用show zoning-rule看策略有没有真正下发。如果 APIC 显示正常但 Leaf 没有对应规则多半是 EPG 没绑定 BD 或者 Leaf 跟 APIC 的连接断了。最后说一个实际经验ACI 的版本升级要谨慎。不同大版本之间的对象模型可能有变化升级前一定要在实验室环境验证一遍。我见过一次升级后 Contract 的 Filter 顺序变了导致部分流量被误阻断。升级前备份 APIC 配置升级后逐项验证关键 Contract这个流程不能省。

相关新闻

华为交换机配置命令大全:登录、VLAN、Trunk、STP与排错实战

华为交换机配置命令大全:登录、VLAN、Trunk、STP与排错实战

简介:一份面向网络运维人员、系统管理员与华为设备初学者的交换机命令配置参考文档,重点解决日常配置与排错中“命令记不住、视图分不清”的问题。内容按用户视图、系统视图、以太网端口视图、VLAN视图、用户界面视图等层级整理,涵盖查看设备…

2026/10/13 19:44:39 阅读更多 →
公关公司选型指南:从需求定位到合同管理的避坑方法论

公关公司选型指南:从需求定位到合同管理的避坑方法论

每年一到预算季或者品牌有大动作之前,我身边总有同行跑来问同一个问题:"可靠的公关公司到底去哪儿找?"问这话的人,多半已经被比稿折磨得够呛——提案看了十几份,每个都说自己擅长整合传播、有丰富的媒体资源…

2026/10/13 15:37:47 阅读更多 →
综合布线技术与施工课程标准:把经验变成标准

综合布线技术与施工课程标准:把经验变成标准

简介:《综合布线技术与施工》课程标准是一份面向计算机网络技术专业的核心课程文档,围绕国家标准GB50311-2007、GB50312-2007等规范,系统梳理综合布线系统的结构设计、产品选型、工程施工、测试验收与项目管理等职业能力要求。文档以知识、能…

2026/10/12 14:50:22 阅读更多 →

最新新闻

鸽哒IM源码:生产级私有化即时通讯系统解析

鸽哒IM源码:生产级私有化即时通讯系统解析

简介:这是一套完整的跨平台即时通讯(IM)系统源码,面向中高级Java/Android/iOS开发者及全栈工程师,用于学习和搭建企业级实时通信服务。资源涵盖Web(WebSocketHTML5)、Android(JavaFC…

2026/10/13 21:08:58 阅读更多 →
Python+React低代码平台:元数据驱动的业务系统快速构建方案

Python+React低代码平台:元数据驱动的业务系统快速构建方案

简介:这是一套面向全栈开发初学者与低代码实践者的前后端一体化低代码平台学习资源,聚焦React前端框架与Python后端框架的协同开发模式,帮助非专业开发者快速构建可运行的Web应用,降低传统编码门槛。资源共229个文件,涵…

2026/10/13 21:08:58 阅读更多 →
2020数学建模B题沙漠穿越:Matlab动态规划与剪枝实战解析

2020数学建模B题沙漠穿越:Matlab动态规划与剪枝实战解析

简介:面向备战2020年数学建模B题的参赛者,完整Matlab源代码覆盖四关求解流程,从第一关基础路径规划到第四关随机天气下的最优策略,涉及距离矩阵处理、单目标优化、动态规划、数学期望与随机分布建模等方法。第二关重点解决双地图与…

2026/10/13 21:08:58 阅读更多 →
CEF4Delphi 控件:Delphi 与 JavaScript 双向通信及避坑指南

CEF4Delphi 控件:Delphi 与 JavaScript 双向通信及避坑指南

简介:CEF4Delphi控件是一套面向Delphi开发者的Chromium谷歌内核浏览器集成方案,适合需要在桌面程序中嵌入现代网页渲染能力的开发者,覆盖从Delphi 7到Delphi 10.2的多个版本,作者已亲自测试调试安装正常。资源包共462个文件&#…

2026/10/13 21:08:58 阅读更多 →
数据库大作业图书销售系统:核心是约束设计而不是页面数量

数据库大作业图书销售系统:核心是约束设计而不是页面数量

简介:面向数据库课程大作业的图书销售管理系统数据库设计文档,完整覆盖从问题描述、需求分析、概念模型设计、逻辑模型设计到建立数据库、录入数据及数据库操作的全过程,并配有全局与局部ER图、表结构、外键关系说明,以及实施中遇…

2026/10/13 21:08:58 阅读更多 →
Java 8 Stream 实战指南:从传统循环到声明式流水线

Java 8 Stream 实战指南:从传统循环到声明式流水线

如果你写过几年 Java 业务代码,大概率见过这类场景:一个方法里塞了三四个 for 循环,循环里面套 if,if 里面再往 List 或 Map 里 put 数据,看完要花好几分钟才理清楚这段逻辑到底在干嘛。这种代码不能说错,但…

2026/10/13 21:07:57 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →