跳到内容
当前位置:首页>PPT>我拆了两个 AI PPT 开源项目,终于看懂了 AI 到底是怎么做 PPT 的

我拆了两个 AI PPT 开源项目,终于看懂了 AI 到底是怎么做 PPT 的

  • 2026-09-18 11:30:34
我拆了两个 AI PPT 开源项目,终于看懂了 AI 到底是怎么做 PPT 的

我拆了两个 AI PPT 开源项目,终于看懂了 AI 到底是怎么做 PPT 的

从 PPT Master 到 Guizang PPT Skill:两条完全不同的 AI PPT 技术路线

这段时间我一直在想一个问题:

AI 到底是怎么生成 PPT 的?

这个问题看起来很简单。

把一篇文章丢给大模型,让它总结一下,分成十页,然后调一个 PPT 库,把标题、正文、图片塞进去,不就完了吗?

我一开始也是这么想的。

直到我连续拆了两个很有意思的开源项目。

一个是 ppt-master。

另一个是 guizang-ppt-skill。

有意思的地方在于,它们做的事情表面上几乎一样:

给 AI 一段内容,让它生成一套漂亮的演示文稿。

但我真正把源码、Prompt、Workflow 和最终生成链路追下去之后,发现它们走的是两条几乎完全不同的路。

一个最后生成真正可以在 PowerPoint 里继续编辑的 .pptx。

另一个干脆绕开 PowerPoint,把浏览器本身变成了 PPT 播放器。

更有意思的是:两条路都成立。

而且把它们放在一起看之后,我突然觉得,AI PPT 其实是一个非常好的样本,它几乎把今天 Agent 类 AI 产品最核心的技术问题都浓缩在里面了。

它涉及内容理解、规划、设计、代码生成、中间表示、编译、渲染、验证和反馈闭环。

所以这篇文章我不想讨论“哪个 AI PPT 工具更好用”。

我真正想回答的是:

一个 AI,究竟怎样把一句模糊的“帮我做个 PPT”,一步一步变成最终能看到、能演示、甚至能继续编辑的视觉作品?


一开始,我以为 AI PPT 的核心是“大模型写内容”

如果把 AI PPT 最朴素地拆开,大概是这样:

用户输入  ↓大模型理解  ↓生成大纲  ↓每页写标题和正文  ↓套模板  ↓导出 PPT

这也是很多早期 AI PPT 产品给人的感觉。

所以很容易形成一个判断:

模型越聪明,PPT 就做得越好。

但真正看完这两个项目之后,我发现事情恰恰没有这么简单。

因为大模型真正擅长的是:

理解、抽象、取舍、叙事、判断。

而一份 PPT 最后还需要解决大量大模型并不天然擅长的问题:

字体应该多大?

这一段放左边还是右边?

图片裁成什么比例?

卡片之间留多少距离?

文字溢出了怎么办?

一个 SVG 阴影能不能转换成 PowerPoint 原生对象?

这一页在 16:9 屏幕上到底有没有撞到底部翻页按钮?

这些问题已经不是“语言问题”了。

它们开始进入另外一个世界:

视觉表示与确定性执行。

而两个项目真正的分叉,也正是从这里开始的。


第一条路线:把 AI PPT 当成一个“编译器”

先看 ppt-master。

我一开始找源码的时候,甚至有点困惑。

因为按照传统 AI 应用的思路,我下意识想找这种代码:

response = llm.generate(prompt)slides = parse(response)generate_ppt(slides)

结果并没有。

后来才意识到一个很重要的事情:

它本质上不是一个传统 App,而是一套 Agent Skill。

真正运行大模型的是 Claude Code、Codex 之类的 Agent Host。

仓库里的 Markdown 文件,不只是文档。

SKILL.md、workflows/、references/strategist.md、executor-base.md……

这些文件本身就是系统行为的一部分。

换句话说,这是一种新的软件结构:

传统软件:Code ↓Code ↓OutputAgent 软件:Markdown Workflow ↓LLM Reasoning ↓Tools / Code / Files ↓Output

