☰
Agent Skills实战:打造可复用、可测试的LLM技能库
2026/10/7 11:19:00 网站建设 项目流程

1. 项目概述:agent-skills 到底在做什么

1.1 先说说为什么要做这件事

如果你过去一年里在认真做 LLM Agent 相关的东西,大概率会遇到同一个场景:项目里到处散落着“给模型的一段提示词”、“给模型的一段提示词加一个临时脚本”、“某个目录里躺着一个谁也不敢删的 prompt 文件”,每次换个项目就要重新写一遍,换个模型还要再调一遍。我自己的项目里,光“从 PDF 里提取信息”这个需求就写了不下六版,每一版都只解决当时那一个任务,换一个文档结构就废掉。

前阵子 Claude 把 Agent Skills 这个概念正式带进大众视野之后,我意识到这不只是一个新功能,而是一种早就该有的组织方式:把“能力”本身做成可以独立维护、独立复用、独立测试的单元,让 Agent 像人一样“会一门手艺”,而不是每次临时抱佛脚。于是就有了 agent-skills 这个项目——一个我自己长期维护的 Agent 技能库,同时也是一套关于“怎么写好一个 Skill”的规范和方法论。

这个项目解决的核心问题很朴素:怎么让 Agent 的能力不复用成本越来越高,怎么让一群 Agent 共享同一套经过验证的技能,而不是各写各的。它适合三类人参考:正在做 Agent 应用开发的工程师、需要给团队沉淀 AI 能力的平台团队、以及还在观望怎么把 Agent 落地到日常工作中的产品同学。这篇文章不讲广告,只讲我在构建这个技能库过程中的设计思路、完整实操和踩坑实录。

1.2 立项前我反复踩到的三个坑

先说我立项前的那段“黑暗时期”。第一个坑是提示词压根没法复用。你精心写好的“会议纪要整理大师”,换个场景或者换一种输入格式,效果立刻打折;表面上是在复用提示词,实际上每次都在修修补补,改到最后谁也不清楚这个提示词到底还能不能信。第二个坑是代码和提示词脱节。很多任务光靠提示词做不干净,必须配合脚本做 PDF 解析、网页抓取、数据清洗,但脚本散落在各个项目的 scripts 目录里,没有版本、没有测试、没有文档,时间一长根本不敢动。第三个坑是没有验收标准。提示词怎么算“好”?脚本怎么算“对”?从来没人定义过,全靠玄学调参。

这三个坑叠加起来,让我下决心把“技能”作为一等公民来对待。agent-skills 项目的目标就变成了三件事:第一,沉淀一套可复用的技能库,任何 Agent 都能通过描述发现并调用;第二,定下一套撰写规范,让每个 Skill 从诞生起就具备清晰的元信息、可执行的指令和可验证的测试;第三,提供一组轻量工具,让技能的编写、调试、测试尽量像写单元测试一样确定。下面我会把这三件事的每一步拆开来讲。

2. 核心概念拆解:Skill 与 Tool、Workflow 的关系

2.1 Skill 的本质与构成

先给一个我自己的定义:Skill 是“一段面向 Agent 的、结构化的能力封装”。它本质上是一个目录,目录里通常包含三个部分。

第一部分是 SKILL.md,这是灵魂。它用 Markdown 写成,顶部是 YAML frontmatter,里面写 name、description、version 这些元信息;正文则是给 Agent 看的操作说明,告诉它这个技能适用于什么场景、按照什么步骤执行、遇到异常怎么处理。第二部分是可选的 scripts,也就是配套脚本,负责处理那些提示词搞不定的确定性任务,比如解析 PDF、调 API、做格式转换。第三部分是可选的 resources,比如模板、参考文档、schema,给 Agent 在执行时按需读取。

这三部分的组合逻辑很清晰:能用代码确定的,就不要让模型自由发挥;需要用模型理解的,才写进指令里。SKILL.md 不是给人类看的教程,而是一份给“会读文档的智能体”看的操作手册。这也解释了为什么选择 Markdown 而不是 JSON 或者纯提示词——Markdown 既保留人类可读性,又能让模型以最低成本理解结构;同时模型对 Markdown 的天然熟悉度远高于自定义序列化格式,出错概率更低。

下面是一个最小可用的 SKILL.md 结构示意:

