别再给AI塞提示词了:Skill正在重塑Agent的能力边界

举报
霍格沃兹测试开发学社 发表于 2026/02/24 16:18:48 2026/02/24
【摘要】 最近一段时间,Agent 生态里一个明显的变化是:大家不再执着于“给模型塞更多提示词”,而是开始认真思考——能力应该如何被组织、被调用、被复用。在这一轮讨论中,OpenClaw 的 Skill 体系被不少开发者反复提及。它并没有试图再造一个“更大的模型”,而是选择了一条更工程化的路:把 AI 的能力拆成一个个可插拔、可复用、可进化的单元,在真正需要的时候再加载。如果你之前用过 Agent,却...
最近一段时间,Agent 生态里一个明显的变化是:大家不再执着于“给模型塞更多提示词”,而是开始认真思考——能力应该如何被组织、被调用、被复用。

在这一轮讨论中,OpenClaw 的 Skill 体系被不少开发者反复提及。它并没有试图再造一个“更大的模型”,而是选择了一条更工程化的路:把 AI 的能力拆成一个个可插拔、可复用、可进化的单元,在真正需要的时候再加载。

如果你之前用过 Agent,却总觉得“它好像什么都会一点,但又什么都不稳”,那么理解 Skill 的设计思路,会是一个关键转折点。

Skill 不是插件,而是一种“能力组织方式”

在 OpenClaw 的语境里,Skill 并不等同于传统意义上的插件。

插件更像是提前安装好的功能模块,而 Skill 更接近一种被描述、被理解、被按需调用的能力。它用自然语言定义自己能做什么、适合在什么情况下使用,同时保留了足够清晰的边界和限制。

这背后有一个很现实的工程考量:大模型的上下文窗口是有限的。如果一开始就把所有工具、所有能力一股脑塞进去,不但浪费 token,还会让模型在关键决策时分心。

所以 Skill 的核心思想不是“我能做什么都告诉你”,而是——等你真的需要我时,我再把细节交出来。

为什么渐进式披露,正在成为 Agent 体系的分水岭

很多早期 Agent 项目都会遇到一个问题:工具越加越多,效果反而变差。

原因并不神秘。模型在面对大量工具描述时,既要理解当前任务,又要判断该用哪个工具,本身就会出现注意力稀释。而渐进式披露,正是为了解决这个问题而生的。

在 OpenClaw 的设计中,Skill 的加载被拆成了三个阶段。系统启动时,只读取极简的能力索引,用来判断“哪些 Skill 可能有用”;当用户的输入真的匹配到某个场景时,才加载对应 Skill 的完整定义;而真正执行时,才引入具体的上下文、参数和中间结果。

这种设计带来的变化非常直观。Agent 启动更快了,对话成本更低了,更重要的是——工具选择的准确率明显提升。模型不再是在一堆工具中“猜”,而是在少量、强相关的能力中“选”。

一个真实场景:为什么微信文章总是“抓不到正文”

理论说得再多,不如一次真实的踩坑。

2 月底的一次使用中,有用户在对话里直接丢了一条微信公众号文章链接,希望 AI 帮忙总结内容。第一反应很自然:直接用 web_fetch 抓取页面。

结果并不意外。返回的只有“继续滑动看下一个”等提示文字,正文几乎为空。

抓取失败的"三层防御"

不仅仅是"JS渲染"的问题,微信公众号文章的抓取难度,实际上是三层防御机制的叠加:

防御层级
技术原理
为什么web_fetch会失败
第一层:Cookie鉴权
微信要求请求必须携带有效的 wap_sid2 Cookie,这个Cookie是用户登录微信网页版时下发的,有时效性且与IP绑定。
web_fetch 默认不带Cookie,或者带的是无效/过期的Cookie,直接被服务端拒绝返回正文。
第二层:动态渲染
文章正文确实由JavaScript动态加载,但这不是为了防爬,而是SPA(单页应用)的架构使然。正文数据通常通过一个独立的API接口获取,然后由JS插入DOM。
web_fetch 只获取HTML骨架,不执行JS,自然拿不到JS插入的内容。
第三层:反爬策略
微信会检测 User-Agent、Referer 等请求头,如果看起来不像真实浏览器(比如用Python的requests库),会返回"请求过于频繁"或直接重定向到登录页。
web_fetch 的默认请求头很容易被识别为非浏览器。

这不是工具失效,而是微信文章本身的加载方式决定的——三层防御机制让简单的HTTP请求根本无法穿透。

从一次失败,到一个可复用的 Skill

既然问题在于渲染,那解决思路就很明确了:用浏览器,而不是接口。

基于这个判断,一个名为 wechat-article-viewer 的 Skill 被设计出来。它并不复杂,但每一步都很“工程化”:先检查浏览器是否已连接,再打开文章链接,等待页面完整渲染后抓取快照,最后从结构化的 HTML 中提取标题、作者和正文内容。

"检查浏览器是否已连接"到底有多复杂

这句话听起来简单,但实际工程实现中,它隐含了一整套环境管理、状态检测和用户引导的逻辑。

一个健壮的连接检查至少需要检测三层状态:

def check_browser_connection():
    """返回详细的连接状态,而不是简单的True/False"""
    status = {
        "connected": False,
        "has_debug_port": False,
        "has_wechat_login": False,
        "user_guidance"""
    }
    
    # 1. 调试端口是否可连接?
    if not is_port_open("localhost", 9222):
        status["user_guidance"] = "请先启动带调试端口的Chrome"
        return status
    
    # 2. 浏览器是否能正常通信?
    try:
        browser = connect_to_browser(9222)
        status["has_debug_port"] = True
    except:
        status["user_guidance"] = "浏览器端口已占用但无法连接"
        return status
    
    # 3. 浏览器里有没有微信登录态?
    if not check_wechat_cookie(browser):
        status["user_guidance"] = "请先在浏览器中登录微信网页版"
        return status
    
    status["has_wechat_login"] = True
    status["connected"] = True
    return status

更难的是用户体验的"最后一公里":如何让普通用户理解并执行"用调试端口启动浏览器"?成熟的Skill设计会包含:

  • 分步指引:第一次使用时需要做什么
  • 状态诊断:告诉用户"你现在卡在哪一步"
  • 降级方案:实在不行时,有没有替代办法

真正关键的不是“这次文章能不能读到”,而是这些步骤被完整封装进了 SKILL.md 中。触发条件、使用场景、执行流程,都被清楚地写了下来。

于是,下次再有人丢进来一个 mp.weixin.qq.com 的链接,Agent 不需要重新推理“该怎么办”,而是可以直接调用这段已经验证过的能力。

Skill 带来的改变,不只是“省一步操作”

在这次实战中,同一篇接近 1.5 万字的长文,被完整提取并结构化总结。而对比实验也很清楚:如果继续使用 web_fetch,结果依旧只有零散提示文字。

但真正值得注意的,并不是“这次成功了”,而是 Skill 带来的几个长期变化。

首先,经验不再是一次性的。解决微信反爬虫这件事,不再依赖某个工程师记得“上次是怎么搞的”,而是沉淀成了一个可继承的能力。

其次,AI 的行为开始变得可预期。当触发条件明确、流程固定之后,Agent 的表现不再像“临场发挥”,而更像是在执行一套经过验证的方案。

最后,协作成本被显著降低。Skill 写好一次,就可以被团队反复使用,甚至被其他人直接拿走复用,而不需要重新讲一遍背景。

Skill,正在把 AI 拉回工程世界

OpenClaw 的 Skill 体系,其实代表了一种很克制的 AI 观。

它并没有强调“模型多聪明”,而是把重点放在:能力如何被描述、被加载、被复用。这更像软件工程,而不是魔法。

当 AI 真正进入业务、进入测试、进入日常工作之后,这种工程化的设计反而会成为决定体验上限的关键因素。

模型会不断更新,平台会不断变化,但把经验封装成 Skill、让能力按需加载的思路,很可能会长期存在。

至少在今天,它已经让一件原本很烦的事——“帮我读一下这篇微信文章”,变成了一次稳定、可复用的能力调用。

而这,或许正是 Agent 走向成熟的一个信号。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。