乐于分享
好东西不私藏

【万字】OpenClaw 核心机制 Skills 全解析,最后一篇!

【万字】OpenClaw 核心机制 Skills 全解析,最后一篇!

AI训练营9期5月初开班,欢迎咨询

导读:本文约 1万字,非常简单,请放心阅读...

三月份,OpenClaw 小龙虾爆火,但火得有些不正常;

所以,我们这边做了一些研究,想从工程角度带着大家了解 OpenClaw 的本质,我们先后经过了 3 篇文章:

《从工程角度为你拆解 OpenClaw》

《万字:拆解 OpenClaw:从 Gateway、Memory、Skills、多 Agent 到 Runtime》

《万字:拆解 OpenClaw 上下文工程/记忆系统》

今天是最后一篇关于 OpenClaw 的架构拆解,也是我认为最重要的 Skills,我会尽量把他说清楚。

:::

如果你要问我 OpenClaw 的价值,我会说他再次证明了 Agent 这种产品模式会是未来,并且他展示了普通人大概会如何与 Agent 做交互,这个答案就是 Skills...

PS:OpenClaw 是当前 Agent 最典型的代表,去年是 Manus。

近一年,Agent 的进化速度尤其迅速,甚至可以说每次模型的迭代,都是为了 Agent 的某一能力而展开

从能力本身来说,大家关心的无非一点: 上下文窗口有多长了,连带着会关心:记忆有多强大(这个跟模型关系不大)。

但做得深入一点的同学,会更关注 Tools 调用的稳定性。值得高兴的是,模型侧应该确实做了不少的训练动作,现阶段无论模型工具调用识别能力、还是工程手段都做了不少,最直接的成果就是 Skills

Skills 很大程度上,助力了 Agent 从能聊天真正进化到能干活了

结合上一篇文章:《记忆系统》为 Agent 提供了背景知识Skills,为 Agent 提供了工作方法论,他们加起来形成了一套稳定的工作架构。

这不只是我个人的实践结果,也是我阅读了很多文献的结论,比如来自 Claude Code 团队工程师 Thariq 的一篇深度复盘:《Skills工程化心法》

他给出了一个类似的定义:Skill不是一段更长的提示词,而是一个承载组织工作流的工程化单元。

一个完整的Skill,本质上是一个能力包,它长这样:

<skill-name>/├── SKILL.md          # 核心:告诉Agent“怎么做”的调度入口├── references/       # 知识层:存放API文档、业务规则、历史案例├── assets/           # 模板层:提供输出骨架、固定格式├── scripts/          # 执行层:用代码搞定确定性任务└── hooks/            # 约束与观测:记录调用、控制权限

大家要注意:Skills 是工程优化的结果,他并不能让 AI 变得更聪明,但他能把我们的最佳实践、流程和经验,以一种可维护、可复用的方式,留下来。

这是 OpenClaw 现在期望发生的事情;也是我一直在说的一句话:

Skill 的本质,不是提示词增强,而是 Workflow 的迁移

过去我们沉淀方法,靠的是文档、和老员工的口口相传。但这些东西都有一个共同问题:它们能被阅读,却不能被执行。

Skills 做的事情,就是把这些原本静态存在的方法,变成一种可以被 Agent 调用、被模型理解、被工具执行的能力单元,这对离职员工是挺烦的一件事...

这也是为什么我觉得,OpenClaw 真正有价值的,不是那些热闹的数字员工的叙事,而是它把一件事展示得很清楚:

未来普通人使用 Agent,未必是天天重写 Prompt,而更可能是围绕一组已经沉淀好的 Skills,去持续调用、组合

接下来,我们就从这个最朴素的痛点开始,聊聊 Skills 到底是什么,再逐次深入到 OpenClaw 的 Skills 相关实现:

提示词 → Skills

前面,我们说 Skills 是执行单元不是高级 Prompt,他们的差别有点像:一次性杯子和随身保温杯

举个具体的例子。如果你想让AI帮你审查代码,用 Prompt 可能是这样:

请你检查这段代码,看看有没有安全问题,特别是SQL注入、XSS这些常见的漏洞、敏感信息泄露、权限控制问题对了,输出的时候要按严重程度排序,高危的放前面。"