--- name: pdf-structure-extract description: 用于从 PDF 文档中抽取文本并生成结构化 Markdown,适合学术论文、合同、产品手册;不适合扫描件和加密 PDF。 --- # PDF 结构化提取 ## 适用场景 ... ## 执行步骤 1. ... 2. ...

注意 description 里同时写了“适合”和“不适合”。这个是整个技能能不能被正确调用的关键,后面我会单独展开。

2.2 Skill、Tool、Workflow 三者的边界在哪里

很多人在接触 Skills 之后会问一个问题:这跟 tool 有什么区别?跟 workflow 又有什么区别?我的理解用一张表就能说清楚:

维度ToolSkillWorkflow
粒度原子操作复合能力完整流程
状态无状态可带上下文有明确状态机
调用方式模型按需调用模型按描述发现预先编排,固定拓扑
内部自由度几乎没有中等,有策略空间低,顺序基本固定
复用单位函数可迁移能力业务路径

举个生活化的例子。Tool 就好比一把螺丝刀,功能单一,什么时候用都行;Workflow 是一条流水线的工艺卡,从零件到成品每一步都定死了;Skill 则更像一个技工的手艺——它知道什么时候用螺丝刀、什么时候用扳手、拧到什么程度算到位,遇到滑丝时知道怎么处理。Agent 拥有了 Skill,等于拥有了“会处理某类问题”的能力,而不是仅仅被授权调用某个函数。

这个区分直接决定了我在 agent-skills 项目里的选型策略:原子操作尽量做成 Tool 或 MCP 服务,确定性流程用 Workflow 编排,而凡是“需要模型根据输入灵活调整策略”的任务,全部收拢成 Skill。统计下来,我的技能库里约七成是“提示词策略 + 一到两个脚本”的组合,这是 Skill 最典型的形态。

3. 目录结构与元信息设计

3.1 技能库的三层目录:库、分类、技能

agent-skills 项目的第一个产出物就是目录规范。库根目录下有一个 SKILLS.md 作为总索引,然后按领域分子目录。目前我分了六个领域:document(文档处理)、research(信息研究)、data(数据处理)、content(内容创作)、engineering(工程辅助)、life(个人效率)。每个领域下再放具体的 Skill 目录。

一个完整的目录树长这样:

agent-skills/ ├── README.md ├── SKILLS.md ├── skills/ │ ├── document/ │ │ ├── pdf-structure-extract/ │ │ │ ├── SKILL.md │ │ │ ├── scripts/ │ │ │ │ ├── extract.py │ │ │ │ └── requirements.txt │ │ │ ├── resources/ │ │ │ │ └── example-output.md │ │ │ └── tests/ │ │ │ ├── sample-input.pdf │ │ │ └── expected-output.md

命名上我坚持两条规则:全部用小写 kebab-case(如 pdf-structure-extract),并且必须带上领域语义的前缀,避免出现一堆让人分不清用途的抽象名字。这个习惯是从大仓代码里学来的——良好的命名本身就是文档,Agent 在发现技能时,目录名和文件名也会作为语义信号进入它的“视野”。

每个 Skill 目录内部保持完全一致的布局:SKILL.md 固定放在根目录,scripts 只放可执行脚本,resources 只放被 SKILL.md 引用的只读资源,tests 放验收样例。这样做的目的是让工具链和 Agent 都可以用固定的路径规则去索引任何技能,而不用针对每个技能单独适配。

3.2 frontmatter 字段的最佳写法

SKILL.md 的 YAML frontmatter 是 Agent 是否能“发现”这个技能的关键。我的标准字段就六个:name、description、version、license、dependencies、tags。其中 description 是重中之重,它直接决定了 Agent 什么时候会选中这个技能。

写 description 有一条铁律:写“什么时候用”和“什么时候不用”,不要写“我能做什么”的能力广告。比如“可以提取 PDF 文本”这种描述就是典型的无效描述,因为几乎任何一版系统提示词都能让模型处理 PDF;有区分度的描述应该是“从结构化 PDF 中抽取章节标题、表格和引用,生成带锚点的 Markdown,适合学术论文与合同文本;扫描版 PDF 请使用 ocr-text-extract 技能”。前一句给 Agent 一个明确的触发条件,后一句给了它一个负向选择,避免在错误场景下调用。

