<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>软件架构 on 止语Lab</title>
        <link>https://www.wujiachen.com.cn/tags/%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84/</link>
        <description>Recent content in 软件架构 on 止语Lab</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Thu, 30 Apr 2026 20:37:26 +0800</lastBuildDate><atom:link href="https://www.wujiachen.com.cn/tags/%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>复杂 Skill 和微型 Agent，到底是不是同一回事？</title>
            <link>https://www.wujiachen.com.cn/notes/skill-vs-micro-agent/</link>
            <pubDate>Wed, 29 Apr 2026 21:19:34 +0800</pubDate>
            <guid>https://www.wujiachen.com.cn/notes/skill-vs-micro-agent/</guid>
            <description>&lt;img src=&#34;https://img.wujiachen.com.cn/skill-vs-micro-agent/cover.png&#34; alt=&#34;Featured image of post 复杂 Skill 和微型 Agent，到底是不是同一回事？&#34; /&gt;&lt;p&gt;&#xA;&lt;img src=&#34;https://img.wujiachen.com.cn/skill-vs-micro-agent/cover.png&#34; alt=&#34;封面&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我的判断是：&lt;strong&gt;不是同一回事，但边界不在复杂度。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这有点像在问：一个库里已经有线程池、重试、缓存、调度器，它还算库吗？&lt;/p&gt;&#xA;&lt;p&gt;多数情况下，算。&lt;/p&gt;&#xA;&lt;p&gt;前提是，它仍然是被某个运行时主体调用的东西。复杂 Skill 和微型 Agent 的区别，不看里面有没有 Loop，也不看它会不会拆任务、调 Sub-agent、做验证重试。&lt;/p&gt;&#xA;&lt;p&gt;我更关心四件事：&lt;strong&gt;目标解释权、计划权、权威状态、责任边界。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;先限定一下范围。这里说的 Skill，不是所有厂商文档里叫 Skill 的东西，而是“被某个 Agent 或运行时加载、调用的能力封装”。有些平台会把 workflow、插件、触发器也叫 Skill，那是命名习惯，不是我这里讨论的边界。&lt;/p&gt;&#xA;&lt;h2 id=&#34;一先别按复杂度分&#34;&gt;&lt;a href=&#34;#%e4%b8%80%e5%85%88%e5%88%ab%e6%8c%89%e5%a4%8d%e6%9d%82%e5%ba%a6%e5%88%86&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;一、先别按复杂度分&#xA;&lt;/h2&gt;&lt;p&gt;在讨论 MCP、Skills、Agent 工具链时，常见误解是：Skill 很简单，Agent 很复杂。&lt;/p&gt;&#xA;&lt;p&gt;这个分法不稳。&lt;/p&gt;&#xA;&lt;p&gt;Skill 完全可以很复杂。它可以拆任务、调用多个子能力、失败重试，甚至内部放一个 Master-agent 做调度。做到这一步，它确实有很强的 agentic 味道。&lt;/p&gt;&#xA;&lt;p&gt;但“像 Agent”不等于“是 Agent”。&lt;/p&gt;&#xA;&lt;p&gt;数据库驱动内部有连接池、健康检查和自动重连，它不会因此变成一个独立应用。它还是被应用程序加载的库。&lt;/p&gt;&#xA;&lt;p&gt;Skill 也是这样。&lt;/p&gt;&#xA;&lt;h2 id=&#34;二skill-的本质是能力封装&#34;&gt;&lt;a href=&#34;#%e4%ba%8cskill-%e7%9a%84%e6%9c%ac%e8%b4%a8%e6%98%af%e8%83%bd%e5%8a%9b%e5%b0%81%e8%a3%85&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;二、Skill 的本质是能力封装&#xA;&lt;/h2&gt;&lt;p&gt;我更愿意把 Skill 看成一种“可复用能力包”。&lt;/p&gt;&#xA;&lt;p&gt;它回答的问题是：&lt;strong&gt;当一个 Agent 要完成某类任务时，怎么把知识、步骤、约束和工具调用方式打包给它？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;比如一个“代码评审 Skill”，里面可以有检查清单、风险分级、自动重试、多个子检查器。它很复杂。但如果它只是被 IDE 里的主 Agent 点一下调用，跑完给出评审结果，那它仍然是 Skill。&lt;/p&gt;&#xA;&lt;p&gt;它的聪明服务于调用者。&lt;/p&gt;&#xA;&lt;p&gt;它通常不决定“为什么现在做这件事”，也不拥有最终验收标准。失败之后，是调用它的主体决定重试、换策略，还是放弃。&lt;/p&gt;&#xA;&lt;h2 id=&#34;三agent-的本质是运行时主体&#34;&gt;&lt;a href=&#34;#%e4%b8%89agent-%e7%9a%84%e6%9c%ac%e8%b4%a8%e6%98%af%e8%bf%90%e8%a1%8c%e6%97%b6%e4%b8%bb%e4%bd%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;三、Agent 的本质是运行时主体&#xA;&lt;/h2&gt;&lt;p&gt;Agent 不是“更复杂的 Skill”。&lt;/p&gt;&#xA;&lt;p&gt;它更像一个拥有运行边界的执行主体。专业一点说，它应该能作为一个独立 run 被调度、观测、取消、重试和归因。&lt;/p&gt;&#xA;&lt;p&gt;几个判断点会更落地：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;目标解释权&lt;/strong&gt;：它不是只执行外部写死的动作，而是要把目标翻译成步骤。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;计划权&lt;/strong&gt;：它能在约束内决定先做什么、后做什么，用什么工具。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;权威状态&lt;/strong&gt;：不只是写缓存或中间文件，而是拥有这次 run 的进度、失败历史和恢复语义。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;后续策略责任&lt;/strong&gt;：出错后，是它进入自己的重试/降级/求助流程，而不是只把错误码丢回调用者。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;权限与审计边界&lt;/strong&gt;：它有可独立审计的工具权限、资源范围和执行日志，不一定长期持有权限，但边界清楚。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这里要小心一个坑：状态“物理上存在哪”不是重点。Skill 也可以写缓存，Agent 的状态也可以存在外部数据库里。关键是：&lt;strong&gt;谁解释这份状态，谁决定下一步怎么恢复。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;四内含-master-agent-的-skill算什么&#34;&gt;&lt;a href=&#34;#%e5%9b%9b%e5%86%85%e5%90%ab-master-agent-%e7%9a%84-skill%e7%ae%97%e4%bb%80%e4%b9%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;四、内含 Master-agent 的 Skill，算什么？&#xA;&lt;/h2&gt;&lt;p&gt;这是最容易混淆的地方。&lt;/p&gt;&#xA;&lt;p&gt;如果一个 Skill 里已经包含 Master-agent 任务拆解、Sub-agent 调度、执行、验证、重试，那它在实现上确实很像一个微型 Agent 系统。&lt;/p&gt;&#xA;&lt;p&gt;我会叫它：&lt;strong&gt;agentic skill&lt;/strong&gt;，或者“带自治循环的复合 Skill”。&lt;/p&gt;&#xA;&lt;p&gt;但外层身份要看它怎么被系统使用。&lt;/p&gt;&#xA;&lt;p&gt;如果使用方式是：主 Agent 决定调用它，它在一次调用范围内执行完整 Loop，返回结果，主 Agent 验收并继续下一步。那外层仍然是 Skill。&lt;/p&gt;&#xA;&lt;p&gt;注意，是“外层”。&lt;/p&gt;&#xA;&lt;p&gt;一个 Skill 可以封装 Agent 组件。里面的 Master-agent 在实现层面可以是 Agent，但这个包被系统当作一次能力调用来管理时，包的身份仍然是 Skill。&lt;/p&gt;&#xA;&lt;p&gt;换个例子更直观。&lt;/p&gt;&#xA;&lt;p&gt;同一套代码评审能力，如果作为 IDE 命令被点击一次，读当前 diff，输出建议，它是 Skill。若它变成一个常驻 Review Bot，自己接收队列任务，维护失败历史，决定何时重跑，能被平台单独暂停、恢复、审计，那它就更像 Agent。&lt;/p&gt;&#xA;&lt;p&gt;代码可能差不多。&lt;/p&gt;&#xA;&lt;p&gt;系统语义变了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;五我会怎么判断&#34;&gt;&lt;a href=&#34;#%e4%ba%94%e6%88%91%e4%bc%9a%e6%80%8e%e4%b9%88%e5%88%a4%e6%96%ad&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;五、我会怎么判断&#xA;&lt;/h2&gt;&lt;p&gt;我现在不会问“它能不能调用完就结束”。这个问题不够准。一次性运行的 Agent 也可能完成任务后退出。&lt;/p&gt;&#xA;&lt;p&gt;我会换成这几个问题：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第一，它只是完成外部定义好的能力动作，还是要自己解释目标？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;前者更像 Skill，后者更像 Agent。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第二，它有没有计划权？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果步骤基本由 Skill 定义写死，只是在内部稳定执行，那是复合能力。若它能根据上下文重排步骤、换工具、改变策略，就开始接近 Agent。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第三，谁拥有权威状态和恢复语义？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;缓存、日志、中间产物不算。真正要看的是：失败之后，谁知道现在跑到哪一步，谁决定从哪里恢复。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第四，错误由谁解释？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Skill 错误通常由调用者解释和处置。Agent 错误会进入它自己的运行状态，触发重试、降级、求助，或交给上级调度。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第五，它有没有独立审计边界？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;不是长期持有什么权限，而是它的工具范围、资源边界、日志和责任归属能不能被单独看清。&lt;/p&gt;&#xA;&lt;p&gt;这几个问题，比争“有没有 Loop”更有用。&lt;/p&gt;&#xA;&lt;h2 id=&#34;六别把中间形态都叫-agent&#34;&gt;&lt;a href=&#34;#%e5%85%ad%e5%88%ab%e6%8a%8a%e4%b8%ad%e9%97%b4%e5%bd%a2%e6%80%81%e9%83%bd%e5%8f%ab-agent&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;六、别把中间形态都叫 Agent&#xA;&lt;/h2&gt;&lt;p&gt;还有个容易被忽略的点：Skill 和 Agent 之间不是只有一条线。&lt;/p&gt;&#xA;&lt;p&gt;工程里有很多中间形态。&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://img.wujiachen.com.cn/skill-vs-micro-agent/boundary-map.png&#34; alt=&#34;Skill 到 Agent 的边界地图&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;形态&lt;/th&gt;&#xA;          &lt;th&gt;更适合叫什么&lt;/th&gt;&#xA;          &lt;th&gt;关键特征&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;一次性能力复用&lt;/td&gt;&#xA;          &lt;td&gt;Skill&lt;/td&gt;&#xA;          &lt;td&gt;外部主体调用，完成一个能力动作&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;多步骤但目标固定&lt;/td&gt;&#xA;          &lt;td&gt;Compound Skill&lt;/td&gt;&#xA;          &lt;td&gt;内部有编排和重试，但验收来自外部&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;固定 DAG / 流程编排&lt;/td&gt;&#xA;          &lt;td&gt;Workflow&lt;/td&gt;&#xA;          &lt;td&gt;有状态流转，但策略基本预定义&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;后台批处理&lt;/td&gt;&#xA;          &lt;td&gt;Job / Service&lt;/td&gt;&#xA;          &lt;td&gt;独立运行，但不一定有自主决策&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;独立目标 + 计划权 + 权威状态 + 审计边界&lt;/td&gt;&#xA;          &lt;td&gt;Agent&lt;/td&gt;&#xA;          &lt;td&gt;能作为运行时主体被调度和归因&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;这张表比“是不是复杂”更实用。&lt;/p&gt;&#xA;&lt;p&gt;如果你把复杂 Skill 当 Agent 管，系统会变重：多一层调度，多一层状态同步，多一层观测成本。&lt;/p&gt;&#xA;&lt;p&gt;反过来，把真正的 Agent 塞进 Skill 里，风险也不小。状态藏在内部，权限边界说不清，失败后没人知道该重试哪一步。&lt;/p&gt;&#xA;&lt;p&gt;工程上最怕这种灰区。&lt;/p&gt;&#xA;&lt;p&gt;所以我的结论是：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;复杂 Skill 和微型 Agent 可以在机制上高度相似，但设计哲学不同。Skill 是能力的模块化，Agent 是责任主体的模块化。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;前者解决“怎么把一类任务做得更可靠”。&lt;/p&gt;&#xA;&lt;p&gt;后者解决“谁来独立承担一段任务”。&lt;/p&gt;&#xA;&lt;p&gt;如果非要压成一句话：别先争名字，先画清运行边界。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
