当前位置: 首页 > article >正文

微软发布的《生成式人工智能初学者.NET 第二版》课程浇

本课概览Microsoft Agent Framework (MAF) 提供了一套强大的 Workflow工作流 框架用于编排和协调多个智能体Agent或处理组件的执行流程。本课将以通俗易懂的方式帮助你理解 MAF Workflow 的核心概念概念 说明 类比Workflow 工作流定义 ?? 流程图Executor 执行器/处理节点 ?? 工人Edge 连接边 ?? 传送带SuperStep 超步/批量处理 ?? 处理周期WorkflowContext 工作流上下文 ?? 工作台WorkflowEvent 工作流事件 ?? 通知Run 运行实例 ?? 一次执行Checkpoint 检查点 ?? 存档点让我们逐一深入了解这些概念?? 为什么需要 Workflow在构建 AI 智能体应用时我们经常需要多步骤处理用户请求需要经过多个处理环节多智能体协作不同的 Agent 各司其职协同完成任务条件分支根据处理结果决定下一步走向并行处理某些任务可以同时进行以提高效率状态管理需要在处理过程中保存和恢复状态传统方式的问题// ? 硬编码的流程难以维护和扩展var result1 await agent1.ProcessAsync(input);if (result1.Success){var result2 await agent2.ProcessAsync(result1.Data);// ... 越来越复杂}使用 Workflow 的优势// ? 声明式定义清晰可维护var workflow new WorkflowBuilder(startExecutor).AddEdge(executor1, executor2).AddEdge(executor2, executor3, condition: x x.Success).Build();一、核心概念Executor执行器?? 什么是 ExecutorExecutor执行器 是 Workflow 中的最小工作单元类似于类比 说明????? 工厂里的工人 每个工人负责一道工序?? 乐高积木块 每个积木有特定功能组合成整体?? 电路中的元件 接收输入信号输出处理结果?? Executor 的核心特征唯一标识Id每个 Executor 有一个唯一的 ID用于在 Workflow 中引用消息处理接收特定类型的输入消息处理后产生输出消息路由配置通过 ConfigureRoutes 方法定义能处理哪些类型的消息状态感知可以通过 IWorkflowContext 访问和修改工作流状态??? Executor 的类型层次MAF 提供了多种 Executor 类型满足不同场景需求类型 用途 示例场景Executor 处理消息无返回值 日志记录、通知发送Executor 处理消息有返回值 数据转换、AI 调用FunctionExecutor 用委托函数快速创建 简单处理逻辑StatefulExecutor 需要维护状态的执行器 会话管理、计数器?? Executor 源码解析从源码中可以看到 Executor 的核心设计// 来自 Executor.cspublic abstract class Executor : IIdentified{// 唯一标识符public string Id { get; }// 配置消息路由子类必须实现protected abstract RouteBuilder ConfigureRoutes(RouteBuilder routeBuilder);// 执行消息处理public async ValueTask ExecuteAsync(object message,TypeId messageType,IWorkflowContext context,CancellationToken cancellationToken default){// 记录调用事件await context.AddEventAsync(new ExecutorInvokedEvent(this.Id, message));// 路由消息到正确的处理器CallResult? result await this.Router.RouteMessageAsync(message, context, ...);// 记录完成或失败事件ExecutorEvent executionResult result?.IsSuccess is not false? new ExecutorCompletedEvent(this.Id, result?.Result): new ExecutorFailedEvent(this.Id, result.Exception);await context.AddEventAsync(executionResult);return result.Result;}}关键点? 每个 Executor 有唯一 ID? 通过 ConfigureRoutes 声明能处理的消息类型? 执行过程会产生事件ExecutorInvokedEvent、ExecutorCompletedEvent 等二、核心概念Edge边?? 什么是 EdgeEdge边 是连接两个 Executor 的消息通道类似于类比 说明?? 工厂传送带 把上一道工序的产品传送到下一道工序?? 水管 把水从一个容器引导到另一个容器?? 邮路 把信件从发件人送到收件人?? Edge 的三种类型MAF 支持三种类型的 Edge适用于不同的流程模式类型 说明 使用场景Direct直连 一对一连接 顺序处理流程FanOut扇出 一对多连接 并行分发任务FanIn扇入 多对一连接 汇聚多个结果?? Edge 源码解析从源码可以看到 Edge 的核心结构// 来自 Edge.cspublic enum EdgeKind{Direct, // 直连一对一FanOut, // 扇出一对多FanIn // 扇入多对一}public sealed class Edge{public EdgeKind Kind { get; init; } // 边的类型public EdgeData Data { get; init; } // 边的具体数据}// 来自 DirectEdgeData.cs - 直连边的数据public sealed class DirectEdgeData : EdgeData{public string SourceId { get; } // 源 Executor IDpublic string SinkId { get; } // 目标 Executor IDpublic Func? Condition; // 可选的条件判断}Direct Edge 示意图关键点? Edge 定义了消息从哪里来、到哪里去? Direct Edge 支持条件路由只有满足条件的消息才传递? FanOut Edge 可以实现广播或分区逻辑三、核心概念Workflow工作流?? 什么是 WorkflowWorkflow工作流 是将多个 Executor 通过 Edge 连接起来的完整流程定义类似于类比 说明?? 流程图 定义了从开始到结束的完整流程?? 生产线 多个工位通过传送带连接成完整生产线?? 乐谱 规定了演奏的顺序和节奏?? Workflow 的核心属性从源码中可以看到 Workflow 的核心结构// 来自 Workflow.cspublic class Workflow{// 起始 Executor 的 IDpublic string StartExecutorId { get; }// 工作流名称可选public string? Name { get; internal init; }// 工作流描述可选public string? Description { get; internal init; }// Executor 绑定字典internal Dictionary ExecutorBindings { get; init; }// 边的集合按源节点分组internal Dictionary Edges { get; init; }// 输出 Executor 集合internal HashSet OutputExecutors { get; init; }}?? 使用 WorkflowBuilder 构建工作流MAF 采用 建造者模式Builder Pattern 来构建 Workflow这使得工作流的定义更加直观// 创建工作流示例var workflow new WorkflowBuilder(startExecutor) // 指定起点.WithName(订单处理工作流) // 设置名称.WithDescription(处理电商订单的完整流程) // 设置描述.AddEdge(receiveOrder, validateOrder) // 添加边.AddEdge(validateOrder, processPayment,condition: x x.IsValid) // 条件边.AddEdge(processPayment, sendNotification).WithOutputFrom(sendNotification) // 指定输出节点.Build(); // 构建工作流关键方法方法 说明AddEdge(source, sink) 添加直连边AddEdge(..., condition) 添加条件边AddFanOut(source, sinks) 添加扇出边AddFanIn(sources, sink) 添加扇入边WithOutputFrom(executor) 指定输出节点BindExecutor(executor) 绑定占位符执行器Build() 构建最终的 Workflow四、核心概念SuperStep超步?? 什么是 SuperStepSuperStep超步 是 Workflow 执行的基本处理周期。可以类比为类比 说明?? 游戏中的回合 每个回合内所有玩家同时行动? 工厂的班次 每个班次内完成一批任务?? 海浪的一波 一波消息被处理然后产生下一波?? SuperStep 的执行流程每个 SuperStep 内部执行的步骤关键事件SuperStepStartedEvent超步开始SuperStepCompletedEvent超步完成// SuperStep 事件定义public class SuperStepEvent(int stepNumber, object? data null) : WorkflowEvent(data){// 超步的序号从 0 开始public int StepNumber stepNumber;}五、核心概念WorkflowContext工作流上下文?? 什么是 WorkflowContextWorkflowContext工作流上下文 是 Executor 执行时的运行环境类似于类比 说明??? 工人的工作台 提供工具、材料和通信渠道?? 通信枢纽 允许各个工位之间传递信息?? 共享内存 存储和读取状态数据?? IWorkflowContext 核心接口// 来自 IWorkflowContext.cspublic interface IWorkflowContext{// 添加工作流事件在当前 SuperStep 结束时触发ValueTask AddEventAsync(WorkflowEvent workflowEvent, CancellationToken cancellationToken default);// 发送消息给下游 Executor在下一个 SuperStep 处理ValueTask SendMessageAsync(object message, string? targetId, CancellationToken cancellationToken default);// 输出工作流结果ValueTask YieldOutputAsync(object output, CancellationToken cancellationToken default);// 请求在当前 SuperStep 结束时停止工作流ValueTask RequestHaltAsync();// 读取状态ValueTask ReadStateAsync(string key, string? scopeName null, CancellationToken cancellationToken default);// 读取或初始化状态ValueTask ReadOrInitStateAsync(string key, Func initialStateFactory, string? scopeName null, CancellationToken cancellationToken default);// 更新状态排队更新在 SuperStep 结束时应用ValueTask QueueStateUpdateAsync(string key, T value, string? scopeName null, CancellationToken cancellationToken default);}关键点? 消息传递通过 SendMessageAsync 在 Executor 之间传递消息? 状态管理支持读取、初始化和更新状态? 事件通知通过 AddEventAsync 发出事件? 流程控制通过 RequestHaltAsync 停止工作流六、核心概念WorkflowEvent工作流事件?? 什么是 WorkflowEventWorkflowEvent工作流事件 是工作流执行过程中产生的通知消息类似于类比 说明?? 广播通知 向所有人广播系统状态变化?? 日志记录 记录系统执行过程中的关键节点?? 事件订阅 允许外部监听并响应特定事件?? 事件分类事件层级 事件类型 说明工作流级别 WorkflowStartedEvent 工作流开始执行WorkflowOutputEvent 工作流产生输出WorkflowErrorEvent 工作流发生错误WorkflowWarningEvent 工作流产生警告超步级别 SuperStepStartedEvent 超步开始SuperStepCompletedEvent 超步完成执行器级别 ExecutorInvokedEvent Executor 被调用ExecutorCompletedEvent Executor 完成处理ExecutorFailedEvent Executor 处理失败七、核心概念Run运行实例?? 什么是 RunRun运行实例 是 Workflow 的一次具体执行类似于类比 说明?? 电影的一场放映 同一部电影可以放映多场?? 生产线的一个批次 同一条生产线可以生产多个批次?? 游戏的一局 同一个游戏可以玩多局?? Run 的核心特性// 来自 Run.cspublic sealed class Run : IAsyncDisposable{// 运行实例的唯一标识符public string RunId this._runHandle.RunId;// 获取当前执行状态public ValueTask GetStatusAsync(CancellationToken cancellationToken default);// 获取所有产生的事件public IEnumerable OutgoingEvents this._eventSink;// 获取自上次访问后的新事件public IEnumerable NewEvents { get; }// 恢复执行带外部响应public async ValueTask ResumeAsync(IEnumerable responses, CancellationToken cancellationToken default);}?? RunStatus运行状态public enum RunStatus{NotStarted, // 尚未开始Idle, // 空闲已暂停无待处理请求PendingRequests, // 等待外部响应Ended, // 已结束Running // 正在运行}八、核心概念Checkpoint检查点?? 什么是 CheckpointCheckpoint检查点 是工作流在某个时刻的完整状态快照类似于类比 说明?? 游戏存档 保存游戏进度随时可以读档继续?? 照片 记录某一时刻的完整状态?? 书签 标记阅读进度下次从这里继续?? Checkpoint 的核心信息// 来自 CheckpointInfo.cspublic sealed class CheckpointInfo{// 运行实例的唯一标识符public string RunId { get; }// 检查点的唯一标识符public string CheckpointId { get; }}// 检查点的完整数据来自 Checkpoint.csinternal sealed class Checkpoint{public int StepNumber { get; } // 超步编号public WorkflowInfo Workflow { get; } // 工作流信息public RunnerStateData RunnerData { get; } // 运行器状态public Dictionary StateData { get; } // 状态数据public Dictionary EdgeStateData { get; } // 边状态数据public CheckpointInfo? Parent { get; } // 父检查点}?? Checkpoint 的使用场景场景 说明故障恢复 系统崩溃后从最近的检查点恢复长时间运行 分段执行每段结束保存进度人机交互 等待用户输入时保存状态调试回放 从任意检查点重新执行版本分支 从同一个检查点创建多个分支执行九、核心概念关系图?? 概念之间的关系让我们把所有核心概念联系起来看看它们是如何协作的?? 生命周期视角从工作流的完整生命周期来看?? 消息流视角从消息在工作流中的流动来看关键理解消息驱动Executor 之间通过消息传递数据异步批处理同一 SuperStep 内的 Executor 可以并行执行边控制流向Edge 决定消息从哪里到哪里状态隔离每个 SuperStep 结束时应用状态更新十、实际应用示例?? 场景电商订单处理工作流让我们通过一个实际场景来理解这些概念的应用?? 概念对应关系概念 在此场景中的体现Workflow 整个订单处理流程Executor 每个处理步骤接收、验证、支付等Edge 步骤之间的连接含条件判断SuperStep 每一轮处理如超步1处理接收超步2处理验证...WorkflowContext 提供订单状态读写、消息发送能力WorkflowEvent 每个步骤的开始/完成/失败事件Run 一个具体订单的处理过程Checkpoint 处理中途保存的状态如支付完成后保存?? 场景多智能体协作工作流在 AI Agent 场景中Workflow 可以用来编排多个 Agent 的协作Workflow 的优势优势 说明?? 灵活编排 可以轻松调整 Agent 之间的协作关系?? 状态管理 自动管理各 Agent 的状态和上下文?? 可中断/恢复 支持人机交互随时暂停和恢复?? 可观测性 通过事件追踪整个执行过程??? 容错能力 通过检查点支持故障恢复十一、概念总结?? 核心概念速查表概念 定义 关键类 核心职责Executor 执行器/处理节点 Executor, Executor, FunctionExecutor 处理消息产生输出Edge 连接边 Edge, EdgeData, DirectEdgeData 定义消息流向和条件Workflow 工作流定义 Workflow, WorkflowBuilder 组织 Executor 和 EdgeSuperStep 超步/批量处理周期 SuperStepEvent, SuperStepStartedEvent 批量处理消息WorkflowContext 工作流上下文 IWorkflowContext 提供运行时服务WorkflowEvent 工作流事件 WorkflowEvent, ExecutorEvent 通知执行状态Run 运行实例 Run, RunStatus 管理一次执行Checkpoint 检查点 CheckpointInfo, ICheckpointStore 保存和恢复状态分尘逗够

