Agentic AI Infra实战:从单机Demo到生产级Agent服务架构与部署
1. 从云栖2026看Agentic AI Infra到底在解决什么问题1.1 一个真实开发者的困境切入去年下半年我接手了一个企业级智能体项目需求很明确让Agent自动完成从工单解析、知识检索、工具调用到结果回写的全链路。听起来不复杂但真正动手之后才发现单机跑通Demo和在生产环境扛住并发之间隔着一整条鸿沟。模型推理延迟忽高忽低、Agent状态在多轮对话中丢失、工具调用超时后整个链路卡死、多个Agent之间共享记忆时数据竞争——这些问题没有一个能靠“换个更强的模型”解决。这就是Agentic AI Infra要处理的事情。它不是某一个具体框架也不是某一个模型而是支撑智能体从“能跑”到“能扛”的那层基础设施。云栖2026把Agentic AI Infra作为核心议题背后的逻辑很清晰当模型能力逐渐趋同真正拉开差距的是工程化能力是谁能把Agent的推理、记忆、工具编排、并发调度、安全防护这些环节做成稳定可复用的底座。这篇文章适合谁看如果你是大模型开发工程师正在从“写Prompt调API”往“搭Agent系统”转型如果你是技术负责人在评估Agent框架选型和部署方案或者你只是对Agentic AI感兴趣想知道这波浪潮里基础设施层到底在做什么——那接下来的内容应该对你有用。我会从架构设计、核心组件、实操部署、并发处理、安全防护几个维度展开尽量把每个技术选择的“为什么”讲清楚。1.2 Agentic AI Infra的核心分层先把整体架构拆开看。一个完整的Agentic AI Infra通常包含以下几层模型服务层负责模型推理的部署、调度、扩缩容。这一层要解决的是推理延迟、吞吐量、GPU利用率的问题。常见方案包括vLLM、TGI等推理引擎配合Kubernetes做弹性伸缩。Agent运行时层这是Agent的“操作系统”管理Agent的生命周期、状态、执行循环。核心要处理的是ReAct循环的调度、工具调用的编排、异常恢复。记忆与状态层短期记忆对话上下文、长期记忆向量数据库、工作记忆任务执行中的中间状态。这一层的难点在于一致性和检索效率。工具与编排层Agent能调用的外部能力包括API、数据库、代码执行沙箱等。编排层负责决定什么时候调什么工具、怎么处理返回结果。可观测与安全层日志、追踪、评测、权限控制、内容安全。生产环境没有这一层就是裸奔。这五层之间的关系不是简单的堆叠而是相互约束的。比如模型服务层的推理延迟直接决定了Agent运行时的心跳频率记忆层的检索速度影响工具编排的决策效率。理解这个分层是做好Agentic AI Infra设计的前提。2. 核心组件拆解Agent运行时与编排引擎怎么选2.1 Agent框架的选型逻辑目前主流的Agent框架大致可以分成几类。一类是以LangGraph、AutoGen为代表的编排型框架强调用图或对话的方式定义Agent的执行流程一类是以CrewAI、MetaGPT为代表的多Agent协作框架侧重角色分工和任务分解还有一类是偏底层的运行时框架比如AgentScope提供更细粒度的状态管理和并发控制。选型的时候不要只看Star数。我踩过的坑是用一个多Agent协作框架去做单Agent的线性任务结果引入了大量不必要的通信开销调试起来极其痛苦。反过来用一个轻量编排框架去做需要动态角色分配的场景又会发现抽象层级不够。我的经验判断标准是这样的场景特征推荐框架类型理由单Agent、固定流程、工具调用为主LangGraph类图编排流程可控调试直观多Agent、动态分工、需要协商AutoGen/CrewAI类内置通信机制角色抽象清晰高并发、需要精细状态管理AgentScope类运行时并发原语完善状态隔离好快速验证、Demo阶段轻量封装如直接调API简单循环减少抽象泄漏快速迭代关键原则是框架的抽象层级要匹配你的问题复杂度。过度抽象和抽象不足都会带来维护成本。2.2 ReAct循环的工程化改造ReActReasoning Acting是大多数Agent的核心执行模式。教科书版的ReAct很简单思考→行动→观察→再思考循环直到任务完成。但生产环境里这个循环需要大量改造。第一个改造点是超时与重试。工具调用可能因为网络问题超时模型推理可能因为负载过高变慢。如果不设超时一个卡住的工具调用会让整个Agent挂起。我的做法是给每个工具调用设置独立的超时时间超时后返回一个结构化的错误信息让模型决定下一步而不是直接抛异常终止。第二个改造点是循环终止条件。原始ReAct靠模型自己判断“任务完成”但模型经常在该停的时候不停或者在该继续的时候提前结束。工程上需要加硬性约束最大循环次数、连续无进展检测、任务完成度校验。我一般会设一个最大步数比如15步超过就强制进入总结阶段。第三个改造点是中间状态的持久化。Agent执行到第7步时服务重启了如果状态没持久化前面6步全白做。所以每一步的思考、行动、观察结果都要写入状态存储支持断点恢复。# 一个简化的ReAct循环工程化示例 class AgentRuntime: def __init__(self, max_steps15, tool_timeout30): self.max_steps max_steps self.tool_timeout tool_timeout self.state_store StateStore() async def run(self, task_id, initial_input): state self.state_store.load(task_id) or { steps: [], status: running, input: initial_input } while state[status] running: if len(state[steps]) self.max_steps: state[status] max_steps_reached break thought await self.think(state) action self.decide_action(thought) try: observation await asyncio.wait_for( self.execute_tool(action), timeoutself.tool_timeout ) except asyncio.TimeoutError: observation {error: tool_timeout, tool: action[name]} state[steps].append({ thought: thought, action: action, observation: observation }) self.state_store.save(task_id, state) if self.is_task_complete(state): state[status] completed return state这段代码看起来简单但每个细节都是踩坑换来的。比如asyncio.wait_for的超时处理如果不捕获TimeoutError整个协程会被取消状态就丢了。再比如状态存储的写入频率每步都写会有IO压力但写太少又影响恢复粒度需要根据任务时长做权衡。2.3 工具调用的编排与沙箱Agent能调用的工具越多能力越强但风险也越大。工具编排要解决三个问题发现、执行、隔离。发现是指Agent怎么知道有哪些工具可用。常见做法是用JSON Schema描述工具注入到系统提示里。但工具多了之后提示会变得很长影响模型效果。更好的做法是做工具检索根据当前任务语义动态召回最相关的几个工具。执行是指工具调用的参数校验和结果处理。模型生成的参数经常有格式问题比如该传整数传了字符串该传数组传了对象。需要在执行前做一层校验和修复执行后把结果标准化成模型能理解的格式。隔离是指工具执行的安全边界。代码执行类工具必须跑在沙箱里限制文件系统访问、网络访问、CPU和内存使用。Docker是最常用的方案但启动开销大高频调用场景下可以考虑更轻量的隔离方案。注意工具沙箱不要用root权限运行不要挂载宿主机敏感目录网络策略默认拒绝、按需放行。这些是底线。3. 实操部署从单机Demo到生产级Agent服务3.1 环境准备与依赖管理假设我们要部署一个支持并发请求的Agent服务。基础环境包括Python 3.11、Docker、Redis状态存储、PostgreSQL持久化、一个向量数据库如Milvus或Qdrant。模型服务可以本地部署也可以用API本地部署推荐vLLM。依赖管理有个坑Agent框架的依赖经常和推理引擎的依赖冲突特别是protobuf、pydantic这类基础库的版本。我的做法是用独立的虚拟环境隔离模型服务和Agent服务通过HTTP或gRPC通信而不是在同一个进程里跑。# 模型服务环境 python -m venv venv_model source venv_model/bin/activate pip install vllm0.6.0 # Agent服务环境 python -m venv venv_agent source venv_agent/bin/activate pip install langgraph0.2.0 redis5.0.0 asyncpg0.29.03.2 并发处理的核心机制“AI Agent怎么扛并发”是热词里高频出现的问题。Agent的并发和普通Web服务不一样因为每个请求的执行时间可能很长几秒到几分钟而且中间涉及多次模型调用和工具调用。直接上多线程是不行的Python的GIL会限制吞吐。用多进程可以绕过GIL但进程间状态共享麻烦。我的推荐方案是异步IO 任务队列 工作池。具体来说API层用FastAPI接收请求把任务丢进Redis队列立即返回一个task_id。后台有一组Worker进程从队列消费任务每个Worker内部用asyncio并发执行多个Agent实例。客户端通过task_id轮询或WebSocket获取结果。# FastAPI入口 from fastapi import FastAPI import redis.asyncio as redis import uuid app FastAPI() r redis.Redis(hostlocalhost, port6379) app.post(/agent/run) async def run_agent(payload: dict): task_id str(uuid.uuid4()) await r.lpush(agent_tasks, json.dumps({ task_id: task_id, input: payload })) return {task_id: task_id, status: queued} app.get(/agent/status/{task_id}) async def get_status(task_id: str): result await r.get(fagent_result:{task_id}) if result: return {task_id: task_id, status: completed, result: json.loads(result)} return {task_id: task_id, status: processing}Worker侧的并发控制是关键。不能无限制地并发因为模型服务的吞吐有限。需要根据模型服务的QPS设置信号量超过就排队。# Worker侧 import asyncio from asyncio import Semaphore class AgentWorker: def __init__(self, max_concurrent10): self.semaphore Semaphore(max_concurrent) async def process_task(self, task): async with self.semaphore: runtime AgentRuntime() result await runtime.run(task[task_id], task[input]) await r.set(fagent_result:{task[task_id]}, json.dumps(result))max_concurrent这个值怎么定我的经验公式是模型服务的最大并发数除以单个Agent任务的平均模型调用次数。比如模型服务能扛100并发一个Agent任务平均调5次模型那Worker的并发上限设20比较安全。实际还要压测调整。3.3 状态存储与记忆管理Agent的状态分三类会话状态当前对话的上下文、任务状态当前任务的执行进度、长期记忆跨会话的知识。会话状态和任务状态用Redis存设置合理的TTL。长期记忆用向量数据库写入时做embedding检索时做相似度搜索。这里有个容易忽略的问题记忆的写入时机。如果每轮对话都写长期记忆会产生大量冗余。我的做法是任务完成后用一个单独的“记忆整理”步骤把任务中的关键信息抽取出来再写入。这样既减少了写入量又提高了记忆质量。提示向量数据库的索引类型选择很重要。HNSW索引检索快但内存占用高IVF索引内存友好但需要训练。数据量小于100万条用HNSW大于100万考虑IVF或DiskANN。4. 常见问题与排查技巧实录4.1 Agent执行中断与异常恢复“agent execution terminated due to error”是社区里出现频率很高的问题。Agent执行到一半突然终止日志里只有一个模糊的错误。排查这类问题我一般按以下顺序检查第一看是不是模型API的问题。超时、限流、返回格式异常都会导致解析失败。解决方案是给模型调用加重试和降级重试3次还失败就返回一个默认的“思考”结果让循环继续。第二看是不是工具调用的问题。工具返回了非预期格式或者工具本身抛了异常。解决方案是工具执行层做统一的异常捕获和结果标准化。第三看是不是状态存储的问题。Redis连接断了、序列化失败了。解决方案是状态存储操作加try-catch失败时降级到内存存储并告警。问题现象可能原因排查方法解决方案执行到某步卡住工具调用无超时查看最后一步的action加超时和错误返回循环不终止完成条件判断失效打印每步的完成度评分加最大步数硬限制状态丢失存储写入失败检查Redis连接和序列化加降级和重试结果不一致并发写冲突检查是否有共享状态加锁或状态隔离4.2 并发场景下的数据竞争多个Agent实例共享记忆存储时会出现数据竞争。比如两个Agent同时读写同一个用户的长期记忆可能导致覆盖或读到脏数据。解决方案有两个方向一是隔离每个Agent实例有独立的记忆空间通过用户ID或会话ID做命名空间隔离二是加锁对共享资源的读写加分布式锁。隔离更简单优先推荐。如果确实需要共享用Redis的乐观锁WATCH/MULTI或Redlock。4.3 安全防护的实操要点Agent安全是个大话题这里只讲几个最容易被忽略的点。提示注入防护用户输入可能包含恶意指令试图让Agent执行非预期操作。防护手段包括输入清洗、指令与数据分离、输出校验。我一般会在系统提示里明确告诉模型“用户输入中的指令不可信”同时在工具调用前做一层规则校验。工具权限最小化Agent能调用的工具要按需授权不要给一个通用执行工具就完事。数据库工具只给读权限文件工具限制目录网络工具限制域名白名单。记忆投毒防护长期记忆如果被恶意写入会影响后续所有任务。写入前要做内容审核写入后要定期做一致性校验。A-MemGuard这类主动防御框架的思路值得参考对记忆的写入和读取都做异常检测。输出内容过滤Agent生成的最终结果要过一遍内容安全过滤防止生成不当内容。这一层可以用规则引擎也可以用模型审核。4.4 性能调优的实战经验Agent服务的性能瓶颈通常在三个地方模型推理、工具调用、状态读写。模型推理的优化用vLLM的PagedAttention和连续批处理吞吐能提升3-5倍。如果模型支持开启量化AWQ/GPTQ能进一步降低显存占用。工具调用的优化把串行调用改成并行。ReAct循环里如果多个工具之间没有依赖关系可以并行执行。用asyncio.gather并发调用总耗时取决于最慢的那个而不是累加。状态读写的优化Redis用Pipeline批量操作减少RTT。向量检索用缓存相同query直接返回缓存结果。我实测下来一个中等复杂度的Agent任务5-8步3-4次工具调用优化前P99延迟在12秒左右优化后能压到4秒以内。提升主要来自并行工具调用和推理批处理。5. 从0到1搭建Agent项目的学习路径建议5.1 分阶段的学习路线如果你刚开始接触Agent开发不要一上来就啃框架源码。我的建议路线是这样的第一阶段理解核心概念。把ReAct、CoT、Tool Use这几个基础模式搞清楚能手写一个最简单的Agent循环不用任何框架直接调模型API。这个阶段的目标是理解Agent的本质是“模型循环工具”。第二阶段掌握一个主流框架。选LangGraph或AutoGen深入用一遍把官方示例跑通然后改造成自己的场景。这个阶段的目标是理解框架解决了哪些工程问题。第三阶段补齐基础设施知识。学习异步编程、消息队列、向量数据库、容器化部署。这个阶段的目标是能把Agent服务部署到生产环境。第四阶段深入特定领域。比如做企业级Data Agent就深入学SQL生成和查询优化做代码Agent就深入学代码解析和沙箱执行。5.2 面试与进阶的准备方向Agent方向的面试题现在主要集中在几个方面ReAct的原理和局限、多Agent通信机制、记忆管理方案、并发处理、安全防护。准备的时候不要只背概念要能结合具体场景讲清楚技术选型的理由。比如问到“怎么设计一个支持高并发的Agent服务”好的回答应该包含异步IO模型、任务队列、工作池、信号量控制、状态存储选型、降级策略。而不是简单说“用多线程”或“用Kubernetes”。进阶方向可以考虑Agent评测体系怎么量化Agent的好坏、Agent自我进化怎么让Agent从失败中学习、多模态Agent怎么处理图像和音频输入。这些方向目前都还没有标准答案是做出差异化的机会点。5.3 我个人的一些体会做Agent项目这一年多最大的感受是模型能力决定上限工程质量决定下限。很多Demo看起来很惊艳但一到生产环境就各种问题根本原因不是模型不行而是基础设施没跟上。另一个体会是不要过度追求“全自动”。很多场景下人机协作的效果比纯自动好得多。Agent负责处理80%的常规情况剩下20%的边界情况交给人工整体效率反而更高。这也是Agentic AI Infra设计时需要考虑的怎么优雅地支持人工介入。最后分享一个小技巧调试Agent的时候把每一步的思考、行动、观察都打印成结构化的日志用不同的颜色区分。这样一眼就能看出是哪一步出了问题。我用的方案是Rich库的Console配合自定义的格式化器调试效率提升很明显。这个领域变化很快新的框架和工具层出不穷。但底层的东西——异步、并发、状态管理、安全——是不变的。把这些基础打牢上层怎么变都能快速适应。

相关新闻

OpenRig:开源自动角色绑定系统,让骨骼绑定不再耗时

OpenRig:开源自动角色绑定系统,让骨骼绑定不再耗时

1. 为什么独立动画师都在聊 OpenRig 做动画的朋友应该都有这种体验:角色骨骼绑定这件事,有点像装修毛坯房——管线、承重、水电都没人替你操心,弄到一半发现骨架方向错了,控制器动不了,权重刷到手抽筋,最后…

2026/10/2 22:50:06 阅读更多 →
openrig模块化机架:用铝型材打造自由装配的设备支架

openrig模块化机架:用铝型材打造自由装配的设备支架

做硬件折腾这么多年,我见过不少号称“模块化”“可重构”的架子方案,但大多数要么是螺丝孔对不上,要么是承重一上就晃,真正能让我拆了又装、反复调整还不觉得烦的很少。看到“openrig”这个词的时候,我第一反应是——这…

2026/10/2 22:50:06 阅读更多 →
128GB统一内存跑Qwen-Image 2.1:Ryzen AI Max+ 395实战详解

128GB统一内存跑Qwen-Image 2.1:Ryzen AI Max+ 395实战详解

1. 这台"大内存怪"凭什么能跑文生图:Ryzen AI Max 395的架构逻辑Ryzen AI Max 395这台128GB统一内存的笔记本,我用了整整三周,干得最多的一件事就是在本地跑Qwen-Image 2.1出图。先说明白这篇东西写给谁:已经入手或打算…

