在前两天 Codex 的更新中,官方插件里增加了一些职能相关的插件,比如数据分析、产品设计、销售、创意、图片生成,还有金融类的插件。

可以看到 Codex 想让越来越多非编程类的用户使用它。Codex 正在变成一个更加通用的 Agent,慢慢整合 ChatGPT 的一些能力,让更多人能用上 Agent 形态的产品。
这篇文章分享一下 Codex 里面插件、Skill、App、MCP 这几种资源分别是什么关系,分别代表什么。
插件是 Codex 自己包装的资源组合
插件是 Codex 特有的一种资源,不是一个非常通用的概念,只是 Codex 自己的包装。以 GitHub 插件为例,点开可以看到一个插件里面会包含 App、Skill,甚至是 MCP,三种资源类型都可以装进去。

App、MCP 和 CLI 的区别
App 用于连接外部的服务。大家可能也听说过 MCP 也可以连接外部服务,Skill 里也可以通过 CLI 去连接外部服务,它们有什么区别?
App 更像我们以前传统的 SaaS。比如我的某个工具想用 GitHub 的能力,可以直接连接 GitHub 的登录,使用 GitHub 提供的认证方式。它是更加产品化的:点击连接,直接跳到 GitHub 那边去授权。
MCP 更多的是专门给 AI 使用的、频繁跟外部服务进行交互的方式,是 Anthropic 推出的一个用来连接外部服务的协议。只不过后来随着模型能力增强,Agent 不再需要一个专门的协议去调用外部服务了:我们给它写一个功能健全的 CLI,它自己编写命令去调用,也能够调得很好。
Skill 是教 Agent 做事的 know-how
连接了 GitHub 之后,插件只是有了一个获取外部数据的渠道。要教 Agent 怎么执行一些流程,就要靠 Skill。比如提 PR 的时候要怎么做、CI 出了问题怎么 debug,这些是 know-how,里面也可能有一些脚本,帮 Agent 纠正格式这一类的处理。
Skill 里面主要是一个 SKILL.md,可以点开看。

SKILL.md 包含描述和元数据,元数据说明什么时候触发这个 Skill。默认情况下全文不会读进 Agent 的上下文。比如开启 GitHub 插件之后,它只会把四个 Skill 的名字和描述带进 Agent;有需要的时候 Agent 才会去读全文。一个 Skill 相当于一个文件夹,里面可能还有参考文件和脚本,Agent 会根据 SKILL.md 的说明,处理某个任务时再去看对应的文件,像工作流一样一步一步渐进式地把更多知识读进上下文。
一种可交互的消息类型
在 Codex 的插件界面里,我们没办法直接看到一个插件包含了哪些 MCP。我是安装了一个官方插件之后,才知道插件也可以包含 MCP 的。这里我还发现一个有趣的点:Codex 在使用 MCP 的时候,可以提供一种可交互的消息类型。
正常的 Codex 响应是普通对话或者工具调用,但官方插件可以渲染一种特殊的消息格式,比如下面这个 widgets,可以用来进行自定义选项的选择。

这是官方 Creative Production 插件里的一个流程:它利用外部的 MCP 响应一个特殊的消息格式,Codex 把这个格式渲染成可以交互的界面,有点类似于写一段 HTML 来给我们交互。
这种交互类型我之前自己做 Agent 的时候就觉得很好:在消息流里面,让人在固定的规则里写一些 HTML 来进行交互。我之前做 Skill 的时候,也有一些上下文的传递是通过一个单独的 HTML 来选择的。比如我之前做的 CityCraft,选择样式的时候会有一个带配色的卡片,在上面选择之后复制提示词,再粘贴回对话里。
在 Codex 里面这个过程是自带的。选择之后点 Use this style,会弹出一个弹窗,其实它也是复制提示词。

我可以直接把这段基于我的选择生成的提示词发送给 Codex。

不过我自己尝试了一下,想试试自己的插件能不能做到类似的功能。我模仿了它的消息结构,发现没办法渲染出来,一直渲染的都是一段 JSON。有可能现在它只支持官方的插件去渲染这样的结构。
我觉得这种小交互是很多 Agent 值得学习的。有些 Agent 官方给了一些结构,但自定义的成熟程度不是很高。如果 Agent 开放一些消息格式,我们在进行交互之后点击提交,可以触发工具里面的某一个 API,把消息发送给 Agent,很多 Skill 的交互就可以更上一层楼。比如用一个做 PPT 的 Skill 时,可以直接在对话里渲染三个不同的风格,选择之后再提交,这比额外打开一个浏览器看一个 HTML 效果更好。这样的交互我在自己测试的 Agent 里面已经实现了,后续再给大家分享。
