从零搭建PPT自动化生成工具:python-pptx技术选型与核心实现

1. 从零搭建一个PPT自动化生成工具,我为什么选了这条路

做技术分享这些年,被问得最多的问题之一就是:“有没有办法让PPT自动生成?”问的人有做数据分析的、有做项目汇报的、也有做教学课件的。他们的共同痛点是:内容已经有了,但把内容搬运到PPT里、排版、调格式、统一风格这一套流程,实在太耗时间。一个二十页的汇报PPT,内容准备可能只花两小时,排版却要花四小时。这个比例是失衡的。

ppt-master这个项目,就是冲着这个失衡去的。它的核心目标很明确:把结构化的内容(比如Markdown、JSON、YAML)直接转换成一份可用的、排版规整的PPT文件,让创作者把精力集中在内容本身,而不是拖拽文本框和对齐图标上。

这篇文章适合三类人看:第一类是想了解PPT自动化生成原理的技术人员;第二类是有批量出PPT需求但不想手动重复劳动的业务人员;第三类是想自己动手做一个类似工具、但不知道从哪里下手的开发者。我会从架构设计、技术选型、核心实现、踩坑经验几个维度,把这个项目的完整思路拆开讲。

需要提前说明的是,ppt-master不是一个已经成熟到可以开箱即用的商业产品,它更像是一个持续迭代的个人项目。我写这篇文章的目的,是把我在构建过程中积累的判断和教训分享出来,让你少走弯路。如果你正好有类似需求,可以直接参考里面的方案;如果你只是想了解一下PPT自动化的技术路线,也能有个全局认知。

2. 技术路线选型:为什么最终落在python-pptx上

2.1 三条可选路线的对比

在动手之前,我调研了三条主流路线,每条路线都有各自的适用场景和明显短板。

第一条路线是操作Office COM接口。在Windows环境下,可以通过COM组件直接调用PowerPoint应用程序,实现几乎所有的PPT操作。这条路线最大的优势是功能完整——PowerPoint能做的事情,你都能通过COM做到。但问题也很致命:它依赖本机安装Office,无法跨平台,运行速度慢,而且稳定性堪忧。一旦PowerPoint进程卡死,整个自动化流程就断了。对于需要批量生成、部署在服务器上的场景,这条路基本走不通。

第二条路线是直接操作OOXML。PPTX文件本质上是一个ZIP包,里面是一堆XML文件。理论上你可以直接读写这些XML来生成PPT。这条路线的优点是零依赖、完全可控。但缺点同样突出:OOXML的规范极其庞大,光是幻灯片布局(Slide Layout)和占位符(Placeholder)的继承关系就够你研究好几天。手写XML生成PPT,开发效率极低,维护成本极高。

第三条路线是使用python-pptx库。这是一个Python第三方库,封装了OOXML的底层操作,提供了面向对象的API。你可以用它创建幻灯片、添加文本框、插入图片和表格、设置样式。它不依赖Office安装,跨平台运行,速度也够快。虽然它不能实现PowerPoint的全部功能(比如动画和切换效果的支持就很有限),但对于绝大多数自动化生成场景来说,已经绰绰有余。

我最终选择了python-pptx。原因很简单:在功能覆盖度和开发效率之间,它找到了最好的平衡点。我的目标不是做一个功能完整的PPT编辑器,而是做一个能把结构化内容快速转成规整PPT的工具。python-pptx的能力边界,恰好覆盖了这个需求。

2.2 python-pptx的能力边界与应对策略

选定了python-pptx之后,我花了不少时间摸清它的能力边界。有些事情它做得很好,有些事情它做不了,需要绕路解决。

它做得好的事情包括:创建演示文稿和幻灯片、添加文本框并设置字体段落格式、插入图片和表格、使用母版和布局、设置形状的填充和边框。这些覆盖了PPT排版的核心需求。

它做不了或者做起来很别扭的事情包括:动画效果、幻灯片切换、SmartArt、图表的部分高级样式、以及复杂的占位符继承逻辑。对于这些,我的策略是:能绕就绕,绕不过就放弃。比如动画效果,自动化生成的PPT本身就不太需要动画,直接不做。比如图表,python-pptx支持基础图表类型,但样式定制能力有限,我的做法是先用matplotlib生成图片,再作为图片插入,这样反而更灵活。

还有一个容易忽略的点:python-pptx对中文的支持。默认情况下,如果你不指定中文字体,生成的PPT在部分环境下中文会显示为乱码或者默认字体。解决办法是在设置字体时显式指定中文字体名称,比如“微软雅黑”或“思源黑体”。这个坑我在项目初期踩过,后面会详细说。