用了之后,效果可能不错,用Skills的话,是这样的:

在一个pr-code-review的文件夹里,放一个SKILL.md文件,里面写着:

---name: 代码安全审查description: 当用户提交Pull Request时,自动检查新增代码的安全问题,或者用户主动要求安全检查---## 触发条件- 用户提到"代码审查""安全检查"- 输入中包含代码片段- 上下文涉及Pull Request## 检查范围1. SQL注入漏洞2. XSS跨站脚本3. 敏感信息泄露4. 权限控制问题## 输出格式- 高危(必须修复)- 中危(建议修复)  - 低危(优化建议)每个问题都要给出具体代码位置和修复建议。

这个看起来确实差不多,都在做安全检查,提示词的结构也几乎一样,但关键的差别,不在“写什么”,而在“怎么用”。

与 Prompt 不同的是,Skills 更为工程化了,Skill一旦写好,就被工具“托管”了。

工具会在合适的时候会自动调用它:当你提交Pull Request,或者主动发起安全检查时,对应 skill 就会被自动加载、执行。

并且,当前几乎每个基模/工具都支持了 Skills,这意味着,一个写好的 skill 可以在不同平台间复用,今天在 Claude Code 里用的代码审查 skill,明天换到 OpenClaw、Cursor 里,同样生效。

当每个人都可以把自己的最佳实践写成 skill,分享出来,一个良性循环就形成了:

用的人越多,积累的经验越多,Skills 的质量和覆盖面就越广。Skills 不再是个人本地的“小本本”,而是一个可共享、可迭代、可组合的能力生态

至此,大家就知道为什么 Skills 这个工程设计很夸张了吧,因为他的背后是各行各业可迁移的 Workflow,这是行业经验的精华。

Skills 三大核心价值

理解了什么是 Skills,我们再来看看它解决了什么问题,为什么 Skills 会出现的原因

大模型在实际应用中面临着三大工程化痛点:

提示词臃肿、维护困难

一个复杂的任务,特别是多步工作流的任务,需要写几百甚至上千字的 Prompt。里面装满了各种要求、规则、格式说明、示例,Prompt 会变得又长又难读。

Prompt 越多,模型注意力就容易分散,就容易出现幻觉,程序执行的流程就越不容易稳定。

上下文窗口限制

就算你写了一个非常完美的 Prompt,它也要占用宝贵的上下文窗口。但当你需要处理多个复杂任务时,很快就会不够用。

能力复用困难

当你调教好了一个"代码重构专家",明天同事也想用,怎么办?只能通过聊天发给他?这既不优雅,也很难保证执行效果一致。

Skills就是为解决这些问题而生的。

它的核心价值可以收敛成三点:

  1. 知识的沉淀与复用:反复使用的流程被固化为技能,避免重复造轮子
  2. 模块化架构:每个技能都是独立的,易于测试、维护和扩展
  3. 无限的可能性:通过组合不同技能,可以构建复杂的工作流

除了上述三个,Skills 真正带来的是 Workflow 执行的稳定性;

在之前只靠 ReAct架构,依赖 Tools Calling,很多复杂的流程执行是非常不稳定的,Skills 里面会将 SOP 写死,其中就包括了各种工具调用,最终的结果就是:用户相同的输入,可以拿到稳定的结果了!

没有 Skills 之前,也是用工程手段实现,但挺麻烦的。

Claude Skills

理解了概念,我们来看看 Claude Skills 到底长什么样。

作为工程概念提出者,只要看懂了 Claude Skills 的设计,也就能看懂所有 Skills 底层的运行机制:

官方定义

先来看一下 Claude 的官方定义:

智能体技能(Agent Skills)是一种模块化的能力,用于扩展Claude的功能。每个"技能"都封装了相应的指令、元数据和可选资源(例如脚本、模板)。当场景匹配时,Claude会自动调用这些技能来完成任务。

这里面有三个关键点,也是 Skills 的三个核心要素:

  • 元数据:技能的名称、描述、标签等信息
  • 指令:技能具体的执行逻辑
  • 资源:技能附带的相关资源(比如文件、可执行代码等)