ppt-master 的技术设计文档甚至直接把自己描述为一种AI-directed workflow, human-controlled draft:Agent 负责 presentation-specific reasoning,而确定性工具负责转换、验证与打包。

这也是我第一次真正意识到:

今天很多所谓的“AI Agent 产品”,真正的源代码已经不完全是 Python 和 TypeScript 了。

有相当一部分逻辑开始写在自然语言 Workflow 里。


PPT Master 并不会拿到主题就开始画第一页

假设我们给它一个主题:

PPT AI 生成工具的原理和实现

如果只有这么一句话,没有文章,没有资料,没有数据,它甚至不会马上开始做 PPT。

它首先要判断:

支撑这份演示所需要的事实够不够?

如果不够,会进入 Topic Research 阶段。

这个阶段负责补齐事实,并把外部事实写成 Research Supplement 和 Fact Provenance。

而且它明确规定:

Research 阶段只负责:

什么是真的。

不能负责:

PPT 应该有几页、选什么图片、页面怎么设计。

也就是说,系统很早就把:

事实获取

和

演示设计

拆开了。

这看起来是一件小事,实际上非常重要。

因为很多 AI 工作流失败的原因就是:

研究、判断、写作、设计全部混在同一个 Prompt 里。

模型一边找事实,一边已经开始构造故事。

于是很容易出现:

为了故事好看,事实开始迁就故事。

PPT Master 的处理方式是先建立证据,再允许设计。


接下来出现了一个角色:Strategist

事实准备好之后,仍然不会直接进入 PowerPoint。

下一步是 Strategist。

它做的事情不是:

给我列 8 页标题。

而是先回答更高一层的问题:

谁要看?

为什么要看?

看完之后应该发生什么变化?

整套 PPT 最重要的一句话是什么?

这个东西在 PPT Master 里被定义得非常系统。

Strategist 会确认 Audience、Intent、Outcome、Core Message、Delivery Context 等,然后提出三个完整的设计方向,再选择最合适的方向。

最后形成一个很重要的文件:

design_spec.md

这个文件可以理解成整套 PPT 的“语义蓝图”。

对于我们“PPT AI 生成工具的原理和实现”这个题目,其中一页可能不是简单写:

第 5 页:AI PPT 技术架构。

而是类似:

Audience MoveBefore:AI PPT 就是大模型自动写几页内容。After:AI PPT 是由语义规划、视觉表示、渲染器和反馈闭环共同组成的系统。Core Message:真正困难的不是让模型写出内容,而是把概率性的模型输出转化成稳定的视觉 Artifact。Visualization:展示 LLM → IR → Renderer → Artifact → Feedback 的系统关系。

PPT Master 的 Design Spec 确实要求每一页包含 Audience Move、Layout、Title、Core Message、Content,以及按需要加入 Visualization、Images 等信息。

我非常喜欢这里面的一个思想:

一页 PPT 的单位,不是“一块内容”,而是“一次认知变化”。

用户看这一页之前相信什么。

看完之后理解了什么。

这才是这一页存在的理由。


然后,PPT Master 做了一件很“软件工程”的事情

Strategist 的结果还不是最终执行文件。

系统会进一步把关键设计决策固定下来。

比如:

画布比例是什么。

字体是什么。

颜色是什么。

视觉语言是什么。

页面 roster 是什么。

哪些东西之后不能随便改。

这里的本质其实是:

把 Agent 的记忆变成外部状态。

因为如果让一个模型连续设计 20 页 PPT,你很难保证它做到第 18 页时还准确记得:

第一页用了什么颜色。

正文最小字号是多少。

标题到底是左对齐还是居中。

哪几页已经约定必须使用图片。

所以成熟的 Agent 系统不会只是说:

“记住刚才我们说好的设计。”

而是:

Reasoning ↓Write state to file ↓Read state again ↓Continue execution

这其实也是我最近越来越强烈的一个感觉:

真正可靠的 Agent,不是记忆力特别好的 Agent,而是善于把状态外部化的 Agent。


