Skip to contentThe Key of Urala
The Key of Urala

拓展 Agent 的能力边界

Agent 遵循 "能力边界" 原则, 仅能调用其显式声明过的工具

Link to section: Agent 遵循 "能力边界" 原则, 仅能调用其显式声明过的工具

使用过程中你会发现, 类 Agent 工具好像没有办法直接读取 docx 这类文件.

因为 docx 文档的本质是一个压缩包, Agent 无法直接读取压缩包内的内容.

压缩包内容说明
word/document.xml文档的主体 -- 所有文字, 段落格式, 表格内容都存储在这里
word/styles.xml记录文档的样式 (如标题 1, 正文, 字体大小)
docProps/core.xml文档的元数据 (作者, 创建时间, 修改次数等)
word/media/ 文件夹存放文档中插入的所有图片, 图表等多媒体资源

那有没有办法赋予 Agent 更强的能力, 让他帮你完成更多的事情?

Agent Skills 是一种将特定领域的专业知识与工作流程打包成可复用 "技能包" 的机制. 当 Agent 加载某个 Skill 时, 它不仅能获得该领域的背景知识, 还能遵循预设的操作步骤来完成复杂任务 -- 从代码审查到数据分析, 都可以封装为一个 Skill. Claude Code 中的 Skills 协议正是这一理念的实现, 允许开发者编写自定义技能文件来扩展 Agent 的行为.

MCP (Model Context Protocol, 模型上下文协议) 是由 Anthropic 提出的开放协议, 旨在标准化 LLM 与外部工具, 数据源之间的交互方式. 它采用客户端-服务器架构: MCP Client (如 Claude Code) 通过声明式接口发现和调用 MCP Server 提供的工具, Server 负责执行具体的文件操作, API 调用等任务. 这种设计让 Agent 的能力扩展变得可插拔, 可组合, 无需为每个工具单独适配.

简单来说, MCP 是 "连接标准", Skill 是 "操作手册", 而 Plugin 是 "打包盒".

Plugin (插件) 是一种将多种能力整合为开箱即用解决方案的机制. 与 MCP 和 Skills 侧重协议层面不同, Plugin 通常面向最终用户, 提供完整的领域功能 -- 例如一个 "前端开发插件" 可以同时包含设计规范, 代码模板, Lint 规则和自动补全等能力.

以 OpenCode 为例, 下文介绍为 OpenCode 添加 skills 的具体操作步骤.

安装技能的前提是需要有技能, 搜索 skill marketplace 可以找到网络上知名的 skill 市场 (绝大部分 skill 免费且开源), 以下是几个知名的市场:

以 Anthropic 官方 skills 为例.

使用 git clone 或在网页上下载仓库 zip 文件, 将 skills 拉取/下载 到本地.

解压并打开 skills 文件夹.

选择你需要的 skills, 将其复制或者移动到 OpenCode 的 skills 文件夹下.

在你需要的工作目录下打开 opencode, 输入 /skills 指令, 现在你应该能看到安装的 skills 了.

Skills 的加载机制, 核心是 "渐进式披露" (Progressive Disclosure). 这是一种为了在给 AI 提供充足 "知识" 和节省其有限的 "注意力" (上下文窗口) 之间找到平衡而设计的策略.

对话时, 会将所有技能的 SKILL.md 中的 前置元数据 (Front Matter) (也就是图中两个 "---" 之间的部分), 塞进上下文当中, 告诉 Agent 这个技能可以做什么, 什么时候应该使用这个技能. 当使用到这个技能时, Agent 会读取 SKILL.md 中除了前置元数据之外的内容, 按照这个技能的描述, 去完成任务.

现在你在工作目录中放置的 docx 文件理应能够被 OpenCode 打开并读取了.

下图是 Claude Code 的上下文可视化.

skills 并不是越多越好, 正如上文所说, 每个 SKILL 都会占用一定的上下文. 过多的 skills 容易致使 Agent 忘记使用 skills, 但是也不用过多在意注意力问题, 在 Agent 忘记使用的时候, 提醒一下就好, 也可以直接使用 /skills 命令直接将 skill 的内容加入到提示词当中.

MCP 以更加灵活的方式拓展 Agent 的能力, 通过连接服务器, 暴露 API 给 Agent, 让 Agent 能够以标准化的协议调用外部工具和数据源, 而无需为每个工具编写定制化的集成代码. 这种机制的核心价值在于解耦: Agent 不需要关心工具的具体实现细节, 只需通过统一的 MCP 协议与服务器通信, 服务器负责将请求路由到对应的 API 并返回结果.

服务器可以是云端的, 也可以是本地的, 以下是一个笔者个人使用 MCP 的真实需求与例子.

由于笔者并不是第一次使用 Unity, 有一些基础, 所以对 Unity 课程自然没有什么兴趣, 所以就开始寻找其他能够应付 Unity 课程的方法.

由于 Unity 项目并非仅由可读的文本代码构成, 它是一个极其复杂, 状态鲜活的实时环境, 致使 Agent 无法直接读取项目中的内容. 但是 Unity Editor (编辑器) 可以, 又因 Unity Editor 支持 Packages 来更改 Unity Editor 的行为, 所以, 我们就可以使用现成的 Unity Editor 来获取项目的信息, 使用 Packages 将信息与 Agent 工具进行互通.

那这个 Package 哪来呢?

通过网络搜索, 我们能够找到很多相关的开源 Unity MCP, 这里笔者使用的是 CoplayDev/unity-mcp (opens in a new tab)

根据仓库中的指引, 我们可以通过 Unity Packages Manager 来添加开源社区的 MCP 包, 这里就不详细赘述了.

再启动本地的 MCP 的服务器并正确配置你的 Agent 后, 你应该能够使用相应的指令查看连接到的 MCP 服务器了.

借助 MCP, Agent 得以突破原有能力边界, 做到此前无法完成的事.

Plugin 可以一键安装可以包含 Skills, MCP, 下面是在 OpenCode 中安装 superpowers 插件的配置方式. 只要在配置中加入 plugin 数组, OpenCode 就会自动从云端存储库拉取 superpowers 的内容, 并在下一次进入 OpenCode 时加载该 Plugin.

Code Block
# opencode.json
{
  "plugin": [
    "superpowers@git+https://github.com/obra/superpowers.git"
  ]
}

你也可以使用本地文件安装 Plugin.

Code Block
{
  "plugin": [
    "file:/absolute/path/to/your-plugin"
  ]
}

在 Plugin 仓库或者第三方市场介绍中也一般都会有如何添加到你的 Agent 中的说明.

如果你遇到了 Agent 原生能力无法解决的问题, 不必束手束脚 -- 插件, MCP 协议和 Skills 技能就是为这种时刻准备的. 它们像是一套可自由组合的扩展接口, 让 Agent 从 "能说会道" 进化为 "能办成事".

codeagenttutorial

Share poster

↑↓ to move · Enter to open · Esc to close