渐进式披露

渐进式披露的设计,可以缓解 Tools 调用的稳定性问题:模型开始的时候,只会加载 skill 的基础元数据,当模型判断需要使用这个 skill 的时候,才会加载完成的指令(skill.md)

整个加载过程分为三个层次,对应核心的三要素:

元数据(始终加载)

name: douyin-summarydescription: 抖音视频总结助手。当用户提供抖音视频链接并请求总结时,使用此技能。

Claude 启动时就会加载所有 Skills 的元数据,只包含最基本的信息,占用上下文极小,这样模型就能知道自己拥有哪些技能,哪些事情可以做。

核心指令(触发时加载)

# 抖音视频总结助手## 工作流程1. 识别抖音链接2. 调用脚本获取内容3. 总结内容4. 友好输出

当模型判断 用户的请求 需要使用对应技能来完成工作的时候,Claude 会加载对应技能的的 SKILL.md 文件,为 Claude 提供清晰指令文档、指导模型完成任务。

代码与资源(按需加载)

scripts/└── fetch_douyin.py

每当模型判断需要执行技能脚本的时候,就会输出指令,让工具调用对应的脚本来执行,获取结果反馈给模型。

这个三层设计平衡了灵活性效率

  • 元数据层让 Claude 快速了解自己有哪些能力
  • 指令层只在需要时才加载,节省上下文
  • 资源层按需调用,避免不必要的开销

Claude Skills 的安装与使用

一、使用官方技能市场

通过下面的操作,就可以浏览官方的插件市场,安装对应的技能

# 添加官方技能库/plugin marketplace add anthropics/skills# 浏览可用技能/plugin list# 安装document-skills 文档处理技能/plugin install document-skills@anthropic-agent-skills

安装完成后,Claude 会自动识别这些技能。可以在 claude code 中输入指令

帮我总结一下这个文档

时,Claude Code 就会自动调用相应的技能。

二、手动创建自定义技能

如果我们需要自定义技能,比如

自动提取抖音视频内容并总结

可以按照下面的步骤来:

1、创建技能目录

mkdir -p ~/.claude/skills/douyin-summary

2、编写SKILL.md

  name: douyin-summary  description: 抖音视频总结助手。当用户提供抖音视频链接时,自动调用此技能获取文案并总结。# 抖音视频总结助手## 工作流程  1. 识别用户输入中的douyin.com链接  2. 调用scripts/fetch_douyin.py获取视频文案  3. 提取核心观点并结构化输出

三、放置执行脚本

# 在scripts目录下放置Python脚本~/.claude/skills/douyin-summary/scripts/fetch_douyin.py

配置好后,Claude Code 就能自动发现新安装的技能,完全不需要重启

四、使用效果

当我们把抖音链接丢给 Claude Code,并说

帮我总结一下这个视频

时,Claude 会自动识别需求,调用 douyin-summary 技能,完成内容获取和结构化总结。

整个过程零显式调用,你不需要告诉它

请使用 douyin-summary 技能

它自己就能判断:什么时候该用、什么时候不该用。

这就是 Skills 最爽的地方:写好一次,可重复稳定执行!

至此,大家对 Skills 有了基础了解,我们开始进入正题:

OpenClaw Skills

很多人第一次接触 OpenClaw Skills 就会发现:这和 Claude Skills 的写法几乎一模一样啊?

那是当然一样啊,skill 的写法是一样的,如前所述,大多 skills 是可以互通的:

  • 都是一个文件夹代表一个skill
  • 核心都是 SKILL.md Markdown 文件
  • 都支持 YAML Frontmatter 定义元数据
  • 都可以选配合适的脚本代码

写法、加载机制都高度一致。唯一的区别在于运行平台,如果 skill 里带了脚本,跨平台使用可能会遇到报错。

以下是全流程,我做了个表格,大家可以自己看看,他们运行机制上一些不同的点