version 字段同样重要。技能的更新频率比我想象的高得多,尤其是当依赖的脚本库升级或参考模型的能力变化时,技能的指令需要跟着调整。没有版本号的技能库,很快就会变成谁都不敢动的黑盒。我目前的做法是语义化版本:主版本号变化代表指令结构或行为有 breaking change,次版本号变化代表新增边界处理或场景覆盖,补丁号变化只是措辞修正。

dependencies 字段要写清楚脚本运行所需的 Python 版本、第三方库和外部 API 凭据要求。注意:我坚持“离线优先”原则,技能默认不应强依赖外部网络服务,除非场景本身就需要联网(比如网页抓取)。这个原则让技能库在沙箱环境和本地环境都能稳定运行,排障成本低很多。

4. 实操:从零写一个可复用的 Skill

4.1 第一个实战需求:PDF 内容提取与结构化

纸上谈兵没有意义,我用技能库里的第一个真正过生产环境的技能来做完整演示。这个技能名字叫 pdf-structure-extract,需求来自一个法律文本项目——每周要处理几十份合同和裁决书 PDF,需要提取出标题、当事人、条款章节和判决结果,并整理成统一结构。原来靠人工复制粘贴,后来靠临时提示词,效果时好时坏,核心问题在于纯提示词对 PDF 的排版噪声非常敏感,换一个模板就崩。

我把它做成 Skill 的思路是:用脚本做确定性解析,用指令做语义重组。脚本负责把 PDF 变成“干净的纯文本流”,模型负责理解文本流并按要求输出结构化 Markdown。这样分工有如下好处:PDF 的字体、分栏、页眉页脚这些噪声完全由代码处理,不受模型随机性影响;而文本语义的归纳、章节关系的判断,则放到模型最擅长的区域。

4.2 SKILL.md 全文与逐段讲解

下面这个 SKILL.md 是经过十几个版本迭代后的精简形态,示例内容如下:

--- name: pdf-structure-extract description: 从文本型 PDF 中抽取内容并生成结构化 Markdown,适用于学术论文、合同、裁决书、产品手册。输出包含标题层级、表格转 Markdown、关键字段提取。不适合扫描件(请用 ocr-text-extract)、不适合加密 PDF。 version: 2.1.0 license: MIT dependencies: - python: ">=3.10" - pypdf: ">=4.0" tags: [pdf, document, extraction, markdown] --- # PDF 结构化提取 ## 1. 前置条件 - 输入必须是 PDF 文件路径。 - 运行 `python scripts/extract.py <input.pdf> <output.txt>` 将 PDF 转为纯文本。 ## 2. 执行步骤 1. 先调用脚本提取纯文本到临时文件。 2. 阅读提取出的文本,识别文档类型(论文/合同/裁决书/手册)。 3. 按文档类型执行对应模板: - 论文:提取标题、摘要、作者、章节标题、参考文献。 - 合同:提取当事人、标的、金额、期限、违约责任、签署条款。 - 裁决书:提取案号、当事人、争议焦点、裁判理由、裁判结果。 4. 输出为 Markdown,使用 `##` 作为一级标题。 5. 保留原文中的编号和层级,不要自行发明结构。 6. 如果文本中有表格,先判断是否为多栏排版;是则按阅读顺序拼接后转为 Markdown 表格。 ## 3. 边界处理 - 提取出的文本如果包含乱码,说明该 PDF 可能是扫描件,停止本技能并提示用户改用 OCR 技能。 - 如果脚本抛异常,原样输出异常信息,不要尝试猜测。 - 输出中不要包含页眉页脚和页码。

这段内容里最容易被低估的是“执行步骤”和“边界处理”的配合。很多初版技能只写步骤,不写异常路径,结果 Agent 遇到乱码时往往会“自我发挥”,编造一个看似合理的处理方式。把边界情况写清楚,等于提前给 Agent 铺好了安全轨道。这不是限制模型的灵活性,而是确保它的灵活性用在正道上。

4.3 配套脚本、依赖与调用约定

SKILL.md 里引用的脚本 extract.py 本身非常短,核心逻辑就是用 pypdf 提取每页文本并拼起来:

#!/usr/bin/env python3 import sys from pypdf import PdfReader def extract(path: str, out_path: str) -> None: reader = PdfReader(path) lines = [] for page in reader.pages: text = page.extract_text() or "" lines.append(text) lines.append(f"\n<!-- PAGE BREAK {page.page_number} -->\n") with open(out_path, "w", encoding="utf-8") as f: f.write("\n".join(lines)) if __name__ == "__main__": extract(sys.argv[1], sys.argv[2])