真正做 PPT 时,AI 写的居然不是 PPT

接下来才轮到 Executor。

Executor 负责真正把一页页面做出来。

这里发生了整个 PPT Master 最关键的一次技术选择:

它没有让大模型直接写 PowerPoint XML。

也没有让大模型一直调用:

add_textbox()add_shape()add_picture()

它选择了:

SVG

作为中间表示。

所以当 AI 要做这样一页:

AI PPT 实现架构LLM / Strategist      ↓Intermediate Representation      ↓Renderer / Compiler      ↓Final Artifact      ↑Feedback

它最终真正“编写”的,更接近这样的东西:

AI PPT 的核心是一条从语义到 Artifact 的流水线    LLM / Strategist  ...

到这里,事情突然变得很像软件开发了。


SVG 在这里,其实就是一种“视觉编程语言”

如果我们把传统编译器画成:

C Source Code ↓Compiler ↓Machine Code

PPT Master 实际上是在做:

SVG ↓DrawingML Compiler ↓PowerPoint

这也是为什么它的 SVG 不是“随便什么浏览器能显示的 SVG”。

技术设计里明确说明,它使用的是一个受项目约束的canonical SVG dialect。

也就是说,SVG 在这里已经不只是图片格式了。

它是:

专门为 PPT Master 设计的一种视觉 IR——Intermediate Representation,中间表示。

为什么需要它?

因为大模型非常熟悉 SVG。

矩形是什么?

文字是什么?

圆是什么?

Path 是什么?

坐标放在哪里?

这些模型都很容易生成。

但是让模型直接稳定地写 PowerPoint OOXML,就复杂得多了。

于是 SVG 变成了中间那座桥:

LLM-friendly     ↓    SVG     ↓PowerPoint-friendly

接下来发生的事情,就真的和编译器差不多了

PPT Master 里有一个核心模块:

svg_to_pptx

其 DrawingML converter 会解析 SVG,并针对不同元素分别调用:

convert_rectconvert_circleconvert_ellipseconvert_lineconvert_pathconvert_polygonconvert_polylineconvert_textconvert_image

也就是说:

SVG

最后不是变成一张截图里的矩形。

而是变成:

PowerPoint Rectangle Shape

SVG 的:

最后变成 PowerPoint 原生的文本对象。

SVG 的:

可以转成 DrawingML 的自由形状。

图片变成原生 Picture。

所以用户最后在 PowerPoint 里仍然可以:

点进去。

改文字。

拖矩形。

换颜色。

重新排版。

这就是它所谓native editable PowerPoint的本质。


为什么这条路线这么复杂?

因为 PowerPoint 本身不是一个特别适合大模型直接编程的视觉系统。

最终 .pptx 其实是一个 OOXML Package。

里面包含:

slidesrelationshipsmediaslide layoutsslide mastersthemesnotesanimationstransitions...

PPT Master 的 Builder 不仅用了 python-pptx,还直接处理 XML、ZIP package、relationships、theme、transition 和 animation 等底层结构。

于是整个系统本质上成了:

一个 AI 驱动的 Presentation Compiler。

前端是概率性的 LLM。

后端是确定性的编译器。

我后来把它概括成一句话:

Probabilistic Frontend + Deterministic Backend

大模型可以负责模糊问题:

这页应该讲什么?

这页应该是什么关系?

什么最重要?

哪种结构更清楚?

但一旦进入:

对象能不能转换。

坐标是否合法。

图片有没有损坏。

字体如何映射。

OOXML Relationship 对不对。

Package 能不能打开。

这些事情就交给确定性程序。

这其实是一个非常漂亮的 AI 系统设计原则。


然后我看了第二个项目,发现它干脆把问题重新定义了

第二个项目叫:

guizang-ppt-skill。

它同样是一个 Agent Skill。

但当我打开 SKILL.md 的时候,很快发现:

它做的“PPT”和 PPT Master 根本不是一回事。

它的最终产品不是:

xxx.pptx

而是:

index.html

一个可以在浏览器直接打开的单文件横向翻页演示。

README 直接把它定位成适配 Claude Code / Codex 的 HTML Deck Skill,内置电子杂志风和瑞士国际主义两套视觉系统。

当我意识到这一点时,后面很多设计突然就解释通了。


它不需要自己发明 Renderer,因为浏览器就是 Renderer

假如 AI 要画三个并排的卡片。

PPT Master 需要关心:

xywidthheight

然后 SVG 再转换。

Guizang 可以直接写:

LLM  Visual IR  Renderer

然后让 CSS:

display: grid;grid-template-columns: repeat(3, 1fr);gap: 24px;

接下来的事情全交给浏览器。

字体 shaping。

换行。

Grid。

Flex。

图片裁切。

动画。

层叠。

窗口。

键盘事件。

浏览器已经帮它做好了。

所以 Guizang 根本不需要构建一个:

SVG → DrawingML Compiler

因为:

HTML + CSS 本身就是一套成熟了几十年的视觉 DSL,而 Chromium 本身就是世界上最成熟的页面渲染器之一。

这是两条技术路线分叉的根本原因。


更有意思的是,Guizang 几乎不鼓励 AI 自由设计

这是我觉得第二个项目最值得研究的地方。

如果说 PPT Master 的哲学是:

给 AI 足够大的设计空间,然后在后面验证它。

Guizang 的思路几乎相反:

一开始就别给它那么大的空间。

比如瑞士风 Style B。

它不是说:

按 Swiss Style 自由发挥。

而是非常明确地规定:

正文默认只能从登记的:

S01S02...S22

22 种 Layout 中选择。

每页必须写:

data-layout=”Sxx”

不能临时创造一个:

S23

觉得自己今天灵感特别好。

swiss-layout-lock.md 甚至直接说明,它存在的目的不是“增加灵感”,而是防止生成结果只是“看起来像 Swiss”,实际已经脱离原始设计体系。

这句话让我印象特别深。


原来 AI 设计还有另一条路:别让模型设计,先让专家把设计做好

这背后其实是一种完全不同的技术哲学。

假设一页要表达:

AI PPT 的三层架构。

PPT Master 的 Executor 会想:

我应该怎样设计这一页?

Guizang 更像在想:

S05 Three Layers 是不是正好适合?

再比如:

AI PPT 的两种技术路线。

它更可能直接去找:

S08 Duo Compare

如果是一套反馈闭环:

S14 Loop Form

如果是一张系统结构:

S17 System Diagram

于是问题从:

Generate a layout

变成了:

Retrieve a layout+Adapt content

这是一个非常大的变化。


我后来用一个贝叶斯视角来理解这两个项目

Guizang 做的事情,本质上是在建立一个非常强的设计 Prior。

它提前规定了:

什么颜色好看。

什么字号组合安全。

什么图片比例合理。

什么 Layout 适合什么内容。

标题应该放哪里。

卡片应该怎么排列。

底部要留多少安全区。

大标题有多大。

图片应该怎么裁。

于是模型真正需要探索的空间被大幅缩小。

可以粗略理解成:

GuizangStrong Prior ↓Small Search Space ↓Less Model Freedom ↓Lower Variance ↓More Stable Output

而 PPT Master 更接近:

Large Design Space ↓LLM Reasoning ↓Free Composition ↓Higher Potential ↓Strong Validation Required

所以我后来用两句话总结它们:

Guizang:Strong Prior + Simple Execution。

PPT Master:Large Hypothesis Space + Strong Verification。

这可能比“HTML 和 PPTX 有什么区别”更接近两个系统真正的灵魂。


而 Guizang 最让我意外的地方,是它对“反馈”的处理

AI 写完 HTML,并不意味着任务完成。

它有一个 validate-swiss-deck.mjs。

一部分是静态规则。

比如:

有没有使用未登记 Layout。

标题是不是不应该居中却居中了。

SVG 里是不是塞进了可见文字。

图片有没有绑定正确的 image slot。

但真正有意思的是下一步。

如果环境里存在 Playwright,它会直接启动 Chromium。

然后真的把:

index.html

打开。

接着测:

getBoundingClientRect()scrollHeightclientHeight

检查:

页面有没有 Overflow。

最下面的元素有没有撞出去。

标题和下面内容间距是不是太小。

有没有进入底部翻页导航的危险区域。

看到这里我突然想到:

这其实已经不是一个 PPT 问题了。

这是典型的:

Generate → Execute → Observe → Repair

Agent 闭环。


两个项目表面上完全不同,最后居然在“反馈”这里重新汇合了

PPT Master:

LLM ↓SVG ↓Compiler ↓Error / Validation ↓Repair

Guizang:

LLM ↓HTML ↓Browser Render ↓DOM Measurement ↓Repair

技术对象完全不同。

但更高一层看,它们其实是同一个东西:

把模型输出放进真实环境执行,再从环境获得信号。

而不是:

大模型觉得自己写对了,那就算对了。

这是今天 Agent 真正开始变得可靠的关键。


如果把同一页同时放进两个系统,区别会非常直观

还是那一页:

AI PPT 的实现架构

PPT Master 的链路是:

Page Intent ↓Executor ↓自由设计几何关系 ↓SVG ↓SVG Validator ↓DrawingML Converter ↓PowerPoint Shape ↓.pptx

Guizang 的链路是:

Page Intent ↓识别:这是一张系统关系图 ↓检索 S17 System Diagram ↓填充 HTML Component ↓CSS Grid / Flex ↓Chromium ↓Browser Deck

一句话:

PPT Master 在做 Geometry Generation。

Guizang 在做 Component Composition。


到这里,我才真正理解 AI PPT 的核心其实不在“PPT”

如果把这两个系统再往上抽象一层,你会发现,无论最后输出 .pptx 还是 .html,其实都绕不开五层。

1. Content Intelligence          ↓2. Presentation Planning          ↓3. Visual Representation          ↓4. Renderer / Compiler          ↓5. Feedback & Validation          ↺

第一层解决:

我到底在讲什么?

第二层解决:

我要怎样让别人理解?

第三层解决:

这个意思怎样表示成一个视觉结构?

第四层解决:

谁把这个视觉结构真正画出来?

第五层解决:

画出来之后到底对不对?

真正不同的,是第三、第四层。

PPT Master 选择的是:

Visual Representation = Canonical SVGRenderer = SVG → DrawingML Compiler + PowerPoint

Guizang 选择的是:

Visual Representation = HTML Components + CSSRenderer = Browser

一旦用这个模型来看,你再去看 Gamma、Beautiful.ai、Canva、Google Slides Agent、各种 PPT Copilot,很多实现差异都会变得容易理解。


还有一个问题特别值得思考:AI 真的应该自由设计每一页吗?

拆完这两个项目之后,我自己的答案发生了一些变化。

以前很容易觉得:

大模型越来越强,总有一天应该让它随便设计。

但 Guizang 给了另外一个答案。

也许根本没必要。

现实中专业设计师自己也不是每天从一张完全空白的画布开始。

设计系统、Grid、Typography、Design Token、Component Library、Brand Guideline,本来就是现代设计工业化的重要基础。

所以也许更合理的 AI PPT 系统应该是:

80% 页面 ↓高质量 Layout Library 检索20% 特殊页面 ↓允许自由设计

而不是让 AI:

20 页全部从零发明。

这会把问题从:

Generative Design

部分转化为:

Retrieval + Adaptation

而后者恰恰是大模型非常擅长的事情。


所以,如果让我今天重新设计一套 AI PPT 系统,我会把两个项目合起来

我会保留 PPT Master 的:

Research。

Fact Provenance。

Strategist。

Audience Move。

Design Spec。

可持久化的执行状态。

SVG IR。

Native PPTX Compiler。

OOXML Validation。

但视觉生成阶段,我不会默认每一页都 Free Design。

我会先建立一套 Guizang 那样经过人工打磨的:

Layout LibraryComponent LibraryTypography SystemColor SystemImage Slot SystemSpacing Rules

然后:

Page Intent ↓Layout Retrieval ↓Content Adaptation

只有找不到合适结构的时候,才允许:

Free-form SVG Generation

生成之后,不马上导出 PowerPoint。

而是先:

Render Preview ↓真正测 Bounding Box ↓检查 Overflow ↓检查视觉层级 ↓检查图片裁切 ↓Visual Critic ↓Repair

最后才:

Compile to native PPTX

完整架构会更像:

User                     │                     ▼               Source / Research                     │                     ▼                 Strategist                     │                     ▼                 Page Intent                     │          ┌──────────┴──────────┐          ▼                     ▼   Layout Retrieval         Free Design       80%                    20%          │                     │          └──────────┬──────────┘                     ▼                 Visual IR                     │                     ▼                Render Preview                     │                     ▼            Visual Measurement                     │                  Repair ↺                     │                     ▼               PPTX Compiler                     │                     ▼           Native PowerPoint

我现在反而觉得,这可能比单纯追求“更强的大模型”更接近 AI PPT 真正会走向成熟的方式。


最后,再回到最开始那个问题

AI 到底是怎么生成 PPT 的?

我现在不会再回答:

大模型先写大纲,再调用 PPT 工具。

这个回答太浅了。

更准确的说法应该是:

AI PPT 的本质,是把一个模糊的沟通意图,一层一层约束成一个可以被确定性 Renderer 执行的视觉程序。

整个过程其实是:

Prompt ↓Intent ↓Narrative ↓Page Intent ↓Visual Representation ↓Renderer / Compiler ↓Artifact ↓Feedback ↺

你会发现,越往前,问题越模糊。

越往后,问题越确定。

前面需要大模型。

后面需要工程系统。

所以一个真正成熟的 AI 产品,并不是把所有事情都交给大模型。

恰恰相反。

它应该清楚地知道:

哪些问题应该让模型判断,哪些问题应该尽快从“概率”变成“规则”。

PPT Master 用:

SVG + Compiler

完成这次转换。

Guizang PPT Skill 用:

Template + HTML/CSS + Browser

完成这次转换。

路线不同。

但它们最终都指向了同一个非常重要的 AI 工程思想:

让 AI 负责不确定性,让系统负责确定性。

也许这才是我拆这两个 PPT 项目之后,真正学到的东西。

而且它显然不只适用于 PPT。

从报告生成、科研绘图,到软件 UI、CAD、实验设计,甚至未来的自动化科学研究系统,本质上都在面对同一个问题:

怎样把大模型模糊但强大的判断能力,逐步压缩成一个可执行、可验证、可重复的真实世界 Artifact。

PPT 只是一个非常好的开始。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-09-25 14:44:12 HTTP/1.1 GET : http://h.sjds.net/a/553652.html
  2. 运行时间 : 0.079487s [ 吞吐率:12.58req/s ] 内存消耗:4,312.10kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=0dbf9c7a65075a6ed70ee9ff129c6b1d
  1. /www/wwwroot/h.sjds.net/public/index.php ( 0.79 KB )
  2. /www/wwwroot/h.sjds.net/vendor/autoload.php ( 0.17 KB )
  3. /www/wwwroot/h.sjds.net/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /www/wwwroot/h.sjds.net/vendor/composer/platform_check.php ( 0.90 KB )
  5. /www/wwwroot/h.sjds.net/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /www/wwwroot/h.sjds.net/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /www/wwwroot/h.sjds.net/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /www/wwwroot/h.sjds.net/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /www/wwwroot/h.sjds.net/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /www/wwwroot/h.sjds.net/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /www/wwwroot/h.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /www/wwwroot/h.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /www/wwwroot/h.sjds.net/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /www/wwwroot/h.sjds.net/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /www/wwwroot/h.sjds.net/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /www/wwwroot/h.sjds.net/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /www/wwwroot/h.sjds.net/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /www/wwwroot/h.sjds.net/app/provider.php ( 0.19 KB )
  23. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /www/wwwroot/h.sjds.net/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /www/wwwroot/h.sjds.net/app/common.php ( 0.03 KB )
  27. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /www/wwwroot/h.sjds.net/config/app.php ( 0.95 KB )
  30. /www/wwwroot/h.sjds.net/config/cache.php ( 0.78 KB )
  31. /www/wwwroot/h.sjds.net/config/console.php ( 0.23 KB )
  32. /www/wwwroot/h.sjds.net/config/cookie.php ( 0.56 KB )
  33. /www/wwwroot/h.sjds.net/config/database.php ( 2.48 KB )
  34. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /www/wwwroot/h.sjds.net/config/filesystem.php ( 0.61 KB )
  36. /www/wwwroot/h.sjds.net/config/lang.php ( 0.91 KB )
  37. /www/wwwroot/h.sjds.net/config/log.php ( 1.35 KB )
  38. /www/wwwroot/h.sjds.net/config/middleware.php ( 0.19 KB )
  39. /www/wwwroot/h.sjds.net/config/route.php ( 1.89 KB )
  40. /www/wwwroot/h.sjds.net/config/session.php ( 0.57 KB )
  41. /www/wwwroot/h.sjds.net/config/trace.php ( 0.34 KB )
  42. /www/wwwroot/h.sjds.net/config/view.php ( 0.82 KB )
  43. /www/wwwroot/h.sjds.net/app/event.php ( 0.25 KB )
  44. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /www/wwwroot/h.sjds.net/app/service.php ( 0.13 KB )
  46. /www/wwwroot/h.sjds.net/app/AppService.php ( 0.26 KB )
  47. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /www/wwwroot/h.sjds.net/vendor/services.php ( 0.14 KB )
  53. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /www/wwwroot/h.sjds.net/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /www/wwwroot/h.sjds.net/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /www/wwwroot/h.sjds.net/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /www/wwwroot/h.sjds.net/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /www/wwwroot/h.sjds.net/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /www/wwwroot/h.sjds.net/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /www/wwwroot/h.sjds.net/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /www/wwwroot/h.sjds.net/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /www/wwwroot/h.sjds.net/app/Request.php ( 0.09 KB )
  84. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /www/wwwroot/h.sjds.net/app/middleware.php ( 0.25 KB )
  86. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /www/wwwroot/h.sjds.net/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /www/wwwroot/h.sjds.net/route/app.php ( 1.72 KB )
  100. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /www/wwwroot/h.sjds.net/app/controller/Index.php ( 4.81 KB )
  104. /www/wwwroot/h.sjds.net/app/BaseController.php ( 2.05 KB )
  105. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /www/wwwroot/h.sjds.net/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /www/wwwroot/h.sjds.net/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /www/wwwroot/h.sjds.net/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /www/wwwroot/h.sjds.net/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /www/wwwroot/h.sjds.net/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /www/wwwroot/h.sjds.net/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /www/wwwroot/h.sjds.net/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /www/wwwroot/h.sjds.net/runtime/temp/c1d6e8c94b2c2fa10e259903674c804d.php ( 8.11 KB )
  140. /www/wwwroot/h.sjds.net/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000470s ] mysql:host=172.18.0.4;port=3306;dbname=h_sjds;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000583s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000325s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000342s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000528s ]
  6. SELECT * FROM `set` [ RunTime:0.000261s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000641s ]
  8. SELECT * FROM `article` WHERE `id` = 553652 LIMIT 1 [ RunTime:0.000460s ]
  9. UPDATE `article` SET `lasttime` = 1790318652 WHERE `id` = 553652 [ RunTime:0.001641s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000311s ]
  11. SELECT * FROM `article` WHERE `id` < 553652 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000391s ]
  12. SELECT * FROM `article` WHERE `id` > 553652 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000353s ]
  13. SELECT * FROM `article` WHERE `id` < 553652 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000446s ]
  14. SELECT * FROM `article` WHERE `id` < 553652 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000438s ]
  15. SELECT * FROM `article` WHERE `id` < 553652 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000529s ]
0.091173s