维度
Claude Skills
OpenClaw Skills
加载方式
Claude Code CLI启动时扫描~/.claude/skills
OpenClaw启动时扫描~/.openclaw/skills + 工作区/skills/
触发方式
语义匹配,自动注入上下文
支持语义匹配 + /skill [name]指令触发 + Cron定时 + Webhooks
注入内容
SKILL.md全文注入Prompt
SKILL.md内容注入Prompt
优先级
无明确优先级机制
六级优先级
:工作区 > 项目Agent > 个人Agent > 用户managed > 内置bundled > 额外目录
模型绑定
绑定Claude模型
模型中立
(可配置对接多种LLM)
自动化
主要靠会话内触发
支持定时任务(Cron)、事件驱动(Webhooks)

因为使用对象和场景不同,OpenClaw Skills 会更注重灵活性,它不仅需要应对更复杂的触发场景,还要能适配不同的模型和运行环境,这里展开说说:

Skills 子系统架构总览

在展开细节之前,先给大家一个全局视角。OpenClaw 的 Skills 子系统由四个层次组成:

(发现层 → 调度层 → 注入层 → 集成层,含各层核心模块和源码文件名)

四个层次各司其职:

  • 发现层:从 6 个目录源扫描 SKILL.md,解析 YAML frontmatter 元数据
  • 调度层:判定哪些 Skill 可用(enabled、OS 兼容、env 依赖)、监听文件变更
  • 注入层:将 Skill 目录注入 System Prompt,管理环境变量,安全扫描
  • 集成层:CLI 命令、Gateway API、Cron 定时、嵌入式运行器四种接入方式

六级优先级

OpenClaw Skills 有个设计:优先级覆盖机制

(6 个来源按优先级从低到高写入 Map,后写入覆盖先写入,工作区同名 Skill 最终胜出)

// src/agents/skills/workspace.ts:491-510const merged = new Map<string, Skill>();// 后写入的覆盖先写入的,所以按优先级从低到高排列for (const skill of extraSkills)          merged.set(skill.name, skill);  // ① 额外目录for (const skill of bundledSkills)        merged.set(skill.name, skill);  // ② 内置for (const skill of managedSkills)        merged.set(skill.name, skill);  // ③ 用户 managedfor (const skill of personalAgentsSkills) merged.set(skill.name, skill);  // ④ 个人 Agentfor (const skill of projectAgentsSkills)  merged.set(skill.name, skill);  // ⑤ 项目 Agentfor (const skill of workspaceSkills)      merged.set(skill.name, skill);  // ⑥ 工作区 ← 最终胜出

这是什么意思呢?我们举一例子来看看:

假设你日常开发,个人习惯用 "summarize-changes" 这个技能来生成 commit 信息。

你把它放在 ~/.openclaw/skills/ 里,一直用得很顺手。

有一天,你接手一个开源项目,这个项目对 commit 格式要求非常严格,必须用特定模板。

你不想改掉自己全局 commit 消息的格式,但在这个项目里又必须遵守它的规范。

这个时候 我们需要新建一个Agent来处理这个事情,同时吧这个skills复制到我们新建的Agent的工作区内

在该项目的根目录下创建 .openclaw/workspace/skills/summarize-changes/

放一个专门针对这个项目的 summarize-changes 版本(格式严格、带签名)

当你使用这个Agent工作的时候,工作区的技能会覆盖你用户目录里的同名技能。

使用其他Agent,在其他地方又会自动切回你个人的习惯版本。

触发方式

OpenClaw Skills 支持四种触发方式,这不是他比 Claude Skills 更加强大,而是因为场景需要,他需要被用的地方多一些:

语义触发

  • 自然语言对话,AI自动匹配技能

指令触发

  • /skill [name] 显式调用,auto-reply 层拦截解析

定时任务

  • Cron表达式支持:0 8 * * *(每天早上8点)
  • 可以用于自动生成日报、定时检查等

事件驱动

  • Webhooks支持:GitHub PR提交、Slack消息等
  • 实现真正的自动化工作流

(语义触发 → /skill 指令 → Cron 定时 → Webhook 事件 → 共用 loadSkillEntries → filterSkillEntries → 注入 Prompt)

值得一提的是,Skill 的调用策略也可以在 SKILL.md 的 frontmatter 里控制:

---name:my-skilluser-invocable:true# 是否允许用户通过 /skill 显式调用(默认 true)disable-model-invocation:false# 是否禁止模型自动匹配触发(默认 false)---