你会发现脚本里没有做任何语义理解,连章节识别都没做。这是故意的——语义环节全部交给 Agent,脚本只负责把 PDF 变成模型好消化的“干净文本”。一个值得注意的设计细节是每页末尾我插入了<!-- PAGE BREAK -->注释标记,这能有效缓解多栏 PDF 和跨页段落被模型误读的问题。Agent 在读到这个标记时,会意识到这是一页的结束,而不是一段的结束,段落拼接的正确率明显上升。

依赖管理我也做了固定:每个 Skill 的 scripts 目录下放一个 requirements.txt,并且在 SKILL.md 的 dependencies 字段里声明版本下限。脚本必须在受控环境中执行,我自己的做法是用沙箱方式调用,任何网络请求默认拒绝,只有显式在 dependencies 里声明“允许网络访问”的技能才能联网。这是技能库的安全基线,也是团队敢放心共享这个库的前提。

4.4 测试集与验收标准

技能写出来之后,最容易被跳过也最致命的一步是测试。我给每个技能目录都加了 tests,里面放一组代表性的输入和期望输出。pdf-structure-extract 的测试集包括:一份三栏学术论文、一份带表格的合同扫描样张(用于验证“提示用户改用 OCR”的边界逻辑)、一份包含嵌套目录的软件手册。

验收时不完全依赖自动化断言,因为模型的输出天然具有多样性。我采用双层验收:第一层做结构校验,用脚本检查输出是否符合 Markdown 标题层级和表格语法;第二层做语义抽查,把输出交给另一个模型或人工快速过一遍,看关键字段是否齐全、层级是否合理。这样既保留了模型的灵活性,又给了能力一个最低质量线。

5. 案例拆解:第二个 Skill——网页正文清洗

5.1 需求分析与任务拆分

第二个技能来自内容运营团队的需求:每天需要把几十篇网页文章清洗成统一格式的 Markdown,去掉导航、广告、推荐位、脚本标签这些噪声,再抽取标题、发布时间、作者、正文。原先他们用各家网站的 RSS 加正则硬解,规则多到维护不动。我把它设计成 web-article-cleaner 这个 Skill。

任务拆解之后,确定性部分是用 readability 类似的算法提取正文区块,策略性部分是判断哪些内容属于“正文语境”、哪些属于“噪音语境”。这个判断让模型来做比写死正则靠谱得多,但让模型直接面对原始 HTML 又太浪费 token 且容易犯错。所以脚本先把 HTML 清洗成 DOM 树并抽取候选正文区块,模型再对候选区块做语义筛选和结构重组。一个典型的 SKILL.md 执行步骤大致是:

## 执行步骤 1. 使用 `scripts/prepare.py <url_or_html> <output_dir>` 获取并初步清洗页面。 2. 查看输出的正文候选列表,每个候选包含 text 和 context 字段。 3. 结合页面标题、时间、作者等元信息,判断哪些候选属于正文。 4. 按原文顺序合并正文区块,转换为标准 Markdown。 5. 移除所有包含“阅读原文”“分享到”“相关推荐”等信号的区块。

这个设计的关键在于,我不让模型直接处理 HTML 源码,而是给它一个“已经去掉大量噪声的半成品”。这就像你让实习生整理一份会议记录,先给他一叠已经剔除无关邮件的打印稿,而不是把整个邮箱交给他。既要让模型发挥结构化能力,又要减少它的无效消耗,这个平衡是写 Skill 的核心手艺。

5.2 指令正文里那些容易被忽略的边界

web-article-cleaner 在迭代中暴露出很多在文档里不容易预见的边界情况。比如网页里常见“上一篇/下一篇”的链接,出现在正文末尾时,模型很容易把它们当成正文的一部分;又比如某些网站的正文区块里嵌了“相关阅读”的卡片,视觉上像正文,语义上却是推荐位。

我的解决办法是在 SKILL.md 里直接给出一份“噪音信号清单”,把容易误判的模式显式列出来,并且在清单结尾写一句指导原则:“当区块内容与核心主题无关或包含站内推荐链接时,一律视作噪声”。给模型一个可推理的原则,比给它二十条孤立规则更管用,因为真实网页的组合变化无穷,规则枚举不完,原则可以泛化。这个经验后来也推广到了其他内容类技能里。