相关文章:

微软发布的《生成式人工智能初学者.NET 第二版》课程浇

本课概览 Microsoft Agent Framework (MAF) 提供了一套强大的 Workflow(工作流) 框架,用于编排和协调多个智能体(Agent)或处理组件的执行流程。 本课将以通俗易懂的方式,帮助你理解 MAF Workflow 的核心概念…...

AI赋能学术写作:六种智能文献引用生成与管理策略

核心工具对比速览 工具名称 核心优势 适用场景 处理速度 AiBiye 智能识别引用格式,自动匹配规范 学术论文初稿 3-5秒/页 AiCheck 深度检测引用缺失,精准定位问题 论文终稿检查 10秒/篇 AskPaper 多语言引用规范支持 国际期刊投稿 5-8秒/页…...

设计文档评审——你的第一次防守反击

该文章同步至公众号OneChan 第一节:以“第一用户”和“系统侦探”的视角重新定义评审 评审设计文档,不是你理解他们设计得有多精妙,而是确保他们没给你埋下三个月后才会引爆的雷。 引子:一份“完美”文档背后的陷阱 我曾评审过一…...

C语言在嵌入式开发中的核心优势与实践

1. C语言为何历久弥新在嵌入式开发领域摸爬滚打十几年,我见过无数编程语言起起落落,唯独C语言始终屹立不倒。记得刚入行时,前辈就告诉我:"想搞嵌入式,先把C语言吃透。"当时不以为然,直到后来调试…...

DMA技术解析:提升嵌入式系统性能的关键

1. DMA技术概述:解放CPU的搬运工 DMA(Direct Memory Access)直接存储器访问技术,是现代嵌入式系统中提升性能的关键设计。我第一次在STM32项目中使用DMA传输时,实测发现ADC采样率从500kHz提升到2.1MHz,CPU占…...

华为OD技术面真题 - JAVA开发- spring框架 - 7

文章目录Spring中单例Bean会存在线程安全吗?如何保证单例Bean线程安全什么是循环依赖?Spring可以解决哪些类型的循环依赖Spring是如何解决循环依赖的Spring中单例Bean会存在线程安全吗? 分情况分状态讨论: 创建:spri…...

深入拆解ISP Pipeline:Tuning工程师如何像侦探一样排查图像问题?

深入拆解ISP Pipeline:Tuning工程师如何像侦探一样排查图像问题? 当一张照片出现偏色、噪点或细节丢失时,普通用户可能只会抱怨"拍得不好",而ISP Tuning工程师看到的却是一个待解的谜题。就像侦探通过蛛丝马迹还原案件真…...

从MD5到BCrypt:深入解析加密算法的选择与应用场景

1. 加密算法的基本分类与核心差异 第一次接触加密算法时,我被各种缩写搞晕了头。MD5、SHA、AES、RSA...这些看起来像天书的名词,其实可以分为几个清晰的类别。就像整理衣柜要分季节和用途一样,选择加密算法也需要先了解它们的本质区别。 所有…...

从网格到边界框:深入解析YOLO目标检测的回归思想

1. YOLO如何将目标检测转化为回归问题 我第一次接触YOLO算法时,最让我惊讶的是它把复杂的物体检测问题简化成了一个回归任务。这就像把"找东西"变成了"猜位置"的游戏。传统方法需要先找可能包含物体的区域,再对这些区域进行分类&…...

无障碍助手:OpenClaw利用Qwen3.5-9B实现屏幕阅读增强

无障碍助手:OpenClaw利用Qwen3.5-9B实现屏幕阅读增强 1. 为什么需要本地化的无障碍助手? 作为一名长期关注无障碍技术的开发者,我一直在寻找能够真正改善视障用户数字体验的解决方案。传统屏幕阅读器虽然成熟,但存在几个关键痛点…...

MySQL 主从延迟根因诊断法

📌 解决思路:从网络、IO、SQL 到参数,系统化定位高并发下的同步瓶颈 📌 适用版本:MySQL 5.7 / 8.0 📌 适用场景:高并发写入、主从延迟告警、从库追不上主库 目录 一、先量化延迟:别…...

旋转变压器:从电磁耦合到高精度位置解算的工程实践

1. 旋转变压器:工业自动化的"角度翻译官" 第一次接触旋转变压器是在五年前的伺服电机调试现场,当时电机总是出现位置漂移,排查了半天才发现是旋变信号解算出了问题。这种看似简单的电磁元件,实则是工业自动化系统中不可…...

高效掌握Equalizer APO:Windows音频增强与定制完全指南

高效掌握Equalizer APO:Windows音频增强与定制完全指南 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo 在数字音频体验日益重要的今天,拥有专业级的声音调控能力不再是音频工程师…...

0Ω电阻的工程应用与电流承载能力解析

1. 0Ω电阻的阻值真相作为一名硬件工程师,我经常遇到新手同事对0Ω电阻的阻值产生误解。实际上,0Ω电阻并非理想中的零阻抗,而是存在一定偏差范围的极小阻值电阻。根据EN60115-2国际电阻标准,0Ω电阻的最大允许偏差有三种规格&…...

硬件工程师的调试日常与职场趣事

1. 硬件工程师的日常:那些让人哭笑不得的瞬间 作为一名从业十年的硬件工程师,我见过太多同行们面对电路板时那副欲哭无泪的表情。这个行业就是这样——充满了让人抓狂的瞬间,但也正是这些时刻,让我们这群"电路修理工"有…...

OpenClaw智能运维:Qwen3.5-9B实现服务器异常自动修复

OpenClaw智能运维:Qwen3.5-9B实现服务器异常自动修复 1. 为什么需要自动化运维助手 凌晨三点被报警短信吵醒的经历,相信每个运维工程师都不陌生。去年冬天的一个深夜,我顶着寒风打车到公司处理服务器磁盘爆满的问题时,突然意识到…...

CANoe_UDS-bootloader 自动化测试系列(一)搭建CANoe测试框架:XML与CAPL模块的工程化抉择

1. 为什么测试框架的选择如此重要? 第一次接触UDS Bootloader自动化测试时,我完全被各种技术选项搞晕了。特别是当团队讨论该用XML Test Module还是CAPL Test Module时,大家争论得面红耳赤。后来我才明白,这个选择直接影响着整个测…...

人体感应灯工作原理与安装调试指南

1. 人体感应灯的核心工作原理人体感应灯的核心在于热释电红外传感器(PIR)与菲涅尔透镜的协同工作。当人体进入探测区域时,这套系统能够精准捕捉到人体散发的特定波长红外线,从而触发照明控制。1.1 热释电效应解析热释电材料&#…...

末九网安保研华五CS:一个‘零科研’选手的夏令营海投与面试逆袭全记录

末九网安保研华五CS:零科研背景的逆袭实战手册 站在末流985网安专业第三名的位置,手握几项"水赛"国奖和一段无成果的国创经历,我的保研简历在众多华五申请者中显得单薄得可怜。当同届同学炫耀着顶会论文和ACM奖牌时,我却…...

EnOcean BLE设备轻量级解析库设计与实现

1. 项目概述EnOceanBleDevices 是一个面向嵌入式平台的轻量级 BLE 协议栈扩展库,专为集成 EnOcean 自供电 BLE 设备而设计。其核心目标并非替代标准 BLE 协议栈(如 ESP-IDF 的 NimBLE 或 Bluedroid),而是构建在底层 BLE 扫描能力之…...

面试官问我‘龟兔赛跑’怎么找链表环起点,我用Floyd算法5分钟讲清楚了

面试官问我‘龟兔赛跑’怎么找链表环起点,我用Floyd算法5分钟讲清楚了 "链表环检测"是技术面试中的高频考点,而真正能让面试官眼前一亮的,往往不是背诵代码的能力,而是对算法原理的透彻理解。最近一次大厂面试中&#x…...

【数据结构与算法】 时间复杂度计算

👨‍💻 关于作者:会编程的土豆 “不是因为看见希望才坚持,而是坚持了才看见希望。” 你好,我是会编程的土豆,一名热爱后端技术的Java学习者。 📚 正在更新中的专栏: 《数据结构与算…...

30分钟搞定OpenClaw:Qwen3.5-9B镜像快速入门指南

30分钟搞定OpenClaw:Qwen3.5-9B镜像快速入门指南 1. 为什么选择Qwen3.5-9B镜像 去年我在尝试本地部署AI助手时,曾被复杂的依赖关系和CUDA版本冲突折磨得苦不堪言。直到发现星图平台的Qwen3.5-9B预置镜像,才真正体会到"开箱即用"的…...

跨平台OpenClaw部署对比:Phi-3-mini-128k-instruct在Mac/Win/Linux表现

跨平台OpenClaw部署对比:Phi-3-mini-128k-instruct在Mac/Win/Linux表现 1. 测试背景与实验设计 去年夏天,当我第一次尝试在MacBook Pro上部署OpenClaw对接Phi-3-mini模型时,意外发现同样的自动化任务在同事的Windows设备上执行效率差了近40…...

SPI扩展CAN方案:从寄存器配置到多路通信实战

1. SPI扩展CAN方案的核心价值 在工业控制领域,CAN总线因其高可靠性和实时性被广泛使用。但随着设备节点增加,主控芯片原生CAN接口往往不够用。这时通过SPI接口扩展CAN通道就成了性价比极高的解决方案。我曾在多个工业现场实测,用10元级的MCP2…...

第十五届题目

握手问题 #include <stdio.h> #include <stdlib.h>int main(int argc, char *argv[]) {int sum0;for(int i49;i>7;i--){sumi;}printf("%d",sum);return 0; } 小球反弹 #include <stdio.h> #include <math.h>int main(int argc, char *ar…...

OpenClaw隐私计算:Qwen3.5-9B-AWQ-4bit本地处理加密图片

OpenClaw隐私计算&#xff1a;Qwen3.5-9B-AWQ-4bit本地处理加密图片 1. 为什么需要加密图片处理 去年我在帮一家小型金融机构做自动化流程优化时&#xff0c;遇到了一个棘手问题&#xff1a;他们需要AI自动分析客户上传的身份证和银行卡照片&#xff0c;但直接传输这些敏感图…...

Hinge损失函数:从SVM的基石到现代机器学习中的间隔优化

1. Hinge损失函数的前世今生 第一次听说Hinge损失函数是在研究生时期的一堂机器学习课上。教授在黑板上画了一条直线&#xff0c;说这就是SVM的决策边界&#xff0c;而Hinge损失就是确保这条线能"站稳脚跟"的关键。当时觉得这个比喻特别形象——就像门上的铰链&#…...

嵌入式NTP客户端:一次校准,离线维持49天高精度时间

1. 项目概述PREi NTP Manager 是一个专为嵌入式平台&#xff08;尤其是 ESP 系列微控制器&#xff09;设计的轻量级网络时间协议&#xff08;NTP&#xff09;客户端库。其核心目标并非实现完整的 RFC 5905 NTP 协议栈&#xff0c;而是以极简、可靠、低资源占用的方式&#xff0…...

FPN实战:用PyTorch从零搭建特征金字塔网络(附代码)

FPN实战&#xff1a;用PyTorch从零搭建特征金字塔网络&#xff08;附代码&#xff09; 在计算机视觉领域&#xff0c;处理多尺度目标检测一直是个棘手的问题。想象一下&#xff0c;当你需要同时识别图像中近处的大象和远处的小鸟时&#xff0c;传统卷积神经网络往往会顾此失彼—…...