这两个参数对应源码中的 SkillInvocationPolicy 结构,让你可以精细控制 Skill 的触发权限。

提示词注入与预算管理

前面讲了 Claude 的渐进式披露,这里我们看看 OpenClaw 是怎么把 Skill 注入到 System Prompt 里的。

核心问题是:如果一个工作区有上百个 Skill,全部塞进 System Prompt,模型上下文就爆了。

OpenClaw 的解法是三级预算降级策略

(完整格式 → 紧凑格式 → 二分搜索截断)

对应的源码逻辑非常清晰:

// src/agents/skills/workspace.ts:567-613functionapplySkillsPromptLimits(params{const limits = resolveSkillsLimits(config);// 限制: maxSkillsInPrompt=150, maxSkillsPromptChars=30000// 第一级:完整格式(name + description + instructions)if (fitsFull(skillsForPrompt)) return { compact: false, truncated: false };// 第二级:紧凑格式(name + location only,省略 description)if (fitsCompact(skillsForPrompt)) return { compact: true, truncated: false };// 第三级:二分搜索找最大可行前缀,截断let lo = 0, hi = skillsForPrompt.length;while (lo < hi) {const mid = Math.ceil((lo + hi) / 2);if (fitsCompact(skillsForPrompt.slice(0, mid))) lo = mid;else hi = mid - 1;  }return { compact: true, truncated: true };  // 截断到前 lo 个}

还有一个省 token 的小细节:compactSkillPaths 函数会把 /Users/alice/.bun/.../skills/github/SKILL.md 替换为 ~/.bun/.../skills/github/SKILL.md。每个路径省 5-6 个 token,300 个 Skill 就是 400-600 tokens 的节省。

庞大的技能生态

OpenClaw有一个强大的官方技能市场:ClawHub(https://clawhub.ai/)

截至我写这篇文章时,ClawHub上已经有38000+个技能,覆盖了几乎所有你能想到的场景:

  • 办公自动化:邮件处理、文档转换、会议纪要
  • 开发工具:GitHub操作、代码审查、部署管理
  • 生活服务:天气查询、新闻聚合、健康提醒
  • 智能交互:网页自动化、数据抓取、API调用

而且,生态还在快速增长,这个才是 OpenClaw 最厉害也最难复制的地方!

安全扫描与热更新

源码中,OpenClaw 为 Skills 配备了三个容易被忽略但非常关键的工程能力:

一、安全扫描

Skill 安装时,安全扫描器会检查 SKILL.md 和 scripts 目录中的危险代码模式,防止恶意 skill 注入。毕竟 Skill 本质上是外部代码,不做扫描等于裸奔。

二、文件监听热更新

OpenClaw 用 Chokidar 监听所有 skill 目录中的 */SKILL.md 文件。当你修改了某个 SKILL.md(不管是新增、修改还是删除),监听器会在 250ms 去抖后触发版本号递增,自动重建 system prompt 中的技能目录。

整个过程无需重启,对正在进行的对话也是生效的:

(SKILL.md 变更 → Chokidar 监听 → 250ms 去抖 → 版本号 +1 → System Prompt 刷新)

对应的核心源码非常简洁:

// src/agents/skills/refresh.ts — 版本递增触发watcher.on("add",    (p) => schedule(p));watcher.on("change"(p) => schedule(p));watcher.on("unlink"(p) => schedule(p));// 250ms 去抖后递增版本号bumpSkillsSnapshotVersion({ workspaceDir, reason: "watch", changedPath: pendingPath });

三、环境变量安全注入

很多 Skill 需要配置 API Key 或环境变量才能工作(比如搜索 skill 需要 TAVILY_API_KEY)。OpenClaw 不会把这些密钥明文写在 SKILL.md 里,而是通过配置系统注入。

关键设计点:

  • 引用计数:多个 Skill 共享同一个环境变量时,用计数器管理生命周期
  • 自动回收:Skill 执行完毕后,注入的环境变量会自动清理,不会泄漏到子进程
  • 安全过滤:阻止危险的环境变量名(如 OPENSSL_CONF)被 Skill 篡改

Skills 的安装与使用

前面说了这么多,这里我们自己上手试试吧。

这里是一份 Skills 安装使用指南,Claude 和 OpenClaw 用户都能用上:

一、去哪找技能

平台
网址
特点
ClawHub
https://clawhub.ai/
OpenClaw 官方技能市场,覆盖全面
Claude
https://github.com/anthropics/skills
官方维护,质量相对有保障
skills.sh
https://skills.sh/
第三方技能仓库,以社区贡献为主
GitHub
搜索 skill
开发者个人发布的技能较多,数量丰富但质量参差不齐

二、安装方法

手动下载ZIP

# 1. 从ClawHub下载ZIP包# 2. 解压到OpenClaw工作空间的skills目录cp -r downloaded-skill /path/to/openclaw/workspace/skills/# 3. 验证安装openclaw skills list

ClawHub命令行安装

# 1. 安装clawhub工具npm install -g clawhub# 2. 验证安装clawhub -v# 3. 安装常用技能clawhub install browser        # 网页自动化clawhub install github         # GitHub操作clawhub install tavily-search  # 智能搜索# 4. 查看已安装技能clawhub list# 5. 卸载技能clawhub uninstall <skill-name>

通过聊天让OpenClaw帮你安装

OpenClaw 和 Claude 都支持 通过聊天的方式来安装技能,你需要去技能市场找到对应技能的名称或者网址,然后在聊天框中输入,提示安装技能,就可以触发安装:

四、技能目录结构详解

skills/├── browser/              # 技能名称(文件夹)│   ├── SKILL.md          # 核心:技能定义文件│   ├── scripts/          # 可选:执行脚本│   │   └── main.py│   ├── assets/           # 可选:参考文档、图片等资源│   └── requirements.txt  # 可选:Python依赖├── github/│   └── SKILL.md└── tavily-search/    └── SKILL.md

关键文件说明:

SKILL.md 是技能的核心,包含元数据和指令,相当于技能的“大脑”。

scripts/ 目录存放具体的执行脚本,负责实际干活,可以理解为技能的“双手”。

requirements.txt 用来管理 Python 依赖,确保脚本运行环境一致。

assets/ 目录放辅助资源,比如配置模板或示例文件。

这样有点说不清楚,我们直接写一个 skill 大家就懂了:

怎么写好 skill

额,到这里可能就有点尴尬,因为之前一直在强调 skill 不是高级提示词,但是实际干起来,大家会发现: skill 的本质,仍然是 Prompt...

更加准确的说:skill = 被工程化管理Prompt 单元,说人话就是带元数据和资源的可执行 Prompt 单元。

两者的核心都是那段指令文本,区别在于管理范式执行上下文发生了根本性变化:

维度
Prompt
Skill
管理范式
散落的文本片段,需要手动复制粘贴
结构化的文件夹,版本可控,可共享、可组合
执行上下文
每次手动注入,持续占用上下文窗口
依托渐进式加载机制,元数据常驻,完整内容按需加载
调用方式
用户手动触发
工具自动识别、按需调用

所以,提示词依旧很重要滴,核心未变,范式已变。

决定 skill 质量的两个要素

一、先说元数据

其实就两个东西:name 和 description。

这是模型认识这个 skill 的唯一窗口。能不能在合适的时机被调用,全靠这两句话。很多人写description喜欢这样:

用于审查代码质量的Skill

模型看了也懵,什么场景审查?审查什么?输出什么?它根本不知道该不该用你。

更好的写法是直接告诉模型:什么时候触发、干什么事、输出什么。

在用户提交Pull Request后自动触发对新增代码进行安全审查输出审查报告并标注高风险问题

模型一看就懂了:PR场景、安全审查、带报告。下次遇到PR,它就知道要用这个技能

二、再说约束强度

很多人写skill容易走两个极端。

一种是管得太死,恨不得把每一步都写清楚:

先做A,再做B,然后C

限制得过于死的话,模型稍微超出预期的情况就不知道怎么办了,在哪里一顿瞎操作,自己在找自洽逻辑;

另一种是放得太松,只说了

帮我审查代码

模型自己发挥,每次结果都不一样

这里的技巧是:需要明确的告诉模型要做什么,给它留足推理空间;但也要明确告诉它不要做什么,把边界说清楚。然后再给一下例子,什么时候做什么事情。

实操:skill

一、小技巧:裸模型

在动手写 skill 之前,你好好想想 平时工作中,有哪些重复再做的事情,可以写成skill,想清楚了我们在动手,然后先用裸模型跑一遍你要做的事,看看它到底会出什么问题。

比如我们想写个会议纪要整理的Skill。直接把一段会议录音的文字稿扔给模型,让它帮你整理。跑完你就清楚:

  • 什么类型的会议它整理得乱七八糟?
  • 什么时候它会自己脑补一些没说过的话?
  • 哪些关键决策它总是漏掉?

这些出错的地方,就是你写 skill 要填的坑,这个技巧很好用的。

二、定标准

写skill之前,需要先定标准:什么算好,什么算不好?

比如你发现模型整理会议纪要时,总漏掉“下一步行动”。那你就先把这个场景定下来:

输入:一段关于项目进度讨论的会议记录期望:明确列出“下一步行动”,包含负责人和时间节点及格线:漏掉任何一个行动项就算失败

有了这个及格线,你写 skill 的时候心里就有谱了。

三、先有再优

写 skill 最容易一上来就写一堆逻辑,想把所有场景都照顾到,结果 skill 越写越长,逻辑越绕越乱,一跑就崩。

我的经验是:评测里暴露什么问题,就先解决什么问题,别的先别管。

先写个能过当前评测的最小版本,哪怕只能处理一种类型的会议,也比大而全更容易成功。一般看三个点:

  • 什么时候别用它:评测里翻车的情况,直接写进规则
  • 最简单的路怎么走:最典型的情况,skill 怎么跑能出对的结果
  • 一个 skill 只干一件事:别想着一个 skill 搞定所有事

之前提示词有原子性特点,写 skill 也一样,要一事一议。

四、补边界

最小版本能用了,下一步才是慢慢往里加东西。这时候做三件事:

  1. 把边界情况写清楚:能处理什么、不能处理什么,都说明白
  2. 定好输入输出格式:什么格式进来,什么格式出去,越明确越好
  3. 给例子:模型最快理解你的方式,就是看例子

每个关键场景配一个例子,带上输入和期望输出。 

五、持续观察

skill不是一次性产品,上线之后得经常看看:

  • 它有没有在不该触发的时候跑出来?
  • 执行过程中有没有漏掉关键信息?
  • 有没有产生什么奇怪的依赖?

发现问题 → 加评测用例 → 改Skill → 继续观察

六、稳定的脚本

有些 skill 需要跑脚本,脚本要稳定输出,一定处理好各种边界,几个原则:

错误要明明白白告诉它,别抛个异常就完事

错误:找不到配置文件 ./deploy.yaml提示:检查文件路径,或者运行 init-config.sh 生成一个

输出要说人话

脚本的输出就是模型的上下文。不光要说“干了什么”,还要说“为什么这么干”和“接下来可以干什么”。

别整那些莫名其妙的数字

TIMEOUT_SECONDS = 30  # 服务启动一般10-20秒,等30秒差不多了

终极策略:AI

最后说个偷懒的办法:让 AI 帮你写 skill

你负责想清楚要解决什么问题、怎么验收结果,让AI去试错、总结、写初稿。

让AI从真实任务里“提炼” skill

1. 让AI直接执行一个真实任务2. 干完之后,让它复盘:刚才怎么干的?哪里容易出错?3. 让它按Skill的格式写个初稿4. 你快速过一遍,看看边界和步骤合不合理

从使用反馈里迭代

1. 发现问题后,让AI分析是“什么时候触发”、“做什么”、“怎么做”哪个环节出了岔子2. 直接改Skill,再跑一遍原有测试,别把好的改坏了3. 确认新问题被搞定

两个常见坑

坑一:写成说明书了

不少人写Skill的时候,忍不住加一堆背景介绍、设计理念:

本Skill基于敏捷开发方法论旨在通过结构化思维提升会议纪要的质量...

模型不吃这套,它要的是:什么情况用我、怎么执行、做成什么样。

要记住:skill不是给人看的文档,是给模型下的指令

坑二:越写越复杂

有人觉得 skill 功能越多越好,恨不得一个 skill 搞定十几种场景,规则套规则。

三声,Agent不是传统软件,复杂只会带来不稳定。模型也有注意力的:

skill越简单,触发越精准,执行越稳定

一个 skill 就干一件事,单一职责,无论是提示词还是 skill,到哪都好使。

总结:OpenClaw Skills 的设计

至此,相信各位对 Skills 的设计已经非常清晰了:

最后,我们再总结一下,给这篇架构解析文收个尾:OpenClaw 对 Skills 的设计,其实不是加了一个技能目录这么简单。

他延续了 Claude Code 对 Skills 的设计思路,并且将其升级成了 Agent Runtime 里的正式构件。

这套设计,大致可以概括成五件事:

一、先把 Skill 当成“资源”统一发现

OpenClaw 不假设 skill 只会来自一个地方。

它会同时从工作区、项目 Agent、个人 Agent、用户 managed、内置 bundled、额外目录等多个来源扫描技能,把磁盘上的文件夹统一收束成运行时里的 Skill 集合。

这一步解决的是:

系统里到底有哪些 Skill 可用

也就是说,Skill 在第一层首先不是 Prompt,而是资源。

二、再把 Skill 当成“配置”做优先级覆盖

Skill 真正工程化的关键,是解决同名,如果你一个人玩,压根不会遇到这事。

OpenClaw 的答案很直接:后写覆盖前写,优先级高的覆盖优先级低的。

这样一来,官方可以提供默认版本,个人可以有自己的常用版本,项目也可以覆盖成项目专属版本,而且彼此不冲突。

这一步解决的是:

同一个能力,在不同上下文里能不能有不同实现

所以 Skill 在第二层,本质上已经很像可覆盖配置了,从这里开始就是向着团队协作出发的。

三、然后把 Skill 受控单元

系统并不是扫描到了、合并完了,就一定能给模型用。

OpenClaw 中间还插了一层策略控制:

  1. 当前 Agent 是否允许这个 Skill
  2. 当前运行环境是否兼容
  3. subAgent 是否允许继承
  4. 用户能不能通过 /skill 显式调用
  5. 模型是否允许自动匹配触发

Skill 不是存在就可用,而是在当前上下文里可被授权使用,所以 Skill他必须是受控的能力单元。

将前面三步走完后,OpenClaw 的 Skills,被注入 Prompt,提示词是我们与模型交互的唯一接口:

Skill 最终表现为 Prompt,但它并不是从 Prompt 开始设计的。

它是一路从资源、配置、能力,最后才落到提示词注入。

更进一步说,OpenClaw 的 Skills 不是启动时读一次就完了。

它还有热更新、文件监听、版本刷新、环境变量注入、安全扫描这些机制,总而言之,你会发现,无论是 Claude Code 还是 OpenClaw 是真的非常认可 Skills 的设计,想要将他用好,原因也很简单:

Skills 的本质,不是提示词增强,而是 Workflow 的迁移

结语

年后第一个月即将结束,OpenClaw 小龙虾这次火爆的周期也开始结束了:

我们在这个月,持续几篇文章,都是站在工程架构层对其进行了拆解,相信也足够让大家认识他了。

我们针对 OpenClaw 的拆解就到此为止,但我们对 Agent 的研究报道还在继续,也希望得到大家的关注和认可!

点击上方卡片关注叶小钗公众号,查看下方二维码,添加我个人微信:

往期推荐

《系统性:如何进入AI行业?》

《万字:Agent概述》

《万字:做一个Agent-上》

《万字:做一个Agent-下》

《万字:理解LangChain》

《万字:AI Coding 的真实情况》


《重要:AI学习路线图》

《万字:个人IP,包教包会》

《万字:AI客服实战方法论》

《万字:生产级别的RAG系统》

《万字:RAG实战技巧,包教包会》


《2025年终总结》

《OpenClaw 会不会淘汰 Coze、Dify 这类平台?》

《别被 OpenClaw 带偏了,AI 公司到底该如何组织人才?》

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