事件驱动AI代理框架:构建生产级智能体的状态管理与工作流编排

news2026/5/8 2:42:38
1. 项目概述为什么我们需要一个“事件驱动”的代理框架如果你最近在关注AI应用开发尤其是基于大语言模型LLM构建的智能体Agent或自动化工作流那你大概率已经感受到了一个痛点状态管理。一个简单的对话机器人或许还好但一旦你的应用逻辑变得复杂比如需要处理多轮对话、调用外部API、执行长时间运行的任务或者需要保证在服务重启后任务不丢失事情就变得棘手起来。传统的请求-响应模型和简单的内存状态管理在可靠性、可扩展性和开发体验上很快就会捉襟见肘。这就是inngest/agent-kit试图解决的问题。它不是另一个教你如何写提示词Prompt的库而是一个为构建生产级、事件驱动、有状态的AI代理而设计的底层框架。它的核心思想非常清晰将AI代理的复杂逻辑尤其是那些涉及步骤、状态和外部触发的逻辑建模为一系列由事件触发的、幂等的函数。inngest本身是一个强大的工作流编排引擎而agent-kit则是专门为AI代理场景定制的SDK让你能像构建普通后端服务一样去构建健壮、可观测、可扩展的AI应用。想象一下你要开发一个智能客服系统用户的一个问题可能触发“理解意图 - 查询知识库 - 生成草稿 - 人工审核 - 发送回复”这一系列步骤。用传统方式你需要自己处理每一步的队列、状态持久化、错误重试和流程回滚。而agent-kit配合Inngest让你可以声明式地定义这个工作流框架负责可靠地执行它。无论你的服务是否重启或者某一步骤暂时失败整个流程都能从中断点恢复保证最终一致性。这对于需要与真实世界交互、处理异步任务的AI应用来说是迈向“生产就绪”的关键一步。2. 核心架构与设计哲学拆解2.1 事件驱动与函数即工作流agent-kit的基石是“事件驱动架构”和“函数即工作流”的理念。这与我们熟悉的Serverless函数如AWS Lambda有相似之处但更侧重于复杂工作流的编排。事件Event这是系统中一切动作的起点。一个事件就是一个携带了数据的JSON对象例如{“name”: “conversation.message.received”, “data”: {“user_id”: “123”, “text”: “帮我订一张明天去北京的机票”}}。事件由你的应用代码发出被发送到Inngest的事件总线。函数Function在agent-kit的语境下一个函数就是一个AI代理的工作单元。你使用inngest.create_function这样的装饰器来定义一个函数并指定它由哪些事件触发。这个函数内部你可以自由地调用LLM、使用工具Tools、访问数据库、调用第三方API。工作流Workflow一个复杂的工作流就是由多个函数通过事件链式或并行触发而组成的。Inngest的核心引擎负责监听事件调用对应的函数管理函数执行的状态步骤输出、中间变量并在函数完成后可能触发新的事件从而驱动工作流向下一个步骤前进。这种设计带来的最大好处是“关注点分离”。作为开发者你只需要关心单个函数的业务逻辑“收到用户消息后我该做什么”而将可靠性、状态持久化、并行执行、错误重试、延时触发等分布式系统难题交给Inngest去处理。你的函数代码是幂等的意味着即使因为网络抖动或服务重启导致同一函数被多次执行结果也是一致的这极大地简化了错误处理。2.2 状态管理的革命Step Tool 与记忆持久化在AI代理中状态State或记忆Memory是灵魂。传统的做法可能是把整个对话历史或任务上下文塞进LLM的上下文窗口或者自己实现一个外部的键值存储来维护状态。agent-kit提供了一套更优雅、与框架深度集成的方案Step Tool和内置状态管理。Step Tool是agent-kit中一个精妙的设计。它本质上是一个暴露给LLM通过OpenAI的Function Calling或类似机制的特殊“工具”。当LLM在思考过程中认为需要执行一个可能耗时、可能失败、或者需要记住结果以备后用的操作时比如“调用天气API”、“查询数据库”、“执行一段计算”它不会直接去执行而是“声明”要调用这个Step Tool。框架会拦截这个调用将其转换为一个工作流步骤。这个步骤的执行会被框架持久化记录。如果执行成功结果会被存储下来并作为后续LLM推理的上下文。如果执行失败框架可以自动重试。更重要的是整个步骤的状态输入、输出、甚至LLM在那一刻的“思考”都被完整地保存了下来。这意味着什么意味着你的AI代理获得了“断点续传”的能力。如果一个包含10个步骤的复杂任务在执行到第5步时服务崩溃了重启后框架可以从第5步的精确状态恢复LLM无需从头开始推理。这也使得调试变得异常直观你可以在Inngest的仪表板中清晰地看到整个工作流的执行图谱每一个Step Tool的调用、输入输出都一目了然。实操心得刚开始接触Step Tool时很容易把它当成普通的Tool来用。关键是要理解它的核心价值在于“创造了一个持久化的检查点”。对于任何你希望具有可观测性、可重试性、或结果需要被后续步骤引用的操作都应该优先考虑封装为Step Tool。而对于那些纯计算、无副作用、无需记忆的简单操作使用普通Tool可能更轻量。2.3. 与现有AI开发栈的融合agent-kit不是一个孤立的岛屿它设计的目标是融入现有的AI开发生态。它目前与LangChain和LangGraph的集成非常友好。与LangChain集成你可以将agent-kit提供的状态管理和Step Tool能力与LangChain丰富的组件链Chains、工具Tools和记忆Memory系统结合。例如你可以用一个LangChain Chain来处理核心的LLM调用和解析而用agent-kit来编排多个Chain的执行顺序和状态持久化。与LangGraph集成这是更高级的用法。LangGraph本身就是一个基于图Graph的工作流编排库非常适合描述具有循环、分支的复杂代理逻辑。agent-kit可以作为LangGraph的“执行引擎”和“状态后端”。你用LangGraph定义代理的思维图Graph而agent-kit负责在分布式环境下可靠地执行这个图上的每一步并持久化整个图的状态。这种组合能构建出极其强大和稳健的AI应用。这种融合策略降低了采用门槛。你不需要抛弃已有的投资和知识可以渐进式地将agent-kit引入到你的项目中先用于管理最需要可靠性的那部分流程。3. 从零开始构建你的第一个可靠AI代理3.1 环境准备与基础配置让我们抛开概念动手搭建。假设我们要构建一个简单的“研究助手”代理用户输入一个话题代理会去联网搜索相关资料然后总结成一份报告。首先你需要一个Inngest账户云服务或自托管来获取事件总线和执行引擎。注册后你会获得一个INNGEST_EVENT_KEY用于发送事件和一个INNGEST_SIGNING_KEY用于服务端函数验证。在你的Python项目中安装核心依赖pip install inngest-agent-kit langchain-openai langchain-community接下来初始化agent-kit客户端。通常你会创建一个inngest_client.py这样的文件import inngest import inngest_agent_kit as agent_kit from inngest_agent_kit import InMemoryCache, TracingLogger # 初始化Inngest客户端用于与Inngest服务通信 inngest_client inngest.Inngest( app_idresearch-assistant, event_keyos.getenv(INNGEST_EVENT_KEY), ) # 初始化agent-kit的运行时它提供了状态管理、Step Tool等核心能力 agent_kit_runtime agent_kit.Runtime( clientinngest_client, # 在生产环境中你应该使用像Redis这样的持久化缓存 cacheInMemoryCache(), # 用于跟踪和日志记录便于调试 tracerTracingLogger(), )注意示例中使用了InMemoryCache这只适用于单进程开发环境。在生产环境中必须使用分布式缓存如RedisCache否则多实例部署时状态会错乱。这是初期部署时最容易踩的坑之一。3.2 定义事件与触发函数我们的工作流由事件触发。定义两个事件一个启动研究一个标记研究完成。# events.py import inngest class ResearchEvents: START inngest.Event( nameresearch.started, dataTypedDict(ResearchStartedData, {topic: str, user_id: str}), ) COMPLETE inngest.Event( nameresearch.completed, dataTypedDict(ResearchCompletedData, {report: str, user_id: str}), )现在创建核心的处理函数。我们使用agent_kit.ai装饰器它是对inngest.create_function的增强专门用于AI代理场景。# functions/research_agent.py import agent_kit from langchain_openai import ChatOpenAI from .events import ResearchEvents agent_kit.ai( clientinngest_client, runtimeagent_kit_runtime, # 这个函数由 research.started 事件触发 triggerinngest.Trigger(eventResearchEvents.START.name), # 函数ID必须唯一 idresearch-agent, ) async def research_agent(ctx: agent_kit.Context, topic: str, user_id: str): 研究代理的主函数。由 research.started 事件触发。 ctx: agent_kit提供的上下文包含事件数据、步骤工具等。 topic: 研究主题。 user_id: 用户标识。 # 1. 初始化LLM llm ChatOpenAI(modelgpt-4-turbo-preview, temperature0) # 2. 使用Step Tool进行网络搜索 # 这里假设我们有一个封装好的搜索Step Tool search_results await ctx.step.run( search-web, lambda: web_search_tool(topic), # 这是一个返回搜索结果的异步函数 ) # 3. 基于搜索结果让LLM生成报告 prompt f 你是一个研究助手。请根据以下关于“{topic}”的搜索资料撰写一份简洁明了的研究报告摘要。 搜索资料 {search_results} report await llm.ainvoke(prompt) # 4. 发送研究完成的事件可以触发后续流程如发送邮件、通知用户 await ctx.send_event( inngest.Event( nameResearchEvents.COMPLETE.name, data{report: report.content, user_id: user_id}, ) ) return {status: completed, report_preview: report.content[:100]}3.3 实现并注册Step Tool上面的web_search_tool是一个假设的工具。让我们实现一个真实的、使用DuckDuckGo搜索的Step Tool。# tools/web_search.py from langchain_community.tools import DuckDuckGoSearchRun from langchain.tools import Tool import agent_kit # 首先定义一个普通的LangChain Tool duckduckgo_tool DuckDuckGoSearchRun() # 然后使用 agent_kit 的 tool 装饰器将其升级为一个Step Tool # 这赋予了它状态持久化和重试的能力 agent_kit.tool async def web_search_step_tool(query: str) - str: 一个Step Tool用于执行网络搜索。 # 这里可以加入更复杂的逻辑比如结果去重、摘要提取等 result duckduckgo_tool.run(query) # 结果会自动被 agent_kit 持久化 return result # 在你的主函数中现在可以这样调用 # search_results await ctx.step.run(“search-step”, web_search_step_tool, querytopic)关键点在于agent_kit.tool装饰器。它包装了你的函数使其执行被框架托管。当ctx.step.run被调用时框架会检查这个“搜索步骤”是否已经执行过可能在上一次运行中。如果执行过它会直接返回缓存的结果如果没执行过或失败了它会执行函数并将结果缓存。这就是实现“断点续传”和“幂等性”的魔法所在。3.4 运行与部署开发时你可以使用Inngest提供的CLI工具inngest-cli在本地运行你的函数服务它会连接到Inngest的云服务或你的自托管实例处理事件并执行函数。部署时你需要将你的函数服务一个标准的Python Web服务如FastAPI部署到任何可以运行Python的地方如Kubernetes、Fly.io、Railway。这个服务通过HTTP与Inngest服务通信接收要执行的函数信息。而事件的产生者你的主Web应用、队列消费者等则使用INNGEST_EVENT_KEY向Inngest的事件总线发送事件。这种架构实现了计算与编排的解耦。你的函数服务可以独立伸缩Inngest作为中央大脑负责调度。所有工作流的执行历史、日志和状态都可以在Inngest的仪表板中查看这为运维和调试提供了极大的便利。4. 高级模式与最佳实践4.1 处理复杂工作流并行、分支与循环简单的线性流程用单个函数就能处理。但现实中的AI代理往往需要更复杂的逻辑。agent-kit通过“发送内部事件”和“多函数协作”来支持这些模式。并行执行假设在研究报告中你需要同时查询学术数据库和新闻网站。你可以在主函数中并发地触发两个子函数或者向事件总线发送两个不同的事件分别触发两个专精的搜索函数。Inngest引擎会并行处理它们主函数等待所有结果返回后再进行汇总。# 在主函数内 academic_event inngest.Event(namesearch.academic, data{topic: topic}) news_event inngest.Event(namesearch.news, data{topic: topic}) # 发送多个事件触发并行执行 await asyncio.gather( ctx.send_event(academic_event), ctx.send_event(news_event) )条件分支基于LLM的判断来决定下一步流程。例如LLM分析用户问题后判断如果是“订机票”则触发book_flight函数如果是“问天气”则触发query_weather函数。这可以通过在主函数中根据LLM输出发送不同的事件来实现。循环与迭代例如一个“代码审查代理”需要反复阅读代码、提出问题、等待用户回答、再提出新问题。这可以通过函数在结束时发送一个“等待用户输入”的事件当新事件用户回复到来时再次触发同一个或另一个处理函数从而实现循环。需要仔细设计事件数据和函数ID以避免无限循环。4.2 错误处理与重试策略生产级应用必须优雅地处理失败。agent-kit和Inngest提供了多层级的错误处理机制。函数级重试在agent_kit.ai装饰器中你可以配置retries参数。当函数因网络超时、第三方API暂时不可用等临时性错误而抛出异常时Inngest会自动按照策略进行重试。agent_kit.ai( ..., retriesinngest.RetryConfig( attempt5, # 最多重试5次 backoffinngest.ConstantBackoff(delay1000), # 每次重试间隔1秒 ) )Step Tool级重试ctx.step.run调用Step Tool时如果工具执行失败框架也会自动重试该步骤而不会导致整个函数失败。这对于处理不稳定的外部服务非常有用。手动错误处理与补偿对于业务逻辑错误如LLM返回了不符合格式的JSON你需要在函数内部用try...except捕获并决定是抛出异常触发框架重试还是发送一个“失败”事件进入错误处理流程如通知人工客服。对于更复杂的、需要回滚的分布式事务场景你可能需要实现Saga模式即每个步骤都对应一个补偿动作在失败时按顺序执行补偿。4.3 可观测性与调试agent-kit最大的优势之一就是开箱即用的可观测性。所有通过框架执行的工作流都会在Inngest仪表板上留下完整的痕迹。执行历史Run History你可以看到每一个被触发函数的完整时间线包括何时开始、何时结束、每个Step Tool的输入输出、LLM的调用详情如果集成了相关追踪器。事件流Event Stream所有流入和流出的事件都清晰可见帮助你理解工作流的触发逻辑和数据流向。日志集成框架的TracingLogger会将关键操作日志与执行记录关联方便你排查问题。在开发阶段强烈建议充分利用本地开发服务器和仪表板。你可以手动发送测试事件实时观察函数的执行过程查看每一步的状态这比在终端看日志要直观得多。5. 常见问题与实战排坑指南在实际项目中你可能会遇到以下几个典型问题问题一函数似乎被重复执行了。排查思路首先检查事件是否被重复发送了。去Inngest仪表板查看事件流确认同一个event_id的事件是否出现了多次。其次检查你的函数服务是否是多个实例多进程/多Pod且共用了同一个Inngest App ID。Inngest会向所有注册了该函数ID的服务实例发送执行请求这可能导致并发执行。解决方案确保事件发送方的逻辑是幂等的避免在错误处理中重复发送相同事件。对于函数服务确保你的函数逻辑本身是幂等的利用Step Tool和状态管理或者考虑使用Inngest的“并发限制”功能确保同一工作流实例不会并行执行。问题二Step Tool的结果没有按预期缓存/复用。排查思路ctx.step.run的第一个参数是step_id。这个ID必须是在同一个函数运行实例内唯一且稳定的。如果你动态生成step_id例如f”search-{topic}”那么即使输入相同每次运行生成的ID也不同框架就无法命中缓存。解决方案尽量使用静态的、描述性的step_id如”perform-web-search”。如果步骤逻辑确实依赖于输入参数可以创建一个哈希值作为ID的一部分但要确保哈希算法稳定。更好的做法是依赖框架自动管理步骤状态你只需关注业务逻辑。问题三工作流状态变得很大执行变慢。排查思路每个函数和Step Tool的输入输出都会被序列化后存储为工作流状态。如果你在状态中存储了非常大的对象如完整的网页HTML、长文档会导致序列化/反序列化开销大存储成本高甚至可能超出某些限制。解决方案遵循“状态最小化”原则。只将必要的标识符和元数据放入工作流状态。大块数据应该存储在外部的对象存储如S3或数据库中在工作流状态里只保存其引用如URL或主键。Step Tool的设计也鼓励你这样做——工具返回的应该是处理后的摘要信息而非原始数据。问题四如何测试包含agent-kit的代码单元测试对于不涉及Inngest服务交互的纯业务逻辑如LLM提示词构建、数据解析函数可以像普通Python函数一样测试。使用unittest.mock来模拟ctx对象和step.run方法。集成测试测试整个函数的流程比较困难因为它依赖外部服务。推荐的方法是使用Inngest提供的“Dev Server”模式或测试客户端它可以在内存中模拟事件总线和执行引擎让你能在本地完整运行一个工作流而不需要连接真实云服务。这是验证复杂流程正确性的关键。inngest/agent-kit代表了一种构建AI应用的范式转变从关注单次调用的“对话”转向关注长期、多步骤、有状态的“流程”。它通过引入成熟的事件驱动架构和工作流引擎将生产级软件工程的可靠性、可观测性和可维护性带入了AI应用开发领域。虽然初期学习曲线比直接调用OpenAI API要陡峭但对于任何严肃的、计划投入生产的AI项目来说这种在架构上的投资是绝对值得的。它让你能更专注于创造智能本身而不是整天忙于处理队列、数据库和超时重试这些“脏活累活”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2593439.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…