Nornir网络自动化监控插件:集成Sentry实现异常告警与上下文追踪

news2026/5/17 15:34:25
1. 项目概述一个为Nornir网络自动化框架量身定制的告警与监控插件如果你和我一样长期使用Nornir框架来管理成百上千的网络设备那你一定遇到过这样的场景一个精心编写的自动化任务在测试环境跑得飞快一旦放到生产环境面对复杂的网络状况和异构的设备型号总会有那么几个“刺头”设备执行失败。更头疼的是这些失败往往悄无声息除非你手动去翻看日志否则可能要等到业务告警响起你才发现某个配置推送、备份收集或者合规检查的任务早就“死”在了半路。NORNR/nornr-sentry这个项目就是为了解决这个痛点而生的。简单来说它是一个为Nornir框架深度集成的Sentry插件。Sentry本身是一个强大的应用错误监控平台能实时捕获、聚合和告警代码中的异常。而这个插件的作用就是把Nornir任务执行过程中抛出的每一个异常——无论是连接超时、命令语法错误还是设备返回了预期之外的输出——都自动、精准地发送到你的Sentry项目中让你能在一个统一的仪表盘里像监控应用程序崩溃一样监控你的网络自动化流水线的健康状态。这不仅仅是“把错误日志换个地方存”那么简单。它意味着你可以为不同的Nornir任务、不同的设备组甚至不同的错误类型设置不同的告警规则比如核心路由器连接失败立即发短信接入交换机命令错误发邮件。你可以追踪某个错误在历史任务中的发生频率看到完整的错误堆栈和设备上下文信息从而实现从“被动救火”到“主动预警”的运维模式转变。对于任何依赖Nornir进行大规模、常态化网络运维如每日配置备份、周期性合规审计、软件版本巡检的团队来说这个工具能极大地提升运维的可靠性和可观测性。2. 核心设计思路无缝集成与上下文增强2.1 为什么选择Sentry作为告警后端在构建网络自动化监控方案时我们有几个选择写入本地文件、发送到Syslog服务器、集成到ELK栈或者使用专门的APM应用性能监控工具。nornr-sentry选择Sentry背后有非常务实的考量。首先开箱即用的告警工作流。Sentry的核心优势在于其告警逻辑。你不需要自己写脚本去解析日志、判断阈值、再去调用邮件或IM接口。在Sentry的Web界面上通过简单的点击配置就能基于错误频率、影响设备数量、错误类型等条件设置邮件、Slack、钉钉、PagerDuty等多种告警渠道。这对于需要快速建立监控体系的团队来说节省了大量的开发成本。其次出色的错误聚合与根源分析。Sentry会自动对相似的错误进行聚合Fingerprinting避免同一个底层问题因为发生在不同设备或不同时间点而产生海量重复告警淹没真正重要的信息。同时它提供的错误详情页面包含了完整的堆栈跟踪、请求上下文、用户反馈等能帮助开发者快速定位问题根源。对于Nornir任务这意味着你能清晰地看到是框架的某个处理器Processor出错还是某个Netmiko/Napalm插件抛出了异常异常发生时正在操作哪台设备的哪个方法。最后对Python生态的完美支持。Sentry的SDKsentry-sdk是Python领域的事实标准集成度极高性能开销小。nornr-sentry本质上是一个Nornir的任务插件Task Plugin和回调函数Callback的封装它利用Sentry SDK的capture_exception和set_context等API实现了与Nornir事件流的深度钩挂这种基于成熟SDK的集成方式非常稳健。2.2 插件的工作机制与集成点nornr-sentry的设计目标是“非侵入式”集成。你不需要重写已有的任务函数只需在初始化Nornir对象时加载这个插件它就会在后台默默工作。其核心工作机制围绕Nornir的两个扩展点展开任务执行层面的异常捕获这是最主要的功能。插件会包裹Nornir的任务执行引擎。当nr.run()执行一个任务时如果任务函数或其中调用的任何底层方法如netmiko_send_command抛出了异常插件会立即拦截这个异常。它不会阻止异常向上传播即你的脚本仍然会收到错误并可能终止但在异常被抛出之前插件已经将错误的详细信息、发生错误的设备Host信息、任务名称等作为事件Event发送给了Sentry。结果处理器Result Processor层面的状态监控除了捕获未处理的异常插件还可以配置为监控任务结果AggregatedResult。即使任务没有抛出异常也可能因为设备返回ERROR状态而部分失败。插件可以检查每个HostResult的状态如果发现失败结果可以主动创建一个“软错误”事件发送到Sentry这有助于监控那些被任务内部try-except块处理掉但依然代表故障的场景。为了实现这些插件内部需要做几件关键事上下文丰富化光有错误堆栈不够。插件会自动提取当前Nornir运行上下文包括task.name任务名、host.name设备主机名、host.platform设备平台如iosxr, eos等、task.params任务参数等并将这些信息作为“标签Tags”和“上下文Context”附加到Sentry事件中。这样在Sentry后台你可以轻松地按设备平台过滤错误或者看到出错时具体的命令参数是什么。错误指纹定制默认情况下Sentry根据错误类型和堆栈轨迹生成指纹。但对于网络自动化同一个Python异常如NetmikoTimeoutException可能发生在成百上千台设备上。插件需要智能地定制指纹例如将“设备名”纳入指纹计算这样同一台设备反复超时会被聚合为一个问题而不同设备的超时则会被区分开便于评估问题是设备个体问题还是网络共性问题。3. 详细配置与实操指南3.1 环境准备与基础安装假设你已经有一个正在运行的Nornir项目。集成nornr-sentry的第一步是安装它。通常通过pip安装pip install nornr-sentry同时你需要确保已经安装并配置了Sentry SDK的核心包pip install sentry-sdk接下来你需要在 Sentry.io 上创建一个账户和一个项目。创建完成后Sentry会提供一个DSNData Source Name它看起来像一串URL是客户端SDK向你的Sentry项目发送数据的唯一凭证。请妥善保管这个DSN。3.2 插件的初始化与配置在你的Nornir脚本或初始化代码中配置插件是关键一步。推荐在创建InitNornir对象之后立即配置。以下是一个完整的配置示例from nornir import InitNornir from nornir_sentry import NornirSentry import sentry_sdk # 1. 初始化Sentry SDK (必须在Nornir插件之前) sentry_sdk.init( dsnhttps://your-public-keysentry.io/your-project-id, # 替换为你的DSN traces_sample_rate1.0, # 性能追踪采样率网络任务可设为1.0或更低 environmentproduction, # 环境标识dev, staging, production releasenetwork-automation-v1.0, # 你的自动化脚本版本 ) # 2. 初始化Nornir nr InitNornir(config_fileconfig.yaml) # 3. 创建并注册Sentry插件实例 sentry_plugin NornirSentry( dsnNone, # 如果上面已经init这里可以留空插件会使用全局client enable_task_hookTrue, # 启用任务异常捕获核心功能 enable_result_processorFalse, # 是否启用结果处理器监控按需开启 ignored_exceptions[], # 可以忽略的异常类型列表例如自定义的SkipException host_context_providerNone, # 自定义函数用于提供额外的设备上下文 ) # 4. 将插件注册到Nornir实例 nr.config.plugins.register(sentry_plugin) # 现在nr.run() 执行的任务异常都会被自动发送到Sentry配置参数详解dsn: 如果你没有在外部调用sentry_sdk.init可以在这里直接传入DSN。最佳实践是在脚本入口统一初始化SDK以便其他非Nornir部分的错误也能被捕获。enable_task_hook:必须为True。这是插件的核心开关。enable_result_processor: 默认为False。如果设为True插件会注册一个结果处理器遍历所有HostResult将状态为failed或error的结果作为事件发送。注意这可能会产生大量事件建议仅在调试或监控关键任务时开启并配合Sentry的采样率(sample_rate)使用。ignored_exceptions: 一个异常类列表。列表中的异常被捕获时不会发送到Sentry。这非常有用比如你自定义了一个DeviceUnreachableSkipException用于在设备不可达时跳过而不视为错误就可以把它加进来避免产生噪音告警。host_context_provider: 一个可调用对象接收host对象作为参数返回一个字典。用于向Sentry事件添加自定义的设备上下文信息例如设备型号、所属机房、业务系统等这些信息可以从你的CMDB或Inventory中获取。注意Sentry SDK的初始化 (sentry_sdk.init) 必须在创建NornirSentry插件实例之前执行。插件依赖于全局的Sentry client。如果顺序颠倒插件可能无法正常工作。3.3 在复杂任务场景中的实战应用让我们看一个更贴近生产的例子一个任务需要登录设备执行命令并解析返回结果。from nornir.core.task import Task, Result from nornir_netmiko.tasks import netmiko_send_command from nornir_utils.plugins.functions import print_result import sentry_sdk from nornir_sentry import NornirSentry # 初始化 sentry_sdk.init(dsnYOUR_DSN, environmentprod) nr InitNornir(...) nr.config.plugins.register(NornirSentry(enable_task_hookTrue)) def get_device_interfaces(task: Task) - Result: 获取设备接口信息并尝试解析JSON。 这是一个可能因设备差异或命令超时而失败的任务。 try: # 可能抛出 NetmikoTimeoutException, NetmikoAuthenticationException raw_output task.run( tasknetmiko_send_command, command_stringshow interfaces | json, namefGET_INTF_{task.host.name}, # 给子任务命名便于在Sentry中区分 ).result # 可能抛出 JSONDecodeError (如果设备不支持json输出返回了文本) interface_data json.loads(raw_output) # ... 进一步处理数据 ... return Result(hosttask.host, resultinterface_data) except json.JSONDecodeError as e: # 处理非JSON响应可能是文本尝试回退到文本解析 task.host[json_supported] False # 在host上做个标记 # 注意这里捕获了异常并处理了所以默认情况下Sentry不会收到这个错误。 # 如果我们认为这仍然是一个需要监控的“异常情况”可以手动上报 sentry_sdk.capture_message( fDevice {task.host.name} does not support JSON output for interface data., levelwarning, # 设置为warning级别而非error tags{host: task.host.name, task: task.name, issue: unsupported_json}, ) # 然后尝试文本解析逻辑... # ... # 其他更严重的异常如超时、认证失败会被task.run抛出并被nornr-sentry自动捕获。 # 运行任务 results nr.run(taskget_device_interfaces) print_result(results)在这个例子中我们演示了两种错误处理模式预期内的异常JSON解析失败我们通过try-except进行了处理并降级到备用方案。同时我们使用sentry_sdk.capture_message手动发送了一个警告信息到Sentry用于记录和监控这种“非错误但非理想”的状态而不是让它完全沉默。未处理的异常网络超时等这些异常会穿透try-except块因为它们发生在task.run内部或者发生在try块之外最终被nornr-sentry插件捕获并自动上报。3.4 高级功能自定义上下文与指纹规则为了在Sentry中获得更强大的分组和筛选能力我们可以深度定制上下文和指纹。自定义上下文提供器示例假设你的host数据中包含了业务关键信息。def my_context_provider(host): return { “device_role”: host.data.get(“role”, “unknown”), # 从inventory中获取 “data_center”: host.data.get(“location”, “unknown”), “management_ip”: host.hostname, “vendor”: host.platform, } sentry_plugin NornirSentry( enable_task_hookTrue, host_context_providermy_context_provider, )这样每个错误事件都会附带这些字段。你可以在Sentry中搜索device_role:core-router来快速找到所有核心路由器的错误。理解与影响错误指纹Sentry使用指纹将类似错误分组为一个Issue。nornr-sentry的默认策略通常结合了异常类型和主机名。但有时你需要调整。这通常需要在Sentry的服务器端或SDK的before_send钩子中完成但插件本身也提供了一定的灵活性。例如如果你认为所有NetmikoTimeoutException无论发生在哪台设备上都应该被归为一类问题可能是网络链路共性问题你可以尝试在初始化Sentry SDK时这样做def before_send(event, hint): # 检查是否是nornir任务错误 if ‘exception’ in hint: exc hint[‘exception’] if exc.__class__.__name__ ‘NetmikoTimeoutException’: # 修改指纹主要基于异常类型忽略主机名差异 event[‘fingerprint’] [‘nornir’, ‘netmiko’, ‘timeout’, exc.__class__.__name__] return event sentry_sdk.init( dsn“YOUR_DSN”, before_sendbefore_send, )重要提示修改指纹是一个高级功能需要谨慎。不恰当的分组可能导致海量错误被合并难以定位具体设备或者使关键错误被淹没。建议在生产环境中大量使用前先在测试环境验证分组效果。4. 生产环境部署最佳实践与避坑指南将nornr-sentry用于生产环境监控以下几个实践能帮你走得更稳。4.1 环境隔离与DSN管理绝对不要在代码中硬编码Sentry DSN。应该使用环境变量或配置文件。import os from dotenv import load_dotenv # 推荐使用python-dotenv load_dotenv() # 从 .env 文件加载环境变量 SENTRY_DSN os.getenv(“SENTRY_DSN_PROD”) # 区分生产、测试DSN ENVIRONMENT os.getenv(“ENVIRONMENT”, “development”) sentry_sdk.init( dsnSENTRY_DSN, environmentENVIRONMENT, # 生产环境可以降低采样率以控制成本 traces_sample_rate0.2 if ENVIRONMENT “production” else 1.0, )在Sentry项目中为开发、测试、生产环境创建不同的Project或使用同一个Project但设置不同的environment标签。这样可以通过标签过滤避免测试环境的噪音干扰生产告警。4.2 控制事件量与避免告警风暴网络自动化任务可能并发执行数百台设备。如果任务本身设计有问题比如错误的命令导致每台设备都抛错可能会瞬间向Sentry发送大量事件触发告警风暴并可能产生费用。应对策略合理使用ignored_exceptions将那些已知的、非关键性的或预期内的异常加入忽略列表。谨慎开启enable_result_processor如前所述结果处理器会产生大量事件。除非必要否则保持关闭。利用Sentry SDK的采样功能sentry_sdk.init( dsnDSN, sample_rate0.1, # 只发送10%的错误事件。适用于高频、非关键任务。 )注意sample_rate是随机采样可能错过重要错误。更精细的控制可以使用traces_sampler回调函数。在任务层面进行错误聚合在任务逻辑中可以先本地收集所有设备的错误然后只向Sentry发送一个汇总的错误事件附带受影响的设备列表。4.3 告警规则精细配置在Sentry后台配置告警规则是发挥其价值的关键。不要仅仅对“所有新错误”告警。按错误类型为ConnectionError、AuthenticationError这类基础设施级别错误设置高优先级告警如PagerDuty。按设备角色利用自定义的device_role标签为核心设备错误设置更严格的规则。频率阈值“同一问题在10分钟内发生超过5次”才告警避免单次、偶发错误的干扰。受影响用户设备数当错误影响到超过一定比例或数量的设备时告警这可能预示着区域网络故障或脚本逻辑缺陷。4.4 常见问题排查实录问题1配置了插件但Sentry收不到任何错误。检查点1DSN和初始化顺序。确保SENTRY_DSN环境变量已设置且正确确保sentry_sdk.init在注册NornirSentry插件之前被调用。检查点2插件是否成功注册。打印nr.config.plugins查看。检查点3错误是否被本地捕获。如果你的任务代码用try... except Exception as e: ...完全包裹了task.run并且没有重新抛出异常或手动调用sentry_sdk.capture_exception(e)那么插件是看不到这个异常的。确保异常能传播到插件层面。检查点4Sentry项目选择。登录Sentry网站确认事件是否发送到了正确的Project和Environment下。问题2Sentry收到了错误但缺少设备上下文信息如hostname。检查点这通常意味着插件在捕获异常时未能正确获取到当前的Nornir Task上下文。确保你的任务是通过nr.run()执行的并且任务函数正确接收了Task对象作为第一个参数。如果是在子任务或回调函数中出错上下文可能不同需要手动使用sentry_sdk.set_context添加。问题3同一个错误在不同设备上重复发生产生了大量独立的Issue没有聚合。原因Sentry默认的指纹算法可能将主机名作为重要因素。这是设计使然因为通常你需要知道是哪台设备出了问题。解决如果你希望将同一类错误聚合参考上文“高级功能”部分使用before_send钩子定制指纹将主机名从指纹计算中移除或降低其权重。问题4任务执行速度变慢。分析Sentry SDK的网络请求是同步的默认情况下。这意味着每次发送错误事件都会产生一次HTTP请求的延迟。对于超大规模、超低延迟要求的任务这可能产生影响。优化设置sample_rate进行采样。确保Sentry SDK使用默认的异步传输HTTPTransport而非阻塞式传输。对于极端性能场景可以考虑使用Sentry的队列或代理如sentry-relay进行本地缓冲和批量发送但这会显著增加部署复杂度。对于绝大多数网络自动化场景任务频率为分钟或小时级默认配置的性能开销是可接受的。集成nornr-sentry本质上是在你的网络自动化系统中引入了一个专业级的“黑匣子”和“预警机”。它不能防止错误发生但能确保错误发生时你总是第一个知道的人并且拥有足够的信息去快速定位和解决。将运维从“日志考古”升级到“指标驱动”和“事件响应”是这个工具带来的最大价值转变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2616424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…