2.3 为什么不用模板引擎的思路

有人可能会问:为什么不直接用模板引擎(比如Jinja2)替换PPTX里的文本?这个思路其实我试过。具体做法是:先做一个PPT模板,里面用占位符标记需要替换的内容,然后用python-pptx打开模板,遍历所有形状,找到占位符并替换。

这个方案在简单场景下能用,但很快就遇到了瓶颈。第一,PPT里的文本可能分散在多个形状、表格、组合形状中,遍历逻辑会变得很复杂。第二,替换文本后,原有的格式(字体、字号、颜色)可能丢失,需要额外处理。第三,如果内容长度变化较大,原有的排版会被撑破,需要重新调整布局。

所以最终我放弃了纯模板替换的思路,转向了程序化生成布局的方案。也就是说,PPT的每一页、每个元素的位置和样式,都由代码根据内容动态计算和生成。这样做的好处是灵活可控,内容多就多排几页,内容少就少排几页,不会出现排版被撑破的问题。代价是前期需要写更多的布局代码,但长期来看,维护和扩展都更方便。

3. 核心架构拆解:从结构化数据到PPT的完整链路

3.1 输入层:支持哪些内容格式

ppt-master的输入层设计目标是让内容创作者用最自然的方式提供内容。目前支持三种输入格式:

第一种是Markdown。这是最常用的格式,因为大多数技术分享、文档、笔记都是Markdown写的。解析Markdown时,我按照标题层级来划分幻灯片:一级标题作为封面,二级标题作为章节分隔页,三级标题及以下作为内容页。段落文本、列表、代码块、图片分别映射到PPT中不同的元素。

第二种是JSON。JSON的优势是结构完全可控,适合程序化生成。你可以精确指定每一页幻灯片的布局类型、每个元素的内容和样式。对于需要批量生成、内容来自数据库的场景,JSON是最合适的输入格式。

第三种是YAML。YAML比JSON更适合手写,结构清晰,支持注释。对于需要人工维护的内容源,YAML是个不错的选择。

三种格式最终都会被解析成统一的中间表示层(Intermediate Representation),也就是一个Python字典结构,描述了一份PPT的所有页面和元素。这样做的好处是,后续的渲染逻辑只需要处理一种数据结构,不用为每种输入格式单独写一套渲染代码。

3.2 中间表示层:统一的数据结构设计

中间表示层是整个项目的核心枢纽。它的设计质量,直接决定了后续渲染逻辑的复杂度和扩展性。

我设计的中间表示层是一个嵌套的字典结构,顶层包含两个键:meta和slides。meta存储演示文稿的元信息,比如标题、作者、主题色、默认字体等。slides是一个列表,每个元素代表一页幻灯片。

每页幻灯片又是一个字典,包含layout(布局类型)、title(标题)、elements(元素列表)等字段。layout决定了这页幻灯片使用哪种排版模板,比如“封面页”“章节页”“标题+内容”“两栏对比”“图片+说明”等。elements是一个列表,每个元素描述一个具体的内容块,比如一段文本、一张图片、一个表格。

这种设计的灵活性在于:布局和内容是分离的。同一套内容,可以套用不同的布局模板,生成不同风格的PPT。反过来,同一个布局模板,可以渲染不同的内容。这种分离让系统更容易扩展——新增一种布局,只需要写一个新的布局渲染函数,不用改动内容解析逻辑。

3.3 渲染层:布局引擎的工作机制

渲染层是ppt-master中最复杂的部分。它的任务是把中间表示层的数据,转换成python-pptx的对象和操作。

渲染层的核心是一个布局注册表。每种布局类型对应一个渲染函数,函数签名统一为render(slide, elements, theme)。当渲染引擎处理一页幻灯片时,它根据layout字段查找对应的渲染函数,然后把幻灯片对象、元素列表和主题配置传进去。

布局函数内部做的事情,主要是计算位置和尺寸。python-pptx使用英制单位(Inches和Emu),所以需要把设计稿中的像素值转换成英制单位。我封装了一个工具函数px_to_inches(),按照96 DPI的换算比例(1英寸=96像素)进行转换。这样在设计布局时,可以直接用像素思考,代码里再统一转换。

主题配置(Theme)是另一个关键设计。它定义了整套PPT的配色方案、字体方案、间距方案。所有布局函数都从主题配置中读取样式参数,而不是硬编码颜色和字号。这样做的好处是,换一套主题配置,就能生成完全不同风格的PPT,而不需要改动任何布局代码。

3.4 输出层:文件生成与后处理

输出层相对简单,主要是调用python-pptx的save()方法保存文件。但有几个细节需要注意。

第一是文件名的处理。如果标题中包含特殊字符(比如斜杠、冒号、问号),直接用作文件名会导致保存失败。我的做法是用正则表达式过滤掉这些字符,替换成下划线。

第二是默认字体的设置。python-pptx允许在演示文稿级别设置默认字体,但这个设置在某些PPT阅读器中可能不生效。更可靠的做法是在每个文本框上显式设置字体。我在渲染层的工具函数中统一处理了这个问题。

第三是图片的尺寸适配。插入图片时,如果图片的宽高比与预留区域不一致,直接拉伸会导致变形。我的做法是计算图片的原始宽高比,然后按比例缩放到预留区域内,保持居中。这个逻辑封装在insert_image_fit()函数中。

4. 实操中的关键细节:那些文档里不会写的东西

4.1 中文字体设置的坑与解决方案

python-pptx设置字体时,有一个很容易被忽略的细节:中文字体需要同时设置latin和ea两个属性。latin控制西文字体,ea控制东亚字体。如果你只设置了font.name,python-pptx默认只会设置latin字体,中文字符可能仍然使用默认字体渲染。

正确的做法是这样的:

from pptx.oxml.ns import qn def set_font(run, font_name, size, bold=False, color=None): run.font.name = font_name run.font.size = Pt(size) run.font.bold = bold if color: run.font.color.rgb = RGBColor(*color) # 关键:设置东亚字体 rPr = run._r.get_or_add_rPr() ea = rPr.find(qn('a:ea')) if ea is None: ea = rPr.makeelement(qn('a:ea'), {}) rPr.append(ea) ea.set('typeface', font_name)

这段代码的核心是操作底层的XML元素,给rPr(运行属性)添加a:ea子元素,并设置typeface属性。不做这一步,中文在部分环境下会显示为宋体或乱码。

4.2 文本框自动调整大小的陷阱

python-pptx的文本框有一个auto_size属性,可以设置为None、MSO_AUTO_SIZE.NONE、MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT等值。看起来很方便,但实际使用中问题很多。

SHAPE_TO_FIT_TEXT会让文本框根据内容自动调整高度,但调整后的实际高度在保存文件之前是读不到的。这意味着你无法在代码中获取调整后的高度,也就无法据此调整后续元素的位置。更麻烦的是,不同版本的PowerPoint对这个属性的处理方式不一致,导致同一份文件在不同环境下显示效果不同。

我的解决方案是:完全禁用自动调整,手动计算文本高度。具体做法是,根据字号、行距、文本框宽度,估算文本占用的行数和总高度。这个估算不需要非常精确,留出足够的余量即可。虽然麻烦一点,但结果可控,不会出现意外的排版错乱。

4.3 表格样式的精细控制

python-pptx创建表格很简单,但设置表格样式就比较繁琐了。表格的边框、底纹、单元格对齐方式,都需要操作底层的XML。

以设置单元格底纹为例,代码是这样的:

from pptx.oxml.ns import qn def set_cell_fill(cell, color): tcPr = cell._tc.get_or_add_tcPr() solidFill = tcPr.makeelement(qn('a:solidFill'), {}) srgbClr = solidFill.makeelement(qn('a:srgbClr'), {'val': color}) solidFill.append(srgbClr) tcPr.append(solidFill)

这段代码给单元格的tcPr元素添加a:solidFill子元素,指定填充颜色。类似地,设置边框需要添加a:lnL、a:lnR、a:lnT、a:lnB四个元素,分别对应左、右、上、下边框。

这些操作在python-pptx的官方文档中并没有详细说明,需要查阅OOXML规范或者参考其他项目的实现。我花了不少时间才把这些细节摸清楚,现在封装成了工具函数,用起来就方便了。

4.4 图片插入的尺寸计算与居中处理

插入图片时,最常见的需求是:把图片放进一个指定区域,保持宽高比,居中显示。这个逻辑看似简单,但实现起来需要考虑多种情况。

from PIL import Image def insert_image_fit(slide, img_path, left, top, width, height): img = Image.open(img_path) img_ratio = img.width / img.height box_ratio = width / height if img_ratio > box_ratio: # 图片更宽,以宽度为准 new_width = width new_height = width / img_ratio else: # 图片更高,以高度为准 new_height = height new_width = height * img_ratio # 居中计算 new_left = left + (width - new_width) / 2 new_top = top + (height - new_height) / 2 slide.shapes.add_picture(img_path, new_left, new_top, new_width, new_height)

这段代码先用PIL读取图片的原始尺寸,计算宽高比,然后根据预留区域的宽高比决定以哪一边为准进行缩放,最后计算居中位置。这个函数在渲染图片类元素时被反复调用,是整个项目中使用频率最高的工具函数之一。

5. 踩坑实录:从能跑到好用之间隔了多少个bug

5.1 第一个版本:功能跑通了,但生成的PPT没法看

第一个版本的ppt-master只用了不到两百行代码,功能很简单:读取Markdown,按标题分页,每页把文本塞进一个文本框。跑通的那一刻还挺兴奋的,但打开生成的PPT一看,心凉了半截。

问题一大堆:所有文本挤在页面左上角,没有边距;标题和正文一样大,没有层级;长文本溢出页面,被截断;代码块变成了普通段落,缩进全丢了。简单说,功能是跑通了,但生成的PPT完全不可用。

这个教训让我意识到:PPT自动化的难点不在于“生成文件”,而在于“生成好看的、可读的文件”。排版规则、层级关系、留白处理,这些才是真正花时间的地方。

5.2 排版引擎的重写:从硬编码到配置驱动

第二个版本,我决定重写排版逻辑。核心改动是引入配置驱动的设计:把所有排版参数(边距、字号、行距、颜色、间距)抽到一个配置字典中,布局函数从配置中读取参数,而不是硬编码数值。

这个改动带来的好处是显而易见的。首先,调整样式不需要改代码,改配置就行。其次,不同布局可以共享同一套配置,保证风格统一。最后,换主题变得非常容易,只需要替换配置字典。

配置驱动的设计也带来了一些新的挑战。比如,配置项太多,管理起来容易混乱。我的做法是按功能分组:theme.colors管颜色,theme.fonts管字体,theme.spacing管间距,theme.sizes管字号。每组配置有明确的命名规范,方便查找和修改。

5.3 内容溢出的处理:分页、缩放还是截断

内容溢出是PPT自动化生成中最常见的问题。一段文本太长,一页放不下,怎么办?我尝试过三种策略。

第一种是截断。超出部分直接丢弃。这个策略最简单,但体验最差,用户会发现内容莫名其妙少了。

第二种是缩放。自动缩小字号,让内容塞进一页。这个策略在内容稍微超出时有效,但如果超出太多,字号会小到无法阅读。

第三种是分页。把超出的内容自动分到下一页。这个策略体验最好,但实现最复杂,需要计算文本的实际高度,判断在哪里分页。

最终我采用了分页为主、缩放为辅的策略。先尝试分页,如果分页后每页内容仍然过多,再适当缩小字号。分页的计算逻辑是:根据文本框宽度和字号,估算每行能容纳的字符数,然后按行累加高度,超过页面可用高度就分页。这个估算不是百分之百精确,但配合适当的余量,实际效果可以接受。

5.4 批量生成时的性能问题与优化

当需要批量生成几十份PPT时,性能问题就暴露出来了。最初的版本,生成一份二十页的PPT需要大约三到五秒。单份看起来还好,但批量生成一百份就是五到八分钟,太慢了。

分析后发现,性能瓶颈主要在两个方面:一是频繁的XML操作,每次设置字体、颜色、边框都要操作底层XML,开销很大;二是图片的重复读取,同一张图片在多个页面使用时,每次都要重新打开和计算尺寸。

优化方案也很直接。对于XML操作,我把常用的样式设置封装成批量操作,减少重复的元素查找和创建。对于图片,引入了一个简单的缓存机制,用图片路径作为键,缓存PIL对象和计算好的尺寸。优化之后,生成一份PPT的时间降到了不到一秒,批量生成的效率提升了五倍以上。

6. 这套方案适合谁用,以及后续还能怎么扩展

ppt-master这个项目从最初的不到两百行代码,到现在几千行的完整工具,中间经历了多次重写和优化。它目前能做的事情包括:从Markdown、JSON、YAML生成PPT,支持多种布局模板,支持主题配置,支持图片和表格,支持自动分页。对于日常的汇报、分享、教学场景,已经够用了。

如果你打算自己动手做一个类似的工具,我的建议是:先从最简单的场景开始,跑通之后再逐步扩展。不要一上来就想着支持所有格式、所有布局,那样很容易陷入细节泥潭。先让一份最简单的Markdown能生成一份能看的PPT,然后再一步步加入新功能。

后续的扩展方向,我目前想到几个。一是支持更多的输入格式,比如从Notion、飞书文档等平台直接导入内容。二是引入更智能的排版算法,比如根据内容类型自动选择最合适的布局。三是支持导出为其他格式,比如PDF或图片。四是做一个简单的Web界面,让不写代码的人也能用。

不过这些都是后话了。眼下最重要的,是把现有的功能打磨得更稳定、更好用。毕竟,一个工具的价值不在于功能有多少,而在于它能不能真正解决用户的问题。

相关新闻

图表设计方法论:从认知负荷到团队规范的系统化实践

图表设计方法论:从认知负荷到团队规范的系统化实践

1. 从"diagram-design"这个标题能读出什么第一次看到"diagram-design"这个标题,我脑子里蹦出来的第一个判断是:这大概率不是一个单纯的"画图工具推荐",而是一个关于图表设计方法论或者图表设计系统的项目。为什…

2026/10/20 22:29:59 阅读更多 →
diagram-design:如何将图表从一次性产物变成可复用系统

diagram-design:如何将图表从一次性产物变成可复用系统

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次看到 diagram-design 这个词,很多人会以为它只是“画图”的另一种说法。但真正在项目里被图表折磨过的人知道,画图本身从来不是最痛的部分。最痛的是:图画完了&a…

2026/10/20 22:29:59 阅读更多 →
具身智能真机评测基准详解:从仿真到真机的关键跨越与选型指南

具身智能真机评测基准详解:从仿真到真机的关键跨越与选型指南

做具身智能的团队,问到“真机评测基准有哪些”这个问题,往往是被同一个尴尬逼出来的:仿真里刷到九成以上的成功率,一上真机就原形毕露。我见过不少组在模拟环境里跑得风生水起,真机测试一开,一半失败来自机…

2026/10/20 22:29:59 阅读更多 →

最新新闻

车载Android音频HAL Server启动全流程拆解:从init到AudioFlinger

车载Android音频HAL Server启动全流程拆解:从init到AudioFlinger

车载Android项目里,音频问题占了启动阶段很大一部分工作量。一开机没声音、开机声音卡顿、语音助手唤醒失败、电话切音区不生效,追到最底层,几乎都会汇聚到一个进程:Audio HAL Server。很多同学知道有这么一个vendor进程&#xff…

2026/10/20 23:15:44 阅读更多 →
diagram-design 实战:用约束型规范让技术图会说话

diagram-design 实战:用约束型规范让技术图会说话

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次看到 “diagram-design” 这个标题,很多人会以为它只是教你怎么把图画得好看一点。但真正做过技术方案、写过设计文档、给团队讲过架构的人都知道,画图这件事从来不只是“美…

2026/10/20 23:15:44 阅读更多 →
令牌桶算法详解:从QoS限速原理到Linux tc与双桶三色标记实战

令牌桶算法详解:从QoS限速原理到Linux tc与双桶三色标记实战

1. 从一个真实场景说起:为什么你的视频会议总是卡 你有没有遇到过这种情况:家里宽带明明是500M,测速也跑得满,但只要一开视频会议,画面就开始糊,声音断断续续,与此同时后台的下载任务还在疯狂抢…

2026/10/20 23:15:44 阅读更多 →
单相全桥逆变器Simulink仿真:从SPWM调制到LC滤波参数设计与THD分析

单相全桥逆变器Simulink仿真:从SPWM调制到LC滤波参数设计与THD分析

做电力电子这块的人,大概都有过类似经历:理论上把单相全桥逆变器背得滚瓜烂熟,四个开关管怎么换流、SPWM怎么调制,画个拓扑图加几条波形就能交差;可真到了课程设计或项目里需要看到实际电性能时,才发现手边…

2026/10/20 23:15:44 阅读更多 →
PCA人脸识别实战:从零搭建特征脸系统与避坑指南

PCA人脸识别实战:从零搭建特征脸系统与避坑指南

人脸识别这个词听起来挺唬人,但真动手做起来,最经典的那套入门方案反而没那么玄乎。我最早接触这个方向的时候,以为非得搞个深度网络、跑上几十万张图才能出效果,后来发现用PCA(主成分分析)这套老方法&…

2026/10/20 23:15:44 阅读更多 →
context-mode设计模式:如何让同一套核心逻辑适配多种运行上下文

context-mode设计模式:如何让同一套核心逻辑适配多种运行上下文

1. 从"context-mode"这个词说起:它到底在解决什么问题第一次看到"context-mode"这个标题,很多人会下意识地把它当成某个框架里的配置项,或者某个库的开关参数。但如果你真的在工程一线待过几年,就会意识到这个…

2026/10/20 23:14:43 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →