<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>提示词工程 on Code Plato</title><link>https://CodePlato3721.github.io/zh/tags/%E6%8F%90%E7%A4%BA%E8%AF%8D%E5%B7%A5%E7%A8%8B/</link><description>Recent content in 提示词工程 on Code Plato</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Thu, 28 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://CodePlato3721.github.io/zh/tags/%E6%8F%90%E7%A4%BA%E8%AF%8D%E5%B7%A5%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>Agent Skill 制作手册 01：入门篇</title><link>https://CodePlato3721.github.io/zh/post/agent-skill-%E5%88%B6%E4%BD%9C%E6%89%8B%E5%86%8C-01-%E5%85%A5%E9%97%A8%E7%AF%87/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://CodePlato3721.github.io/zh/post/agent-skill-%E5%88%B6%E4%BD%9C%E6%89%8B%E5%86%8C-01-%E5%85%A5%E9%97%A8%E7%AF%87/</guid><description>&lt;img src="https://pub-deacd49348914a49b1254b01f351ef0d.r2.dev/2026/05/agent-skill-handbook-01-getting-started/banner.png" alt="Featured image of post Agent Skill 制作手册 01：入门篇" /&gt;&lt;p&gt;Agent Skill 制作手册是一个系列教程。这是第一篇。&lt;/p&gt;
&lt;h2 id="什么是-skill"&gt;什么是 skill
&lt;/h2&gt;&lt;p&gt;很多程序员问，Agent Skill 是什么？我敢说，Agent Skill 是你们学习编程以来能学到的最简单的技术之一。&lt;/p&gt;
&lt;h3 id="skill-是怎么发展出来的"&gt;skill 是怎么发展出来的
&lt;/h3&gt;&lt;p&gt;就像跟人一起工作一样。你有一个新入职的同事，就算他技术再好，也总要先看一些你们公司的 how to 文档，才能开始做事。人们发现，跟 LLM 工作也有同样的模式。你让 LLM 直接做事情，那多半会做出一件偏离你预期的漂亮事，这就很尴尬了。&lt;/p&gt;
&lt;p&gt;然后就有人发现，如果先在提示词里面加上做事情的步骤，LLM 就做得好。所以大家就一直给 LLM 喂 how to 手册。&lt;/p&gt;
&lt;p&gt;但是 LLM 的上下文有限啊，而且你每次塞这么多上下文，你的钱包先爆了。于是人们又想，其实我们自己工作的时候也记不住 how to 的内容。我们大概记得有那么个 how to 教了我做这件事情，但具体内容不记得了。没关系啊，我们到时候再去 wiki 看看不就得了。那我们也可以让 LLM 只记住这个 how to 是做什么的，具体需要的时候再看呗。于是我们可以把每一个 how to 的描述喂给 LLM，LLM 看描述就知道，需要做事情的时候要找哪个 how to 了。&lt;/p&gt;
&lt;p&gt;到这里，我们已经可以推导出一个简单的、给 LLM 量身定做的 how to 了。它只有两个重要属性：&lt;code&gt;name&lt;/code&gt; 和 &lt;code&gt;description&lt;/code&gt;，剩下的就是正文了。每次加载只加载 &lt;code&gt;name&lt;/code&gt; 和 &lt;code&gt;description&lt;/code&gt;，LLM 自己会判断是否需要读取这个 how to 的正文。&lt;/p&gt;
&lt;p&gt;&lt;img alt="skill 结构示意图" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1086" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://pub-deacd49348914a49b1254b01f351ef0d.r2.dev/2026/05/agent-skill-handbook-01-getting-started/01.png" srcset="https://CodePlato3721.github.io/01_17950217286682826352_hu_ad092d28159b7ab2.png 800w, https://pub-deacd49348914a49b1254b01f351ef0d.r2.dev/2026/05/agent-skill-handbook-01-getting-started/01.png 1448w" width="1448"&gt;&lt;/p&gt;
&lt;p&gt;这就是 skill。其实这个东西叫什么不重要，它可以叫 howto、guide、manual 都可以，但是大家觉得 skill 这个名字够短、好记，还自解释，就用它了。可能在别的平行宇宙里，它叫 guide。&lt;/p&gt;
&lt;h3 id="skill-是哪家的"&gt;skill 是哪家的？
&lt;/h3&gt;&lt;p&gt;这种 &lt;code&gt;SKILL.md&lt;/code&gt; 形态的 Agent Skill，最早是 Anthropic 系统公开推广的；但 skill 这个词和&amp;quot;让 AI 学技能&amp;quot;的思想并不属于某家公司。OpenAI、OpenClaw、Hermes Agent 都有自己实现的 skill。这只是一个概念，各家有各家自己的实现，这些实现在细节上有些区别，但都是指同一个事情。&lt;/p&gt;
&lt;h2 id="怎么写-skill"&gt;怎么写 skill
&lt;/h2&gt;&lt;h3 id="skill-通用规范"&gt;skill 通用规范
&lt;/h3&gt;&lt;p&gt;各家的 skill 规范的共同点是：skill 是一个文件夹。结构是：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;my-skill/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SKILL.md # 必须：元数据 + 指令
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scripts/ # 可选：可执行脚本
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; references/ # 可选：文档、说明、规范
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;而其中的 &lt;code&gt;scripts&lt;/code&gt;、&lt;code&gt;references&lt;/code&gt; 都不是必须的，只是大家习惯的一种最佳实践而已。最重要的是 &lt;code&gt;SKILL.md&lt;/code&gt;。有的 skill 只有这一个文件，而这个文件的结构也很简单。&lt;/p&gt;
&lt;p&gt;一个最小的 &lt;code&gt;SKILL.md&lt;/code&gt;，在元数据层面只需要 &lt;code&gt;name&lt;/code&gt; 和 &lt;code&gt;description&lt;/code&gt;。正文可以很短，但最好写清楚 agent 被触发后到底要做什么。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;skill的名字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;description&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;解释这个skill是干嘛的，什么时候应该被触发，什么时候不应该被触发等&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当你的 skill 比较复杂，需要一些结构化的数据和逻辑的时候，就可以考虑建立 &lt;code&gt;scripts&lt;/code&gt; 文件夹，然后在里面写代码。当你的 skill 引用的文档比较多，你怕把上下文给撑爆了，就可以把大部分文档移到 &lt;code&gt;references&lt;/code&gt; 里面。&lt;/p&gt;
&lt;h3 id="写一个-skill"&gt;写一个 skill
&lt;/h3&gt;&lt;p&gt;来动手写一个 skill 吧。我保证这是你看到的最短的教程。这个 skill 会在你说三次 Hello 的时候回复三个 World。新建 &lt;code&gt;SKILL.md&lt;/code&gt;，并在里面写：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;hello-world&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;description&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;当用户说三次&amp;#34;Hello&amp;#34;（例如&amp;#34;Hello Hello Hello&amp;#34;）时，回复三次&amp;#34;World&amp;#34;：&amp;#34;World World World&amp;#34;。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Hello World&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;当用户的消息中包含恰好三个&amp;#34;Hello&amp;#34;时，只回复：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;World World World&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;不说其他任何内容，只有这三个字。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后安装到你的 AI agent 里面。你问我怎么安装？这都什么年代了，你问你自己的 AI agent 怎么安装，它自会告诉你的。&lt;/p&gt;
&lt;p&gt;安装好后就试试吧。&lt;/p&gt;
&lt;h2 id="skill-规范"&gt;skill 规范
&lt;/h2&gt;&lt;p&gt;Codex、Claude Code、OpenClaw、Hermes Agent 它们都对 skill 有自己的一些细节上的规范，我就不在此赘述。不过有几点我觉得有必要提。&lt;/p&gt;
&lt;h3 id="skill-防触发机制"&gt;Skill 防触发机制
&lt;/h3&gt;&lt;p&gt;基本上，是否触发 Skill 是看 LLM 自己决定的。这其实带来另外一个问题，就是 skill 经常被误触发，或者不被触发。对此各家都有各自的措施。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;禁止自动触发，但允许手动触发&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude / OpenClaw: &lt;code&gt;disable-model-invocation: true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Codex: &lt;code&gt;agents/openai.yaml&lt;/code&gt; 里的 &lt;code&gt;allow_implicit_invocation: false&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;彻底禁用 skill&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Codex: &lt;code&gt;[[skills.config]] enabled = false&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;OpenClaw: &lt;code&gt;skills.entries.&amp;lt;skillKey&amp;gt;.enabled = false&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;从这里可以看出，skill 的优点在于自由，但缺点也是自由。有时候你想触发，却触发不了；不想触发，它却一直被触发。不过在之后的教程中我会介绍一些范式来解决这个问题。&lt;/p&gt;
&lt;h3 id="skill-的分类"&gt;Skill 的分类
&lt;/h3&gt;&lt;p&gt;在 skill 慢慢被越来越多的人使用后，skill 也开始出现一些分类方式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;skill 和 command&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 OpenClaw 和 Claude 桌面版中，skill 是可以用斜杠（&lt;code&gt;/&lt;/code&gt;）调用的。区别在于，在 Claude 桌面版中，你安装了 Skill 后，按 &lt;code&gt;/&lt;/code&gt; + &lt;code&gt;&amp;lt;skill名&amp;gt;&lt;/code&gt; 就可以触发 skill；而在 OpenClaw 中，你是通过设置 &lt;code&gt;user-invocable: true&lt;/code&gt; 来让这个 skill 可以用斜杠触发的。&lt;/p&gt;
&lt;p&gt;在 OpenClaw 里，一部分 skill 可以被暴露成 slash command。command 是调用方式，不一定是独立分类。这就引发了一个有趣的思考：当你建立一个新 skill 的时候，你可以思考一下，你这个 skill 是一个普通的 skill，还是一个 command。毕竟在手机上找到斜杠，并不像在电脑上这样容易。有些生活类的 skill，你可以依赖 LLM 去猜测；而有些需要精确被触发的，就可以用斜杠。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;工作流式和应用式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;你会发现，有些 skill 仅仅只是定义了一件事情该怎么做，而有些 skill 更像是一个你自己定义的 app。定义了该怎么做的，可以被称为工作流式。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;比如你让 LLM 帮你归纳一下会议纪要。这样的 skill 就只需要 &lt;code&gt;SKILL.md&lt;/code&gt; 就够了。如果流程比较复杂，那就把流程抽取到 &lt;code&gt;references&lt;/code&gt; 里面。&lt;/li&gt;
&lt;li&gt;如果是应用式的，比如你要做一个购物清单，你需要比较复杂的逻辑和比较规范的数据存储。你就需要将某些逻辑抽取出来写成 &lt;code&gt;scripts&lt;/code&gt;。但是 &lt;code&gt;scripts&lt;/code&gt; 不是越多越好，只有需要确定性行为或外部工具时才用 &lt;code&gt;scripts&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="skill 分类示意图" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1086" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://pub-deacd49348914a49b1254b01f351ef0d.r2.dev/2026/05/agent-skill-handbook-01-getting-started/02.png" srcset="https://CodePlato3721.github.io/02_18422898844138254243_hu_ce56d308cb564460.png 800w, https://pub-deacd49348914a49b1254b01f351ef0d.r2.dev/2026/05/agent-skill-handbook-01-getting-started/02.png 1448w" width="1448"&gt;&lt;/p&gt;</description></item></channel></rss>