还有一个细节:时间字段的处理。网页上的时间格式五花八门,有2023-04-05、Apr 5, 2023、2023年4月5日,还有相对时间如“3 小时前”。我在指令里明确要求:相对时间一律转为绝对时间,未知年份或明显错误的时间标注为unknown,而不是编造。你可能会觉得这种要求太细,但正是这些细节决定了技能输出是否值得被下游系统直接消费。

5.3 与 MCP / Tool 协作的接缝怎么留

做 agent-skills 时我始终提醒自己:Skill 不应该是封闭的,它必须能跟现有的 Tool 生态协作。这里的接缝设计很重要——一个网页清洗技能,获取网页既可以自己写脚本抓取,也可以调用团队已有的抓取 MCP 服务。我的做法是在 SKILL.md 里把“获取页面”这一步写成一个可选动作:如果有可用的网页抓取 Tool 或 MCP 服务,优先调用;否则回退到内置脚本。

为什么这么设计?因为 Skill 的迁移场景很多:在本地个人环境里,没有 MCP 服务,回退脚本就能跑;在团队共享平台上,有了统一抓取服务,技能自动升级为走服务通道。这种“优先外部能力、以脚本兜底”的接缝设计,能显著提升技能在不同 Agent 运行时之间的可移植性。写技能时想清楚这一层,比事后给每个环境写适配器省太多功夫。

6. 常见问题与排查技巧实录

6.1 description 写不好,Agent 永远不调用你

这是我在技能库里踩到过的最典型的坑。某个技能明明写得很完整,但 Agent 就是不用它,日志里压根没有它被选中的痕迹。排查到最后,问题出在 description 太“谦虚”了——我写的是“处理 PDF 文件”,而 Agent 实际面对的任务描述是“把这份合同整理成 Markdown”。两者的语义距离看起来不远,但模型在做工具选择时,更倾向于命中那些触发词更精确的描述。

解决方法是把 description 改写成“从 PDF、Word 等文档中提取结构化信息并转换为 Markdown,适用于合同、论文、裁决书等文本型文档,特别适合需要保留章节结构和表格的场景”,同时在末尾加上“如果文档是纯扫描图片,请勿使用本技能”。改完之后,调用命中率肉眼可见地提升。记住一个口诀:description 是写给“自动选择器”看的,不是写给搜索引擎看的,要描述任务语义,而不是描述技术能力。

6.2 指令写得“既多又少”

新手写 SKILL.md 容易走两个极端。第一个极端是只写三句话,比如“提取 PDF 信息”,等于什么都没说,模型仍要靠猜来干活。第二个极端是写三大页穷举所有可能,结果真正执行时模型被冗长的条件分支绕晕,反而在简单任务上出错。我自己总结的合理密度是:步骤控制在 4 到 10 步之间,每步一句话;边界条件单独成节,只写高频和危险的场景;示例放 resources 目录,由模型按需读取,不塞进主指令。

还有一个几乎人人会犯的错:用“禁止”开头写规则。比如写了“禁止输出 JSON”,模型反而更容易朝着 JSON 方向跑。更有效的写法是正面描述期望行为,“以自然段落输出,不要使用代码块包裹”。给替代方案,比单纯禁止更符合大模型的响应偏好。这条经验在多个技能上验证过。

6.3 脚本执行的安全边界

技能库共享之后,安全就是头等大事。最大的风险有两条:指令注入和脚本滥用。指令注入是指某个恶意输入让模型误解 SKILL.md 的指令、输出敏感信息或执行危险操作;脚本滥用则是技能自带脚本被用于读取不允许访问的文件、发送外部请求等。我的防御基线是:所有脚本在独立沙箱中运行,默认禁止网络、限制文件系统访问范围;SKILL.md 里明确约定“输入文件路径必须由用户在命令行提供,技能不得接受来自文档内容的文件路径”。

这两条规则听起来简单,但实际执行中有很多细节。比如 pypdf 在处理畸形 PDF 时可能抛出诡异的异常,你不能让模型读了异常信息后自己去“修复”,否则就是给了它一条绕过沙箱的路径;正确做法是 SKILL.md 写明“脚本异常时直接停止并汇报”。安全不是给脚本加固一个补丁就完了,而是要在指令层面把 Agent 的行为也约束住。共享给团队之后,我还会定期审计技能依赖库的版本,避免带已知漏洞的库长期潜伏。

6.4 版本漂移与回归测试

技能库上线一段时间后,我发现某些技能“偶尔失灵”。原因往往是脚本依赖的第三方库升级了,或者模型基础能力变了导致对指令的理解偏移。这类问题很难靠偶发复现来发现,必须靠回归测试。我的做法是把 tests 目录里的样例做成一个每次变更必跑的回归集:改动 dependency 版本、修改 SKILL.md 的步骤或边界后,都要跑一遍全部技能测试,对比输出是否仍满足结构校验和关键字段抽取。

这轮回归的成本并不高,因为脚本层可以做全自动化断言,语义层可以用成本更低的小模型做快筛。关键是把“必须跑回归”变成变更流程里不可跳过的一步,而不是靠自觉。一旦跳过,你通常会在三周后的某个凌晨被使用方的 bug 报告叫醒。

6.5 技能库膨胀与重复建设

技能写到一定数量会出现另一个问题:重复。团队里有人写了一个“markdown-table-format”,另一个人写了一个“table-restructure”,功能重叠了 70%,但名字和描述都对不上,Agent 调用时选择困难,维护时要改两处。我现在每个季度做一次技能审计:列出全部技能的名称、描述、触发场景,找出重叠项合并,找出死角项删除。合并时不是简单删一个,而是把两份指令里各自的好经验合并进保留的那份,再更新测试集。

同时,我会在 SKILLS.md 总索引里给每个技能标注“状态”:active、deprecated、experimental。Agent 在选择时如果看到 deprecated 标记,应该直接跳过。这个机制让技能库在增长的同时保持整洁,否则它就是又一个越滚越乱的大仓。

7. 从个人玩具到团队基建:我的复盘与下一步

7.1 投入产出比到底怎么算

有人问过我,维护一个技能库是不是太重了?我的答案是:同一个技能如果会被三个以上 Agent 或三个以上业务流程用到,把它封装成 Skill 的投入就已经回本了。我算过一笔账:写一个合格的 Skill 大约需要半天到一天,但之后每次复用节省的时间是一次性的提示词调试两三个小时起步,算上避免重复踩坑的隐性收益,大概复用到第七八次就已经赚回来了。

更关键的是复用的质量会持续提升。提示词散落在项目里时,没有人会去维护和更新;但 Skill 一旦进了技能库,会有明确的版本、测试和审计流程,它的质量是随时间单调递增的。这是我认为 Agent Skills 模式真正有价值的地方——它不是又一个“更聪明的提示词技巧”,而是让 AI 能力进入工程化资产管理范畴的一次转变。

7.2 我后来改掉的两个坏习惯

第一个坏习惯是“什么都想做成 Skill”。有些任务其实就是一个 Tool 就能解决的原子操作,强行包一层 Skill 反而增加了调用复杂度和维护成本。我现在会先问三个问题:这个能力是否有复合的决策逻辑?是否会被多个场景复用?是否有确定性环节需要脚本介入?三个问题里有任意一个回答是肯定的,才考虑做 Skill。第二个坏习惯是不写边界。早期版本总觉得指令写得越详尽越好,后来发现真正提升稳定性的不是步骤更多,而是边界更清晰。

7.3 后面还想做的三件事

最后说几个我在路上已经开始探索的方向。第一,给技能库加一套自动化的质量评估流水线,让每个新提交的 Skill 自动跑结构校验、依赖检查和回归测试集,减少人工评审成本。第二,把技能的发现机制做得更聪明——通过向量检索的方式,让 Agent 在面对开放任务时能基于语义相似度找到可能适用的技能,而不是完全依赖 description 的文本匹配。第三,探索 Skill 之间的组合引用,允许一个 Skill 在执行过程中按需加载另一个 Skill,形成能力的有向图,逐渐逼近“一个团队各司其职”的协作形态。

我个人在实际操作中的体会是:Agent 的能力边界不是靠堆更多的 system prompt 撑起来的,而是靠这些结构化的、可维护的、可验证的“手艺”一点点垒起来的。agent-skills 这个项目到目前给我带来的最大收获,不是它让多少任务自动化了,而是我终于有了一套可以放心交给不同 Agent 的能力资产。如果你也在做 Agent 应用,我建议你从最小的一个技能开始——选一个你已经重复写过三遍的场景,把它封装成一个带测试的 Skill,然后观察它接下来如何被复用。那种感觉,只有试过才知道。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询