OpenXmlSDK向PowerPoint批量插入幻灯片:绕过COM的PPTX操作指南
简介面向需要在未安装Office环境下操作PowerPoint文件的.NET开发者该资源针对如何使用OpenXmlSDK2.0向PPTX演示文稿插入新幻灯片这一常见需求提供了完整的C#示例工程。压缩包仅13KB共11个文件包含6个.cs源代码文件、2个.resx资源文件以及settings、csproj、sln等工程配置文件可直接用Visual Studio打开运行。代码演示了通过PowerPointPresentationPart打开PPTX、操作幻灯片集合、创建SlidePart、更新presentation.xml中的引用并保存的完整过程并附有Form1.cs界面示例方便对照实际效果。资源包中另包含一个空的PPTX文件用于测试配合作者博客中的说明可快速理解Open XML结构下的幻灯片插入机制。已有479人学习下载适合初次接触OpenXmlSDK、希望以最小示例掌握PPTX编程操作的开发者在此基础上可进一步扩展布局与形状操作用于自动化生成或批量修改演示文稿的场景。1. OpenXmlSDK 2.0 往 PowerPoint 2010 里插新页不碰 COM 的批处理方案批量生成演示文稿的时候最折磨人的就是把新幻灯片逐页插进几百份 PPTX。用 COM 调 PowerPoint 做这件事速度慢不说弹个对话框整个流程就卡死。换 OpenXmlSDK 2.0 直接操作文件结构不启动 Office 进程批量插入才真正变成能无人值守的脚本活。这套资源就是干这个的基于 OpenXmlSDK 2.0向 PowerPoint 2010 格式的 .pptx 中插入新幻灯片。核心思路是把 PPTX 拆成 XML 包来看——复制模板页、挂好引用关系、再写回文件三步就能插出一页来。它适合两类人一类是被 COM 自动化折腾到没脾气的工具开发者另一类是正在做自动出稿、需要批量改 PPT 的后端或运维工程师。读完这篇你能自己跑通一次插入也能在 PowerPoint 提示“文件已损坏”的时候知道该去查哪里。2. 先在脑子里拆开 PPTXsldIdLst、SlidePart 与 Relationship 三件套2.1 PPTX 本质是 ZIPpresentation.xml 只记录页面顺序.pptx 和 .docx、.xlsx 一样本质是一个 ZIP 压缩包里面是一堆 XML 和媒体文件。平时 PowerPoint 打开文件时帮你把这些部件解压、解析、再合回去而 OpenXmlSDK 做的就是这件事的编程版。想直观看到结构把 .pptx 后缀改成 .zip 解压就行。对插入幻灯片来说有三个文件要特别留意路径作用插入新页时要动吗ppt/presentation.xml记录全部页面的顺序核心标签是p:sldIdLst要往里挂新的 SlideIdppt/slides/slideN.xml每一页的实际内容要新建一个 SlidePartppt/slides/_rels/slideN.xml.rels每页引用了哪些图片、版式靠 rId 关联要必须补引用注意 presentation.xml 里的 sldIdLst 只是“顺序表”。每一页真正的 XML 内容在 slides 目录下页面顺序由 sldIdLst 中 SlideId 元素的排列顺序决定。所以“插入到第 3 页后面”这个操作本质是往 sldIdLst 的对应位置插入一个 SlideId 节点而不是去改 slide2.xml、slide3.xml 的文件名。文件名和顺序是两回事理解这一点后面看代码就不会晕。2.2 所有跳转都靠 rId关系 ID 才是真正的胶水XML 部件之间不能直接写文件路径而是靠 relationship 文件里的 rId 互相指。幻灯片里引用一张图片写的是a:blip r:embedrId2/rId2 定义在 slideN.xml.rels 里指向某张图片部件幻灯片引用版式靠p:sldLayoutId r:idrId1/。打开一个 slideN.xml.rels长这样Relationships xmlnshttp://schemas.openxmlformats.org/package/2006/relationships Relationship IdrId1 Type.../slideLayout Target../slideLayouts/slideLayout2.xml/ Relationship IdrId2 Type.../image Target../media/image3.png/ /Relationships这就带来了一个直接后果你不能只把 slideN.xml 复制一份改个文件名就完事。复制出来的 XML 里还留着 rId2、rId1 这些引用如果新部件没有对应的 relationshipPowerPoint 打开时就会直接报损坏。这才是插入幻灯片最容易翻车的根源。所以完整的插入动作必须包含三件事复制 XML 内容、带着相同 rId 重建图片等部件的引用、保持版式引用不丢。顺序错了或者漏一项页面都会出问题。后面第 4 章的避坑项基本都跟这三件事有关先记住这句话。2.3 SDK 2.0 的编码骨架打开、改、存三步用 SDK 2.0 操作 pptx代码骨架非常固定。第一步是在 VS 里给项目加上 DocumentFormat.OpenXml 的引用2.0 时代一般是直接引用 DLL或者用 NuGet 拉 2.x 的包目标框架 .NET Framework 3.5 或 4.0 都行。写入逻辑的主体是这样using DocumentFormat.OpenXml.Packaging; using (PresentationDocument doc PresentationDocument.Open(inputPath, true)) { PresentationPart presPart doc.PresentationPart; // 在这里读取、修改结构 presPart.Presentation.Save(); }Open 方法的第二个参数 isEditable 设为 true表示以可写方式打开文件整个操作包在 using 里关闭时自动释放文件流避免文件被占住。所有修改都落在内存里的对象模型上最后 Save 一次写回。注意这里保存的是 PresentationPart 的根元素也就是 presentation.xml别以为整个文档都存了——slide 的保存要单独做第 3 章会看到。另外提一句SDK 2.0 的 API 命名和后续 3.x 大体一致但 3.x 里新增了不少强类型属性版本升级时这段代码基本不用大改。资源是为 2.0 写的你在 3.x 环境里跑也不会有兼容性灾难只是个别方法签名可能提示过时。这个骨架能覆盖绝大多数 Office 文档操作插入幻灯片只是把“复制模板页、补引用、挂 SlideId”三步填进去。3. 插入新幻灯片完整代码与参数拆解3.1 选模板页克隆现成页面而不是白手起家给新页面造内容有两种路子一种是从零拼p:sp、p:graphicFrame工作量大还容易漏属性另一种是把现有页面整个克隆过来再替换内容。做批处理的人都会选后者因为克隆能完整保留版式、母版元素、占位符位置新页面至少不会长得跟别的页画风不一致。选哪页当模板我一般取插入位置后面的那页这样新页继承的版式和相邻页一致。定位模板页的正确姿势是从 sldIdLst 里按索引取而不是直接数 slides 目录的文件名using System.Linq; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Presentation; SlideIdList slideIdList presPart.Presentation.SlideIdList; SlideId anchorSlideId slideIdList.ElementAt(sourceIndex); string anchorRelId anchorSlideId.RelationshipId.Value; SlidePart templatePart (SlidePart)presPart.GetPartById(anchorRelId);这里有两个点要解释。第一ElementAt(sourceIndex) 是从 sldIdLst 里取第 sourceIndex 个 SlideId这个顺序才是用户看到的页面顺序slides 目录里的文件名顺序不一定对得上。第二SlideId 的 RelationshipId 是字符串型的 rId通过 GetPartById 才能真正拿到那个 SlidePart 对象。以后你想定位任何一页都走这条“列表 → rId → 部件”的路径最稳妥。3.2 核心插入逻辑复制 SlidePart、补引用、挂 SlideId下面这段是完整的插入方法我按“克隆内容 → 重建关系 → 挂列表”三步写每一步都有注释static void InsertSlideAfter(PresentationDocument doc, int insertAfterIndex) { PresentationPart presPart doc.PresentationPart; Presentation pres presPart.Presentation; SlideIdList slideIdList pres.SlideIdList; // 0. 定位锚点页新页插在它后面 SlideId anchorSlideId slideIdList.ElementAt(insertAfterIndex); SlidePart templatePart (SlidePart)presPart.GetPartById(anchorSlideId.RelationshipId.Value); // 1. 新建一个 SlidePart并深度克隆模板页的内容 SlidePart newSlidePart presPart.AddNewPartSlidePart(); newSlidePart.Slide (Slide)templatePart.Slide.CloneNode(true); // 2a. 重建版式引用新页继续用模板页的版式 SlideLayoutPart layoutPart templatePart.SlideLayoutPart; if (layoutPart ! null) { string layoutRelId templatePart.GetIdOfPart(layoutPart); newSlidePart.AddPart(layoutPart, layoutRelId); } // 2b. 复制图片部件rId 必须和克隆后的 XML 里一致 foreach (IdPartPair pair in templatePart.Parts) { if (pair.OpenXmlPart is ImagePart imagePart) { ImagePart newImage newSlidePart.AddImagePart(imagePart.ContentType, pair.RelationshipId); newImage.FeedData(imagePart.GetStream()); } } // 3. 生成全局唯一的 SlideId 并挂到顺序表 uint maxId 255; foreach (SlideId item in slideIdList) { if (item.Id ! null item.Id.Value maxId) maxId item.Id.Value; } uint newSlideIdValue maxId 1; SlideId newSlideId new SlideId(); newSlideId.Id newSlideIdValue; newSlideId.RelationshipId presPart.GetIdOfPart(newSlidePart); slideIdList.InsertAfter(newSlideId, anchorSlideId); // 4. 分别保存slide 内容和 presentation.xml 都要落盘 newSlidePart.Slide.Save(); pres.Save(); }逻辑说明拆开讲。第 1 步里 AddNewPart 会在 presentation.xml.rels 里自动生成一条新关系SDK 内部帮你分配一个 rId后面 GetIdOfPart 能取出来新 SlideId 就指向它。CloneNode(true) 是深克隆模板页里的所有形状、文本、占位符全都复制到新页哪怕里面有复杂的组合图形也能带过来。第 2 步是重点。版式这块模板页的 slide XML 里写着p:sldLayoutId r:idrId1/所以我用 AddPart 给新 SlidePart 补上同 ID 的版式关系新页才能继承母版。图片这块克隆后的 XML 里a:blip r:embedrId2/还是原来的 rId我必须用 AddImagePart 显式指定同样的 RelationshipId 重建部件图片引用才不悬空。FeedData 是把模板图片的二进制流直接灌给新部件。第 3 步里SlideId 的 Id 属性和 RelationshipId 是两个完全不同的东西Id 是全局唯一的无符号整数起什么值无所谓但绝不能重复PowerPoint 自己生成的文件一般从 256 开始所以我从 255 起算取最大值加一避开冲突RelationshipId 是字符串指向 presentation.xml.rels 里的那条关系。最后用 InsertAfter 把新 SlideId 挂在锚点后面这就是“插到某页之后”的落点。3.3 关键参数说明插入位置、编号起点、保存方式先说插入位置。insertAfterIndex 传 0 表示插到第一页后面传最后一页的索引就相当于追加到末尾。代码里我用的是 InsertAfter如果你改成 Append新页永远在最后不能指定中间位置——这是最常见的参数误用第 4 章还会提。再说编号起点。maxId 初始值设 255是为了兼容那些由其他工具生成、SlideId 不连续的文件。如果文件里恰好有页 id 是 300那新页就是 301不会算错。千万别自作主张写死一个 256重复了 PowerPoint 直接判定文件损坏。最后是保存方式。newSlidePart.Slide.Save() 是把克隆出来的 slide XML 写进包pres.Save() 是把更新后的 sldIdLst 写回 presentation.xml。两个都要调漏了哪一个要么新页内容是空的要么页面顺序没变化。代码包里封装的 InsertSlide 方法就是按这个流程写的拿回去把路径一换就能跑省去自己再踩一遍这些细节。4. 插入幻灯片避坑指南五个最容易翻车的地方4.1 文件打不开提示“已损坏”基本都是 id 或关系问题现象插入后双击 pptxPowerPoint 弹出“发现无法读取的内容是否修复”或者干脆打不开。原因两处最常见。一是 SlideId 的 Id 属性跟现有页面重复二是克隆出来的 slide XML 里还有悬空的 rId 引用没重建。这两种都属于结构性问题PowerPoint 宁可报错也不猜。解决先用第 3 章的代码核对一遍新增的 SlideId 是否唯一再检查模板页的 Parts 里有没有漏掉的图片、图表。最快的排查手段是拿解压工具看新 slideN.xml.rels对照 XML 里出现的每个 r:id/r:embed确认条条有归宿。从那以后我每次批量插入都强制走一遍这个核对流程基本一次过。4.2 图片全丢只克隆了 XML没克隆媒体部件现象新页能打开版式也在但原来模板页上的图片位置全是空白或者显示红叉。原因只执行了 CloneNode(true)没遍历 templatePart.Parts 复制 ImagePart。slide XML 里的r:embedrId2还指着 rId2但新 SlidePart 里根本没有这条关系图片自然显示不出来。解决按 3.2 的 2b 步骤遍历模板 SlidePart 的 Parts把所有 ImagePart 按原 rId 重建并灌入二进制流。要注意的是如果模板页里还有图表ChartPart、SmartArtDiagramPart逻辑一样按部件类型重建、保持 rId、FeedData 或对应写入方法。别觉得这次只处理图片就够换成带图表的模板照样会踩提前把分支写好。4.3 文件被占用可写打开和流释放没处理好现象代码跑着跑着抛 IOException提示文件正由另一进程使用或者程序结束以后pptx 文件在资源管理器里删不掉。原因一是 PPTX 本身被 PowerPoint 开着Open 时 isEditable 设为 true 就冲突了二是代码里为了复制图片手动开了 Stream 却忘了关SDK 的 using 管不到你手动创建的流。解决批量处理前先确认没有 Office 进程占用目标文件自己开的 Stream 一定要用 using 包住比如 FeedData 那段改成using (Stream src imagePart.GetStream()) { newImage.FeedData(src); }。如果文件确实被别人占用退一步用只读方式打开另存为新文件再操作绕开锁。4.4 新页总是跑到最后一页Append 和 InsertAfter 没分清楚现象代码明明传了插入位置结果新页每次都出现在演示文稿最后。原因slideIdList.Append(newSlideId) 是追加到列表末尾不看任何位置参数。很多人习惯性用 Append以为改改参数就能指定位置其实 OpenXml SDK 里 Append 就是不排序的尾部插入。解决要插到指定页后面就用 InsertAfter(newSlideId, anchorSlideId)要插到某页前面就 InsertBefore(newSlideId, anchorSlideId)。锚点必须是列表里现有的 SlideId 元素从 ElementAt(index) 取最稳。这个坑的隐蔽之处在于代码不报错只有打开文件才看出位置不对所以写完务必目检一遍页面顺序。4.5 版式错乱layout 引用被悄悄丢掉现象新页能打开、图片也在但页面背景、母版上的装饰元素跟相邻页不一样像是换了套默认模板。原因克隆 slide XML 时p:sldLayoutId r:idrId1/里那个 rId 在模板页的 rels 里是指向某张 slideLayout 的如果新 SlidePart 没重建这条关系PowerPoint 会按自己的默认规则重新指派版式视觉上就是“画风突变”。解决3.2 的 2a 步不能省显式把模板页的 SlideLayoutPart 用原 rId AddPart 到新 SlidePart。注意 AddPart 时要带上从模板取到的 layoutRelId让新页的 XML 引用和实际关系对得上如果你用无参的 AddPartSDK 会分一个全新的 rIdXML 里的旧 rId 照样悬空问题依旧。这个点最容易跟 4.2 混在一起记住布局管“样子”媒体管“内容”两套关系都得补。5. 进阶插入后先验证再定位新页补内容5.1 用 OpenXmlValidator 先扫一遍再关文件批量插入跑完后别急着交付用 SDK 自带的 OpenXmlValidator 扫一遍整个演示文稿能抓出一堆打开文件才会暴露的问题using DocumentFormat.OpenXml.Validation; OpenXmlValidator validator new OpenXmlValidator(); foreach (ValidationErrorInfo err in validator.Validate(presPart)) { Console.WriteLine($部件: {err.Part?.Uri}, 问题: {err.Description}); }这段代码放在 pres.Save() 之后输出里如果有错误就按错误描述的部件路径去查。Validator 抓不住逻辑问题比如图片配错了但能抓 Schema 层面的硬伤比如子元素顺序不对、属性值非法。我的习惯是任何一次批量修改跑完流程必然过一遍 Validator黑匣子变透明省下的都是人工开文件的返工时间。5.2 通过 SlideId 找到新页并追加一个文本框插入完成后新页就在 slideIdList 里想继续往这页加工内容还是走“列表 → rId → 部件”的路径定位然后往 ShapeTree 里追加元素SlideId lastId slideIdList.Last(); SlidePart newPart (SlidePart)presPart.GetPartById(lastId.RelationshipId.Value); ShapeTree shapeTree newPart.Slide.CommonSlideData.ShapeTree; uint nextShapeId shapeTree.DescendantsShape().Max(s s.Id.Value) 1; Shape textBox new Shape( new NonVisualShapeProperties( new NonVisualDrawingProperties { Id nextShapeId, Name NewBox }, new NonVisualShapeDrawingProperties()), new ShapeProperties( new Transform2D( new Offset { X 914400L, Y 914400L }, new Extents { Cx 3657600L, Cy 457200L }), new PresetGeometry { Preset ShapeTypeValues.Rectangle }), new TextBody( new BodyProperties(), new ListStyle(), new Paragraph( new Run( new Text(新插入的页面) { Space SpaceProcessingModeValues.Preserve })))); shapeTree.Append(textBox); newPart.Slide.Save();注意三点Shape 的 Id 必须在本页内唯一所以我从现有所有 Shape 里取最大值加一坐标单位是 EMU914400 等于一英寸不想换算就记住跟像素、厘米都不是一回事Text 的 Space 属性必须设 Preserve否则中文开头结尾的空格会被吃掉。这套追加逻辑同样适合给模板页替换标题、批量打水印本质都是定位 ShapeTree 后操作。从那以后我每次跑完插入脚本都强制走一遍 Validator再打开文件目检一次版式和图片这个习惯帮我挡掉了不少返工。这套资源里的流程和代码都是按这个标准整理的希望帮到你。本文还有配套的精品资源点击获取

