从 Tool Calling 到能力编排:重新理解 Agent Skill 的运行机制——以 tRPC-Agent-Go 为例


1. 引言:为什么 Agent 需要 Skill

Skill 本质上不是一种新的模型能力,而是一种对 Agent 能力进行"模块化封装和动态加载"的机制。

在过去一段时间里,Agent 开发的关注点主要集中在几个方向:

  • 如何让 LLM 调用 Tool
  • 如何构建 RAG
  • 如何设计 Agent Workflow
  • 如何让多个 Agent 协作
  • 如何构建 MCP Server

但随着 Agent 系统越来越复杂,一个新的问题开始变得突出:

如何把 Agent 的"能力"本身进行模块化、复用和动态加载?

例如,一个 Agent 需要具备:

  • PDF 文档处理能力
  • Excel 数据分析能力
  • PPT 生成能力
  • Git 操作能力
  • 数据库分析能力
  • 发布系统操作能力
  • 代码审查能力

如果所有这些能力都直接写进 System Prompt,Prompt 会越来越庞大;如果全部实现成 Tool,又会发现 Tool 只能描述"能做什么",却很难完整表达"应该怎么做"。

于是,Agent Skill 开始成为 Agent Runtime 中一个非常重要的抽象。

以目前的 Agent Skill 设计来看,一个 Skill 通常由 SKILL.md、辅助文档以及可选脚本组成。tRPC-Agent-Go 已经在框架层面实现了这一套机制,并进一步把 Skill 与 Tool、Workspace、Code Executor 结合起来。

本文就以 tRPC-Agent-Go 为例,从底层原理分析 Skill 到底是什么,以及一个 Skill 是如何最终被 Agent 使用的。

最早开发 Agent 时,我们经常会采用这样的方式:

txt 复制代码
User
 ↓
System Prompt
 ↓
LLM
 ↓
Tool Calling
 ↓
Tool

例如:

txt 复制代码
你是一个代码审查 Agent。

你需要:
1. 阅读代码
2. 检查代码规范
3. 检查潜在 Bug
4. 检查安全问题
5. 输出审查报告

然后再提供:

txt 复制代码
read_file
search_code
execute_command

几个 Tool。

这种方案在 Agent 能力比较少的时候没有问题。

但当 Agent 开始拥有几十甚至上百种能力时,问题就出现了。

例如:

txt 复制代码
System Prompt
 ├── PDF 操作规范
 ├── Excel 操作规范
 ├── PPT 操作规范
 ├── Git 操作规范
 ├── SQL 分析规范
 ├── Docker 操作规范
 ├── Kubernetes 操作规范
 └── ...

所有能力都提前塞进 Context,会导致:

第一,Context 膨胀。

大量 Agent 根本不会使用的知识被提前加载。

第二,能力难以复用。

不同 Agent 往往需要复制相同 Prompt。

第三,能力难以维护。

修改一套能力意味着修改 Agent Prompt。

第四,能力与执行逻辑耦合。

"如何完成任务"和"执行任务需要调用什么程序"混在一起。

Skill 的出现,本质上就是试图解决这个问题:

把 Agent 的专业知识、操作规范、辅助文档以及执行脚本,从 Agent 本身中拆出来,形成独立的能力模块。

2. Skill 到底是什么

2.1 Skill 的定义

如果简单理解:

Skill 是 Agent 可以按需加载和使用的一组专业能力。

一个典型 Skill 目录可能是:

txt 复制代码
skills/
└── pdf-processing/
    ├── SKILL.md
    ├── docs/
    │   └── usage.md
    └── scripts/
        └── convert.py

其中:

txt 复制代码
SKILL.md

描述:

  • Skill 是什么
  • 什么情况下应该使用
  • 使用步骤
  • 注意事项
  • Tool / Script 使用方式

而:

txt 复制代码
docs/

存放更详细的知识。

例如:

txt 复制代码
PDF API 使用说明
PDF 转换规范
企业 PDF 模板规范

而:

txt 复制代码
scripts/

则可以放真正需要执行的程序。

这种设计实际上形成了一个非常重要的分层:

txt 复制代码
Skill
│
├── Description
│
├── Instructions
│
├── Documents
│
└── Executable Scripts

tRPC-Agent-Go 对这一模式进行了框架级实现,其 Skill Repository 会扫描 Skill 目录,并解析其中的 SKILL.md

2.2 Skill 解决什么问题

Skill 最核心解决的是:

Agent 能力的模块化与按需加载。

例如我们有:

txt 复制代码
PDF Skill
Excel Skill
PPT Skill
Git Skill
Code Review Skill

Agent 不需要在初始化的时候把所有内容全部加载进 Prompt。

而是:

txt 复制代码
User
 │
 │ "帮我分析这个 PDF"
 ▼
Agent
 │
 │ 发现 PDF Skill
 ▼
Load PDF Skill
 │
 ▼
LLM
 │
 ▼
执行 PDF 操作

因此 Skill 实际上解决的是一个非常典型的 Context Management 问题:

txt 复制代码
所有知识全部加载
        ↓
       ❌
        ↓
按需发现
        ↓
按需加载
        ↓
按需执行

2.3 Skill 与传统 Prompt 的区别

很多人第一次接触 Skill 时,会认为:

Skill 不就是一个 Prompt 文件吗?

从表面上看确实非常像。

例如:

txt 复制代码
# PDF Processing

当用户要求处理 PDF 时:

1. 读取 PDF
2. 分析页面结构
3. 提取文本
4. 根据需求生成结果

它本质上就是自然语言指令。

但两者的区别在于:

txt 复制代码
Prompt
    ↓
描述如何回答

Skill
    ↓
描述如何完成一类任务
    ↓
可以包含
    ├── Instructions
    ├── Documents
    ├── Scripts
    └── Execution Environment

因此可以把它理解成:

Prompt 是模型上下文的一部分,而 Skill 是 Agent Runtime 中的一种能力单元。

这也是 Skill 与普通 Prompt 最大的区别。

3. Skill、Tool、Prompt 与 Workflow

理解 Skill 最容易产生误解的地方,就是把 Skill、Tool、Prompt、Workflow 混为一谈。

实际上它们解决的是完全不同的问题。

可以先建立一个简单模型:

txt 复制代码
                    Agent
                      │
       ┌──────────────┼──────────────┐
       │              │              │
     Prompt          Skill          Workflow
       │              │              │
   怎么思考       怎么完成任务      怎么执行流程
                      │
                      ▼
                    Tool
                      │
                      ▼
                  执行具体操作

3.1 Prompt:告诉模型怎么做

Prompt 最核心的职责是:

控制模型的行为和推理方式。

例如:

txt 复制代码
你是一个代码审查专家。

审查代码时必须关注:

1. 并发安全
2. 内存泄漏
3. 错误处理
4. SQL 注入

Prompt 本质上是:

txt 复制代码
Instruction
    ↓
LLM Context

它告诉模型:

"你应该怎么思考。"

3.2 Skill:封装 Agent 能力

Skill 更进一步:

把一类任务所需要的知识、规范、文档和执行能力组织起来。

例如:

txt 复制代码
Code Review Skill
│
├── SKILL.md
├── Go Review Guide.md
├── Security Guide.md
└── scripts/
    └── static-check.sh

所以 Skill 更接近:

txt 复制代码
Capability Package

而不是单纯:

txt 复制代码
Prompt Template

3.3 Tool:让 Agent 执行操作

Tool 解决的问题是:

Agent 能够做什么具体操作?

例如:

py 复制代码
read_file()
write_file()
search_code()
execute_command()
query_database()
send_email()

Tool 通常是一个结构化接口:

txt 复制代码
Tool
├── Name
├── Description
├── Input Schema
└── Execute()

例如:

txt 复制代码
query_database
    ↓
SQL
    ↓
Database
    ↓
Result

Tool 是 Agent 与外部世界交互的执行接口。

3.4 Workflow:规定执行流程

Workflow 解决的是:

多个步骤按照什么顺序执行?

例如:

txt 复制代码
需求分析
   ↓
代码生成
   ↓
代码检查
   ↓
单元测试
   ↓
构建
   ↓
发布

这就是 Workflow。

如果把它进一步形式化,可以得到:

txt 复制代码
A → B → C → D

或者更复杂的 DAG:

txt 复制代码
        A
      /   \
     B     C
      \   /
        D

Workflow 更关注:

流程控制。

3.5 Agent:负责动态决策

Agent 最特殊。

它不是简单执行固定流程,而是:

根据当前上下文动态决定下一步做什么。

例如:

txt 复制代码
User:
帮我分析这个项目有没有安全问题。

Agent 可能推理:

txt 复制代码
需要:
1. 找到项目
2. 判断项目语言
3. 加载代码审查 Skill
4. 搜索依赖
5. 执行静态扫描
6. 分析结果
7. 生成报告

这里的核心就是:

txt 复制代码
Agent = Decision Maker

因此可以形成一个非常重要的关系:

txt 复制代码
Prompt     → 思考规则
Skill      → 能力封装
Tool       → 行动接口
Workflow   → 流程约束
Agent      → 动态决策

4. Agent Skill 的基本工作原理

理解 Skill 的关键,可以把整个过程拆成五个阶段:

txt 复制代码
Discovery
    ↓
Loading
    ↓
Activation
    ↓
Context Injection
    ↓
Execution

4.1 Skill Discovery

第一步不是加载 Skill,而是:

发现有哪些 Skill。

例如:

txt 复制代码
skills/
├── pdf/
├── excel/
├── git/
├── code-review/
└── ppt/

Runtime 启动时可以扫描:

txt 复制代码
skills/

建立索引:

txt 复制代码
pdf → /skills/pdf
excel → /skills/excel
git → /skills/git

tRPC-Agent-Go 的 FSRepository 就承担了类似职责,它会递归扫描 Skill Root,并寻找包含 SKILL.md 的目录。

更重要的是:

Discovery 阶段不需要把所有 Skill 的完整内容都加载进 Context。

只需要提供:

txt 复制代码
name
description

例如:

txt 复制代码
Available Skills:

pdf:
  Process and analyze PDF files.

excel:
  Analyze and generate Excel spreadsheets.

git:
  Perform Git repository operations.

这就是 Skill 的 Overview Layer

4.2 Skill Loading

当 Agent 判断:

txt 复制代码
用户的问题与 PDF 有关

才加载:

txt 复制代码
pdf/SKILL.md

此时才把详细 instructions 加入 Context。

这就是:

Lazy Loading / On-Demand Loading

4.3 Skill Activation

更进一步,有些 Skill 不仅仅需要 Prompt。

例如:

txt 复制代码
release-notes Skill

可能需要激活:

txt 复制代码
release_docs_read_file
release_docs_search
release_docs_generate

这样的 ToolSet。

tRPC-Agent-Go 当前已经提供了 Skill Tool Activation 能力:某个 Skill 被 skill_load 后,可以让对应 ToolSet 变得对模型可见,并支持 include / only 等激活模式。

这意味着 Skill 已经不只是:

txt 复制代码
Prompt Package

而开始成为:

txt 复制代码
Capability Activation Unit

4.4 Context Injection

Skill 加载以后,还需要解决:

Skill 内容怎么进入 LLM Context?

tRPC-Agent-Go 使用 SkillsRequestProcessor 对请求进行处理。

可以抽象成:

txt 复制代码
User Request
     ↓
SkillsRequestProcessor
     ↓
Skill Overview
+
Loaded Skill Body
+
Selected Documents
     ↓
LLM Request

其中最重要的设计是:

Skill Tool 决定"加载什么",Request Processor 决定"怎么注入"。

这种职责分离非常重要。

4.5 Skill Execution

如果 Skill 中存在脚本:

txt 复制代码
scripts/
    convert.py

那么 Agent 并不是把:

txt 复制代码
convert.py

整个文件复制进 Prompt。

而是通过执行环境运行:

txt 复制代码
skill_run
    ↓
Workspace
    ↓
Script
    ↓
Output

tRPC-Agent-Go 使用 Workspace / Engine 抽象隔离执行环境,使 Skill 可以在不同执行后端运行。

于是整个 Skill 生命周期就变成:

txt 复制代码
发现
 ↓
加载
 ↓
激活
 ↓
注入 Context
 ↓
执行
 ↓
返回结果

5. tRPC-Agent-Go 中的 Skill 实现

现在进入最核心的部分。先看一段使用 Skill 的示例代码:

go 复制代码
package main

import (
    "context"
    "fmt"
    "log"

    "trpc.group/trpc-go/trpc-agent-go/agent/llmagent"
    localexec "trpc.group/trpc-agent-go/codeexecutor/local"
    "trpc.group/trpc-go/trpc-agent-go/model"
    "trpc.group/trpc-go/trpc-agent-go/model/openai"
    "trpc.group/trpc-go/trpc-agent-go/runner"
    "trpc.group/trpc-go/trpc-agent-go/skill"
)

func main() {
    ctx := context.Background()

    // 1. 创建 Skill Repository
    repo, err := skill.NewFSRepository("./skills")
    if err != nil {
        log.Fatal(err)
    }

    // 2. 创建代码执行器
    executor := localexec.New()

    // 3. 创建支持 Skill 的 Agent
    llm, err := openai.New(
        openai.WithModel("your-model"),
    )
    if err != nil {
        log.Fatal(err)
    }

    agent := llmagent.New(
        "pdf-agent",

        llmagent.WithModel(llm),

        // 开启 Agent Skills
        llmagent.WithSkills(repo),

        // 为 Skill 提供代码执行能力
        llmagent.WithCodeExecutor(executor),
    )

    // 4. 创建 Runner
    r := runner.NewRunner(
        "skill-demo",
        agent,
    )

    // 5. 向 Agent 提出任务
    events, err := r.Run(
        ctx,
        "user-001",
        "session-001",
        model.NewUserMessage(
            "请分析一下这个 PDF 文件的主要内容,并总结其中的关键结论。",
        ),
    )
    if err != nil {
        log.Fatal(err)
    }

    // 6. 输出 Agent 执行过程
    for event := range events {
        if event.Error != nil {
            fmt.Println("error:", event.Error)
            continue
        }

        if event.Response != nil {
            fmt.Print(event.Response.Content)
        }
    }
}

从源码结构来看,可以把 tRPC-Agent-Go 的 Skill 系统抽象成:

txt 复制代码
                    LLMAgent
                       │
                       ▼
              SkillsRequestProcessor
                       │
                       ▼
                 Skill Repository
                       │
              ┌────────┼────────┐
              ▼        ▼        ▼
          Summary     Body      Docs
                                 │
                                 ▼
                              Skill Tools
                                 │
                     ┌───────────┼───────────┐
                     ▼           ▼           ▼
                skill_load  skill_list_docs  skill_run
                                                │
                                                ▼
                                            Workspace
                                                │
                                                ▼
                                            Executor

5.1 Skill 数据结构

Skill 并不是简单的一段字符串。从语义上看,可以抽象成:

txt 复制代码
type Skill struct {
    Name        string
    Description string
    Body        string
    Docs        []Document
    Path        string
}

其中:

txt 复制代码
Name

用于标识 Skill。

txt 复制代码
Description

用于 Discovery。

txt 复制代码
Body

对应 SKILL.md 的主要内容。

txt 复制代码
Docs

对应辅助文档。

txt 复制代码
Path

则用于找到 Skill 的真实文件目录,并进一步挂载到 Workspace。

5.2 Skill Loader

tRPC-Agent-Go 中一个很重要的抽象是:

txt 复制代码
skill.Repository

Repository 不负责 Agent 推理。

它负责:

管理 Skill 资源。

最典型的是:

txt 复制代码
FSRepository

它会扫描:

txt 复制代码
SKILLS_ROOT

并建立:

txt 复制代码
Skill Name → Directory

的索引。

之后可以提供:

py 复制代码
Summaries()
Get(name)
Path(name)

这样的能力。

于是 Agent Runtime 不需要关心:

txt 复制代码
Skill 到底来自本地文件系统?
数据库?
远程服务?
Git Repository?

只需要依赖:

txt 复制代码
Repository

即可。

这其实是一个非常标准的 Repository Pattern。

5.3 Skill Manager

在更高层,可以把 Skill 管理理解成:

txt 复制代码
Skill Manager
│
├── Discover
├── Get
├── Load
├── Select Docs
├── Activate Tools
└── Run

tRPC-Agent-Go 当前实现中,这些职责并不是全部集中在一个巨大 Manager 中,而是拆分到:

txt 复制代码
Repository
+
RequestProcessor
+
Skill Tools
+
Workspace
+
Executor

几个组件中。

这种设计实际上比一个"大而全的 SkillManager"更容易扩展。

5.4 Skill 与 Agent 的关系

Skill 并不是 Agent。

更准确的关系是:

txt 复制代码
Agent
  │
  ├── Prompt
  ├── Memory
  ├── Tools
  ├── Skills
  └── Workflow

Skill 是 Agent 的一种外部能力来源

因此:

txt 复制代码
Agent ≠ Skill

而是:

txt 复制代码
Agent uses Skill

一个 Agent 可以使用:

txt 复制代码
N 个 Skills

一个 Skill 也可以被:

txt 复制代码
N 个 Agents

复用。

这就形成了:

txt 复制代码
          Skill
         /     \
      Agent A  Agent B

这也是 Skill 最大的工程价值之一。

5.5 Skill 与 Tool 的关系

这也是最容易混淆的一点。

例如:

txt 复制代码
PDF Skill

里面可能存在:

txt 复制代码
convert_pdf.py
extract_text.py

而 Agent 最终需要通过:

txt 复制代码
skill_run

来执行。

因此:

txt 复制代码
Skill
   ↓
描述能力 + 使用规范
   ↓
Tool
   ↓
执行能力

可以把它理解成:

Skill 告诉 Agent "应该怎么做",Tool 提供"做这件事的接口"。

6. 一个 Skill 是如何被 Agent 调用的

现在把整个过程串起来。

假设用户说:

"帮我把这个 PDF 转成 Markdown。"

6.1 用户请求

txt 复制代码
User
 ↓
帮我把 PDF 转成 Markdown

进入:

txt 复制代码
Runner
 ↓
LLMAgent

6.2 Skill Selection

Agent 看到:

txt 复制代码
Available Skills:

pdf-processing
excel-processing
git
ppt

根据:

txt 复制代码
name + description

判断:

txt 复制代码
pdf-processing

最匹配。

6.3 Skill Loading

Agent 调用:

txt 复制代码
skill_load

例如:

txt 复制代码
{
  "skill": "pdf-processing"
}

Skill Tool 将状态写入 Session。

然后:

txt 复制代码
SkillsRequestProcessor

检测到:

txt 复制代码
skill = pdf-processing

于是加载:

txt 复制代码
SKILL.md

以及需要的文档。

tRPC-Agent-Go 当前提供的 skill_loadskill_select_docsskill_list_docs 正是用于控制 Skill 及其文档加载状态的工具。

6.4 LLM 推理

此时模型 Context 中已经出现:

txt 复制代码
PDF Skill Instructions
+
PDF Documentation
+
User Request

模型开始推理:

txt 复制代码
需要执行 PDF 转换。
Skill 提供了 convert.py。
需要执行该脚本。

于是下一步不是生成自然语言,而是:

txt 复制代码
Tool Calling

6.5 Tool Calling

例如:

txt 复制代码
skill_run

调用:

txt 复制代码
{
  "skill": "pdf-processing",
  "command": "python scripts/convert.py input.pdf"
}

然后:

txt 复制代码
skill_run
 ↓
Workspace
 ↓
Executor
 ↓
convert.py
 ↓
output.md

6.6 最终结果

执行结果重新返回 LLM:

txt 复制代码
PDF converted successfully.

Output:
output.md

模型最终回复用户:

txt 复制代码
已经完成 PDF 转 Markdown。
文件位于 output.md。

因此一次 Skill 调用实际上是:

txt 复制代码
User
 ↓
Agent
 ↓
Skill Discovery
 ↓
skill_load
 ↓
Context Injection
 ↓
LLM Reasoning
 ↓
Tool Calling
 ↓
Workspace
 ↓
Script
 ↓
Result
 ↓
LLM
 ↓
User

这才是完整的 Skill Runtime。

7. Skill 与 Tool Calling 的本质区别

可以用一句非常简单的话区分:

Tool 是"动作",Skill 是"能力"。

例如:

txt 复制代码
read_file

是动作。

txt 复制代码
code-review

是能力。

再比如:

txt 复制代码
query_database

是动作。

txt 复制代码
data-analysis

是能力。

因此:

txt 复制代码
Skill
 ├── Knowledge
 ├── Instructions
 ├── Tools
 └── Scripts

而:

txt 复制代码
Tool
 └── Execute one operation

可以类比传统软件工程:

txt 复制代码
Class / Module
       ↓
封装一组能力

Method
       ↓
执行一个具体操作

所以:

txt 复制代码
Skill ≈ Capability Module
Tool  ≈ Callable Function

这是理解 Skill 最重要的一个抽象。

8. Skill 与 Agent Workflow / DAG 的关系

Skill 和 Workflow 也非常容易混淆。

例如:

txt 复制代码
Code Review Skill

可能描述:

txt 复制代码
1. 获取代码
2. 分析代码
3. 执行静态检查
4. 检查安全问题
5. 生成报告

看起来像 Workflow。

但它们实际上不是一回事。

Skill 更关注:

完成某类任务需要什么知识和能力。

Workflow 更关注:

多个节点应该以什么顺序执行。

因此:

txt 复制代码
Skill
   ↓
描述能力

Workflow
   ↓
组织能力

例如:

txt 复制代码
             Code Review Skill
                     │
                     ▼
                 Workflow
                     │
       ┌─────────────┼─────────────┐
       ▼             ▼             ▼
  Static Check   Security Scan   LLM Review
       │             │             │
       └─────────────┼─────────────┘
                     ▼
                  Report

Skill 可以作为 Workflow 的节点。

Workflow 也可以调用多个 Skill。

因此二者是正交关系

9. 从 tRPC-Agent-Go 抽象一个通用 Skill 架构

如果不考虑具体框架,可以抽象出一个通用 Agent Skill Runtime:

txt 复制代码
                  Agent Runtime
                       │
        ┌──────────────┼──────────────┐
        │              │              │
   Skill Registry   Skill Loader   Skill Executor
        │              │              │
        ▼              ▼              ▼
    Discovery       Context        Workspace
                       │              │
                       ▼              ▼
                      LLM           Scripts

进一步拆解:

txt 复制代码
Skill Registry
    ↓
负责发现 Skill

Skill Loader
    ↓
负责加载 Skill

Skill Activator
    ↓
负责激活 Tool / Capability

Context Manager
    ↓
负责注入 Prompt

Skill Executor
    ↓
负责执行脚本

Workspace
    ↓
负责隔离执行环境

这样就形成了一个比较完整的 Skill Runtime。

10. Skill 架构的工程实践

真正做生产级 Agent 时,仅仅能够加载 SKILL.md 是远远不够的。


10.1 Skill 发现

最简单的是:

txt 复制代码
./skills

但生产环境可以进一步支持:

txt 复制代码
Local Filesystem
Git Repository
Database
Object Storage
Remote Registry
MCP Server

最终形成:

txt 复制代码
Skill Registry

例如:

http 复制代码
GET /skills

[
  {
    "name": "pdf",
    "description": "Process PDF files"
  },
  {
    "name": "excel",
    "description": "Analyze Excel files"
  }
]

10.2 Skill 动态加载

不要:

txt 复制代码
启动 Agent
 ↓
加载 100 个 Skill
 ↓
全部塞进 Context

更好的方式:

txt 复制代码
启动
 ↓
加载 Skill Summary
 ↓
用户请求
 ↓
选择 Skill
 ↓
加载完整 Skill

也就是:

txt 复制代码
Cheap Discovery
+
Expensive Loading

这实际上就是一种 Context Lazy Loading

10.3 Skill 权限控制

如果 Skill 可以执行:

txt 复制代码
shell command

那么权限控制就变得非常重要。

例如:

txt 复制代码
Skill
 ↓
skill_run
 ↓
python
 ↓
shell
 ↓
filesystem

必须考虑:

txt 复制代码
允许执行什么命令?
允许访问哪些目录?
允许访问网络吗?
允许读取环境变量吗?
最大执行时间?
最大输出大小?

tRPC-Agent-Go 的 skill_run 已经提供了命令 allowlist、denylist、超时、Workspace 等安全控制机制。

因此生产环境中不能简单地:

txt 复制代码
exec.Command("sh", "-c", command)

然后让 Agent 自由执行。

10.4 Skill 版本管理

Skill 本质上也是代码。

因此同样需要:

txt 复制代码
Version
Dependency
Compatibility
Changelog
Rollback

例如:

txt 复制代码
pdf-processing@1.0.0
pdf-processing@1.1.0
pdf-processing@2.0.0

Agent 可以根据:

txt 复制代码
model
runtime
tenant
environment

选择不同版本。


10.5 Skill 与 MCP 的结合

Skill 和 MCP 其实非常适合组合。

可以形成:

txt 复制代码
Skill
   ↓
告诉 Agent 如何使用某类能力
   ↓
MCP
   ↓
提供真正的外部 Tool

例如:

txt 复制代码
GitHub Skill
     ↓
GitHub MCP
     ↓
search_repository
create_issue
create_pr

这里:

txt 复制代码
Skill = 使用说明 + 操作规范
MCP   = Tool Provider

因此:

Skill 可以解决"怎么使用能力",MCP 可以解决"能力从哪里来"。

二者并不是竞争关系。

10.6 Skill 与 RAG 的结合

Skill 与 RAG 也可以结合。

例如:

txt 复制代码
金融分析 Skill

里面定义:

txt 复制代码
分析步骤
指标解释
计算公式
风险规则

但企业内部金融知识可能非常庞大。

没必要全部写进:

txt 复制代码
SKILL.md

可以:

txt 复制代码
Skill
 │
 ├── Instructions
 │
 └── RAG
       │
       ├── 企业知识库
       ├── 产品知识库
       └── 行业知识库

于是:

txt 复制代码
Skill
=
任务方法论

RAG
=
领域知识

两者组合起来,可以形成更强的 Agent 能力。

11. 总结:Skill 正在成为 Agent 的能力插件机制

如果把整个 Agent Runtime 放在一起看,可以得到这样一个模型:

txt 复制代码
                         Agent
                           │
          ┌────────────────┼────────────────┐
          │                │                │
       Prompt             Skill          Workflow
          │                │                │
       怎么思考        有什么能力        怎么组织
                           │
              ┌────────────┼────────────┐
              │            │            │
           Knowledge      Tool        Script
              │            │            │
              └────────────┼────────────┘
                           │
                       Execution
                           │
                       Workspace

其中:

txt 复制代码
Prompt

解决:

怎么思考?

txt 复制代码
Skill

解决:

具备什么能力?

txt 复制代码
Tool

解决:

能够执行什么操作?

txt 复制代码
Workflow

解决:

多个能力如何组织?

txt 复制代码
Agent

解决:

当前情况下应该选择什么?

tRPC-Agent-Go 的实现非常有意思,因为它并没有简单地把 Skill 当成一个 Markdown Prompt,而是把它进一步连接到了:

txt 复制代码
Skill Repository
        ↓
Request Processor
        ↓
Skill Tools
        ↓
Tool Activation
        ↓
Workspace
        ↓
Code Executor
        ↓
Artifact

形成了一条完整的 Runtime 链路。

这意味着 Skill 的真正价值并不是:

"我多了一个 SKILL.md 文件。"

而是:

Agent 开始拥有一种可以被发现、加载、激活、组合、执行和版本化的能力模块。

从这个角度来看,Skill 很可能会成为 Agent 架构中类似传统软件工程 Plugin / Module 的角色:

txt 复制代码
传统软件:

Application
    ↓
Plugin
    ↓
Capability


Agent 系统:

Agent Runtime
    ↓
Skill
    ↓
Capability

最终,Agent 不再是一个写死 Prompt 和 Tool 的"大模型调用器",而会逐渐演化成:

txt 复制代码
Agent Runtime
       │
       ├── Skill Registry
       ├── Skill Loader
       ├── Tool Registry
       ├── Workflow Engine
       ├── Memory
       ├── RAG
       ├── MCP
       └── Execution Runtime

Skill,就是连接"Agent 智能"与"工程能力"的一个关键中间层。

相关推荐
geneculture1 小时前
融智学视域下的心灵哲学范式重审--行为主义、功能主义与中文屋论证的融智学对照分析 (高级科普 · 学术论文)
人工智能·信息科学·融智学的重要应用·哲学与科学统一性·融智时代(杂志)·心智哲学重审·中文屋论题
chuntian_tester1 小时前
AI自动化第3步【用例设计】
人工智能·测试工具·ai·自动化
科技每日热闻1 小时前
中国企业出海开展业务,如何挑选可安全合规使用国际大模型的云平台?Amazon Bedrock 在同一平台完成国际模型接入、区域选择与合规治理
大数据·人工智能·安全·ai
xiongmosy1 小时前
从“移动的家”到“可居住的空间”:小米澎程正在重新定义“车”能做什么
人工智能
Geek-Chow2 小时前
MCP 模型上下文协议:十二、自测、练习与源码入口
人工智能
cubestudio2 小时前
海光 DCU 怎么接入 Kubernetes 和 AI 平台?CubeStudio 海光 DCU 适配实操(整卡 / 共享 / 两种 vDCU 虚拟化 + DeepSeek 部署)
人工智能·机器学习·gpu
火眼金睛炼单词2 小时前
单词发音学习深度解读:方法步骤与优化策略
人工智能·学习
dreamrise2 小时前
Windows AI 编程环境从零搭建指南[20260909]
人工智能
MomentYY2 小时前
大模型 Memory 管理:它凭什么知道你之前说过什么?
llm·agent·ai编程