2026/10/2 22:49:05 阅读更多 →

最新新闻

9款AI论文工具实测:从开题报告到文献综述,TaoToken统一Key怎么配

9款AI论文工具实测:从开题报告到文献综述,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/2 23:29:48 阅读更多 →
2026年10月长宁区政企销毁Top3推荐,优缺点全解析

2026年10月长宁区政企销毁Top3推荐,优缺点全解析

政企销毁到底在销毁什么 政企销毁, 这个意思其实就是要对企业和政府机构的涉密文件做过期产品来做专业的处置。长宁区的写字楼密集得很, 这个地方每年都会产生大量的合同是要被销毁的。还有很多账册是需要被处理的, 那些旧的设备也是要报废的。很多人心里头都以为销毁这个东西就…

2026/10/2 23:29:48 阅读更多 →
CSS hover 选择器全解析:从基础到进阶的几种选择方式

CSS hover 选择器全解析:从基础到进阶的几种选择方式

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

2026/10/2 23:29:48 阅读更多 →
模电笔记:从半导体器件到放大电路与直流电源的完整复习框架

模电笔记:从半导体器件到放大电路与直流电源的完整复习框架

1. 模电到底难在哪:先把这个想明白再看笔记模电这门课的打开方式,跟高数、电路分析完全不一样。当年我期末前抱着教材背了两天公式,结果拿到试卷发现满纸都是不认识的电路,整个人当场就懵了。后来真正做硬件、调板子,才…

2026/10/2 23:29:48 阅读更多 →
汽车电子知识体系全拆解:从CAN总线到OTA升级的实战学习路径

汽车电子知识体系全拆解:从CAN总线到OTA升级的实战学习路径

1. 汽车电子知识体系的全景拆解1.1 为什么汽车电子值得系统化学习十年前我刚入行做车载控制器测试的时候,整个部门能说清楚CAN报文里每一个字节含义的人不超过三个。那时候大家修车靠经验,调ECU靠试错,遇到总线通信故障基本就是换件大法。现在…

2026/10/2 23:29:48 阅读更多 →
工程师成长之路:从入门到独立负责的实战复盘

工程师成长之路:从入门到独立负责的实战复盘

先说结论:这篇文章是写给那些正在犹豫要不要走工程师这条路、或者刚上路没多久还比较迷茫的同学的。我自己就是一路踩坑走过来的人,从刚开始连 Git 都不会用的纯小白,到后来能独立负责模块、带新人、做技术方案,中间确实有不少值得…

2026/10/2 23:28:48 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/2 10:36:31 阅读更多 →
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/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练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/2 6:09:11 阅读更多 →