相关新闻

C#短信猫开发:PDU编码、AT指令与串口通信实战详解

C#短信猫开发:PDU编码、AT指令与串口通信实战详解

简介:C#短信发送程序(pdu_class)是一份面向需要掌握GSM短信底层开发技能的C#程序员的实例工程,围绕PDU(Protocol Data Unit)类实现短信发送功能,覆盖7位/8位/16位编码、Submit PDU构造、SMSC号码…

2026/10/17 13:51:49 阅读更多 →
微信小程序开发实战:WXML、WXSS、事件、WXS与组件核心指南

微信小程序开发实战:WXML、WXSS、事件、WXS与组件核心指南

微信小程序开发里,WXML、WXSS、事件系统、WXS、组件这五块内容,基本构成了日常写页面的全部工作。很多人学完基础语法后卡在“能看懂但写不出来”的阶段,问题往往不在逻辑,而在于没搞清这五者各自的职责边界和配合方式。这篇内容面…

2026/10/17 13:51:49 阅读更多 →
Java泛型从入门到原理:类型擦除、通配符与实战避坑指南

Java泛型从入门到原理:类型擦除、通配符与实战避坑指南

如果你写过几年 Java,一定在某个深夜被ClassCastException支配过——那一行异常信息只告诉你哪里转失败了,就是不告诉你到底传进来的是什么。泛型就是解决这个问题的,它把本该在运行期爆发的类型问题,直接摁死在编译期。这篇就围绕…

2026/10/17 13:50:48 阅读更多 →

最新新闻

LayoutLM v3深度解析:多模态文档智能模型微调实战

LayoutLM v3深度解析:多模态文档智能模型微调实战

每次看到开源社区放出的文档智能模型有实质更新,我都要停下来仔细研究一番,LayoutLM系列就是这中间绕不开的名字。这个系列从最初把文本、布局、图像三种模态塞进同一个预训练框架开始,一步步变成了表格解析、票据识别、合同信息抽取这些场景…

2026/10/18 0:46:29 阅读更多 →
Event2Mind:让机器从事件文本中推理意图与反应

Event2Mind:让机器从事件文本中推理意图与反应

每次读到关于事件理解的研究,我都会习惯性地先想一个问题:机器读一句话,真的“读懂了”吗?拿“这个人被公司开除了”来说,字面上是一个解雇事件,但稍微有点常识的人都会接着想:他慌不慌&#xf…

2026/10/18 0:46:29 阅读更多 →
向量与矩阵范数详解:从L1/L2到谱范数的机器学习应用指南

向量与矩阵范数详解:从L1/L2到谱范数的机器学习应用指南

1. 为什么我们要关心“范数”这个数学工具第一次接触“范数”这个词,很多人会觉得它离实际开发很远,像是数学系课本里才会出现的抽象概念。但如果你做过机器学习、数值计算、信号处理,甚至只是用过正则化去调一个过拟合的模型,那你…

2026/10/18 0:46:29 阅读更多 →
多层网络关键节点识别:超邻接矩阵与GNN实战指南

多层网络关键节点识别:超邻接矩阵与GNN实战指南

简介:这份文档面向人工智能、大模型与复杂网络分析方向的学习者和研究者,系统梳理多层网络建模与关键节点智能识别技术。内容从多层网络的定义、模型分类与应用领域切入,逐步展开关键节点的定义、重要性及常见识别方法,并深入讲解…

2026/10/18 0:46:29 阅读更多 →
集团企业指标体系落地指南:从指标字典到数据治理的完整路径

集团企业指标体系落地指南:从指标字典到数据治理的完整路径

简介:《大型集团企业指标体系建设方案》PPT面向集团企业管理者、战略规划与运营管理岗位,是一套可直接套用的指标体系构建模板。内容从建设背景与意义切入,提出SMART指标原则,重点讲解战略目标、业务板块、运营管理、支持保障四个…

2026/10/18 0:46:29 阅读更多 →
NPDP BOK第二版:七大知识领域解析与产品开发实战应用

NPDP BOK第二版:七大知识领域解析与产品开发实战应用

简介:这是PDMA(产品发展与管理协会)官方编译的NPDP知识体系指南第二版,面向计划参加NPDP认证考试的产品经理与产品开发专业人士,是系统了解产品创新与管理核心内容的权威参考书。全书围绕七大领域展开:策略…

2026/10/18 0:45:28 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →