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

Codex 的官方插件列表,新增了多个职能类插件

可以看到 Codex 想让越来越多非编程类的用户使用它。Codex 正在变成一个更加通用的 Agent,慢慢整合 ChatGPT 的一些能力,让更多人能用上 Agent 形态的产品。

这篇文章分享一下 Codex 里面插件、Skill、App、MCP 这几种资源分别是什么关系,分别代表什么。

插件是 Codex 自己包装的资源组合

插件是 Codex 特有的一种资源,不是一个非常通用的概念,只是 Codex 自己的包装。以 GitHub 插件为例,点开可以看到一个插件里面会包含 App、Skill,甚至是 MCP,三种资源类型都可以装进去。

GitHub 插件的详情页,包含一个 App 和四个 Skill

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,可以点开看。

Review Follow-up 这个 Skill 的 SKILL.md 内容

SKILL.md 包含描述和元数据,元数据说明什么时候触发这个 Skill。默认情况下全文不会读进 Agent 的上下文。比如开启 GitHub 插件之后,它只会把四个 Skill 的名字和描述带进 Agent;有需要的时候 Agent 才会去读全文。一个 Skill 相当于一个文件夹,里面可能还有参考文件和脚本,Agent 会根据 SKILL.md 的说明,处理某个任务时再去看对应的文件,像工作流一样一步一步渐进式地把更多知识读进上下文。

一种可交互的消息类型

在 Codex 的插件界面里,我们没办法直接看到一个插件包含了哪些 MCP。我是安装了一个官方插件之后,才知道插件也可以包含 MCP 的。这里我还发现一个有趣的点:Codex 在使用 MCP 的时候,可以提供一种可交互的消息类型。

正常的 Codex 响应是普通对话或者工具调用,但官方插件可以渲染一种特殊的消息格式,比如下面这个 widgets,可以用来进行自定义选项的选择。

官方插件渲染的可交互 widget,可以直接选择视觉方向

这是官方 Creative Production 插件里的一个流程:它利用外部的 MCP 响应一个特殊的消息格式,Codex 把这个格式渲染成可以交互的界面,有点类似于写一段 HTML 来给我们交互。

这种交互类型我之前自己做 Agent 的时候就觉得很好:在消息流里面,让人在固定的规则里写一些 HTML 来进行交互。我之前做 Skill 的时候,也有一些上下文的传递是通过一个单独的 HTML 来选择的。比如我之前做的 CityCraft,选择样式的时候会有一个带配色的卡片,在上面选择之后复制提示词,再粘贴回对话里。

在 Codex 里面这个过程是自带的。选择之后点 Use this style,会弹出一个弹窗,其实它也是复制提示词。

点击 Use this style 后弹出的提示词确认弹窗

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

提示词发送后,对话里显示 Creative brief sent

不过我自己尝试了一下,想试试自己的插件能不能做到类似的功能。我模仿了它的消息结构,发现没办法渲染出来,一直渲染的都是一段 JSON。有可能现在它只支持官方的插件去渲染这样的结构。

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