首页 › LLM大语言模型 › Codex专栏 › Codex中文教程 › 第七章:能力扩展

第七章:能力扩展

先分清四个概念​

​

#QRUUdLbJZHtW text { white-space: pre; }#QRUUdLbJZHtW .fb0 { stroke: var(--N900-FG, 0.15); }#QRUUdLbJZHtW .fb0 {stroke: rgba(31,35,41, 0.15)}#QRUUdLbJZHtW .fx0 { stroke-miterlimit: 10; }#QRUUdLbJZHtW .fx0 {stroke-miterlimit: 10}#QRUUdLbJZHtW .fa1 { fill: rgb(187, 191, 196); }#QRUUdLbJZHtW .fa1 {fill: rgb(187, 191, 196)}#QRUUdLbJZHtW .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#QRUUdLbJZHtW .fx1 {font-style: normal}#QRUUdLbJZHtW .fx2 { text-anchor: middle; }#QRUUdLbJZHtW .fx2 {text-anchor: middle}#QRUUdLbJZHtW .fx3 { dominant-baseline: central; }#QRUUdLbJZHtW .fx3 {dominant-baseline: central}#QRUUdLbJZHtW .fx4 { stroke: none; }#QRUUdLbJZHtW .fx4 {stroke: none}#QRUUdLbJZHtW .fc0 { fill: var(--text-caption); }#QRUUdLbJZHtW .fc0 {fill: #646a73}#QRUUdLbJZHtW .fa2 { fill: var(--text-link-disabled); }#QRUUdLbJZHtW .fa2 {fill: rgb(187, 191, 196)}#QRUUdLbJZHtW .fa3 { fill: rgb(222, 224, 227); }#QRUUdLbJZHtW .fa3 {fill: rgb(222, 224, 227)}#QRUUdLbJZHtW .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#QRUUdLbJZHtW .fx5 {font-style: normal}#QRUUdLbJZHtW .fx6 { text-anchor: start; }#QRUUdLbJZHtW .fx6 {text-anchor: start}#QRUUdLbJZHtW .fx7 { dominant-baseline: alphabetic; }#QRUUdLbJZHtW .fx7 {dominant-baseline: alphabetic}#QRUUdLbJZHtW .fc1 { fill: rgb(245, 74, 69); }#QRUUdLbJZHtW .fc1 {fill: rgb(245, 74, 69)}#QRUUdLbJZHtW .fc2 { fill: rgb(0, 0, 0); }#QRUUdLbJZHtW .fc2 {fill: rgb(0, 0, 0)}#QRUUdLbJZHtW .fb1 { fill: var(--N900-FG, 0.15); }#QRUUdLbJZHtW .fb1 {fill: rgba(31,35,41, 0.15)}#QRUUdLbJZHtW .fb2 { fill: rgb(209, 217, 224); }#QRUUdLbJZHtW .fb2 {fill: rgb(209, 217, 224)}#QRUUdLbJZHtW .fa4 { fill: var(--bg-body); }#QRUUdLbJZHtW .fa4 {fill: #fff}ABCD12345概念本质例子App 用户怎么理解Connector / AppPluginSkillMCP外部账号连接能力包可复用工作流工具协议GitHub、Gmail、Drive、Slack一组 skills、MCP、apps、配置代码审查 SOP浏览器、数据库、文档源把外部上下文带进 App安装后扩展 App 能力教 Codex 怎么做给 Codex 一双外部工具手

​

App 中的连接器工作流​

​

▫️

打开 App 的 Plugins / Connectors / Apps 入口。​

选择要连接的服务。​

完成账号授权。​

回到线程,用 @、mention、按钮或自然语言引用外部上下文。​

让 Codex 基于这些上下文执行任务。​

​

​

代码块​

Plain Text

读取这个 GitHub issue 和当前仓库代码,判断问题是否已经被修复。只读,不修改文件。​

​

安装或连接前的检查​

在 App 里点安装或授权前,先看清楚:​

​

#buWKBaXTqVDZ text { white-space: pre; }#buWKBaXTqVDZ .fb0 { stroke: var(--N900-FG, 0.15); }#buWKBaXTqVDZ .fb0 {stroke: rgba(31,35,41, 0.15)}#buWKBaXTqVDZ .fx0 { stroke-miterlimit: 10; }#buWKBaXTqVDZ .fx0 {stroke-miterlimit: 10}#buWKBaXTqVDZ .fa1 { fill: rgb(187, 191, 196); }#buWKBaXTqVDZ .fa1 {fill: rgb(187, 191, 196)}#buWKBaXTqVDZ .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#buWKBaXTqVDZ .fx1 {font-style: normal}#buWKBaXTqVDZ .fx2 { text-anchor: middle; }#buWKBaXTqVDZ .fx2 {text-anchor: middle}#buWKBaXTqVDZ .fx3 { dominant-baseline: central; }#buWKBaXTqVDZ .fx3 {dominant-baseline: central}#buWKBaXTqVDZ .fx4 { stroke: none; }#buWKBaXTqVDZ .fx4 {stroke: none}#buWKBaXTqVDZ .fc0 { fill: var(--text-caption); }#buWKBaXTqVDZ .fc0 {fill: #646a73}#buWKBaXTqVDZ .fa2 { fill: var(--text-link-disabled); }#buWKBaXTqVDZ .fa2 {fill: rgb(187, 191, 196)}#buWKBaXTqVDZ .fa3 { fill: rgb(222, 224, 227); }#buWKBaXTqVDZ .fa3 {fill: rgb(222, 224, 227)}#buWKBaXTqVDZ .fx5 { font: 700 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#buWKBaXTqVDZ .fx5 {font-style: normal}#buWKBaXTqVDZ .fx6 { text-anchor: start; }#buWKBaXTqVDZ .fx6 {text-anchor: start}#buWKBaXTqVDZ .fx7 { dominant-baseline: alphabetic; }#buWKBaXTqVDZ .fx7 {dominant-baseline: alphabetic}#buWKBaXTqVDZ .fc1 { fill: rgb(78, 131, 253); }#buWKBaXTqVDZ .fc1 {fill: rgb(78, 131, 253)}#buWKBaXTqVDZ .fx8 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#buWKBaXTqVDZ .fx8 {font-style: normal}#buWKBaXTqVDZ .fc2 { fill: rgb(0, 0, 0); }#buWKBaXTqVDZ .fc2 {fill: rgb(0, 0, 0)}#buWKBaXTqVDZ .fb1 { fill: var(--N900-FG, 0.15); }#buWKBaXTqVDZ .fb1 {fill: rgba(31,35,41, 0.15)}#buWKBaXTqVDZ .fb2 { fill: rgb(209, 217, 224); }#buWKBaXTqVDZ .fb2 {fill: rgb(209, 217, 224)}#buWKBaXTqVDZ .fa4 { fill: var(--bg-body); }#buWKBaXTqVDZ .fa4 {fill: #fff}AB123456检查项要确认什么来源能力权限数据范围撤销方式是官方插件、组织内插件,还是第三方插件带 Skills、MCP、Connectors、配置还是组合包只读、评论、写文件、创建 PR、发消息分别需要什么权限能访问哪些仓库、文档、邮箱、群聊或日历在 App、服务后台或组织管理端哪里撤销

​

常见连接场景​

Plugin 在 App 中怎么用​

​

▫️

插件常见用途:​

•

带来一组 Skills。​

•

带来 MCP server。​

•

带来外部 App / Connector。​

•

提供项目模板或规则。​

•

提供特定平台的部署、监控、开发流程。​

​

安装后要检查:​

•

插件说明。​

•

它带了哪些 Skills。​

•

它是否要求外部账号授权。​

•

它是否带 MCP server。​

•

它是否会运行本地命令。​

•

它是否有禁用或卸载入口。​

GitHub 连接器的最小可用流程​

GitHub 是最常见的 App 连接场景。建议按这个顺序验证:​

在 App 的 Connectors / Apps / Plugins 入口找到 GitHub。​

完成账号授权。​

确认授权范围:只读仓库、issue、PR,还是包含写权限。​

回到项目线程,引用一个 issue 或 PR。​

先让 Codex 只读总结上下文。​

再决定是否允许评论、创建分支、提交或更新 PR。​

示例:​

​

代码块​

Plain Text

读取这个 PR 的描述、评论和当前本地 diff,判断是否还有未处理 review 意见。只读,不评论、不修改文件。​

​

最小权限原则​

插件和连接器都要按最小权限使用:​

​

#oJXCyROLQccd text { white-space: pre; }#oJXCyROLQccd .fb0 { stroke: var(--N900-FG, 0.15); }#oJXCyROLQccd .fb0 {stroke: rgba(31,35,41, 0.15)}#oJXCyROLQccd .fx0 { stroke-miterlimit: 10; }#oJXCyROLQccd .fx0 {stroke-miterlimit: 10}#oJXCyROLQccd .fa1 { fill: rgb(187, 191, 196); }#oJXCyROLQccd .fa1 {fill: rgb(187, 191, 196)}#oJXCyROLQccd .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#oJXCyROLQccd .fx1 {font-style: normal}#oJXCyROLQccd .fx2 { text-anchor: middle; }#oJXCyROLQccd .fx2 {text-anchor: middle}#oJXCyROLQccd .fx3 { dominant-baseline: central; }#oJXCyROLQccd .fx3 {dominant-baseline: central}#oJXCyROLQccd .fx4 { stroke: none; }#oJXCyROLQccd .fx4 {stroke: none}#oJXCyROLQccd .fc0 { fill: var(--text-caption); }#oJXCyROLQccd .fc0 {fill: #646a73}#oJXCyROLQccd .fa2 { fill: var(--text-link-disabled); }#oJXCyROLQccd .fa2 {fill: rgb(187, 191, 196)}#oJXCyROLQccd .fa3 { fill: rgb(222, 224, 227); }#oJXCyROLQccd .fa3 {fill: rgb(222, 224, 227)}#oJXCyROLQccd .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#oJXCyROLQccd .fx5 {font-style: normal}#oJXCyROLQccd .fx6 { text-anchor: start; }#oJXCyROLQccd .fx6 {text-anchor: start}#oJXCyROLQccd .fx7 { dominant-baseline: alphabetic; }#oJXCyROLQccd .fx7 {dominant-baseline: alphabetic}#oJXCyROLQccd .fc1 { fill: rgb(78, 131, 253); }#oJXCyROLQccd .fc1 {fill: rgb(78, 131, 253)}#oJXCyROLQccd .fc2 { fill: rgb(0, 0, 0); }#oJXCyROLQccd .fc2 {fill: rgb(0, 0, 0)}#oJXCyROLQccd .fb1 { fill: var(--N900-FG, 0.15); }#oJXCyROLQccd .fb1 {fill: rgba(31,35,41, 0.15)}#oJXCyROLQccd .fb2 { fill: rgb(209, 217, 224); }#oJXCyROLQccd .fb2 {fill: rgb(209, 217, 224)}#oJXCyROLQccd .fa4 { fill: var(--bg-body); }#oJXCyROLQccd .fa4 {fill: #fff}AB123456动作建议第一次安装只读任务需要发消息 / 改 PR团队插件不再使用只给必要权限不给写权限明确说明目标和范围先在测试项目验证及时禁用或卸载

​

不要让 Codex “随便查一下所有邮件 / 所有文档 / 所有群聊”。​

CLI 作为辅助​

App 是主线。CLI 只在这些情况使用:​

codex plugin --help​

codex plugin list​

codex plugin marketplace --help​

适合:​

•

排查插件是否安装。​

•

自动化团队安装流程。​

•

查看低层配置。​

不适合:​

•

作为普通用户的第一入口。​

•

替代 App 内授权和权限确认。​

Plugin、MCP、Skill 的组合例子​

一个 GitHub 工作流插件可能包含:​

​

代码块​

Plain Text

Plugin​

Apps / Connector: GitHub​

Skills: issue-triage, pr-review​

MCP: GitHub tool server​

Config: allowed repository patterns​

​

App 用户关心的是“我能完成什么工作流”,而不是先背内部结构。​

验收清单​

连接器或插件启用后,检查:​

​

​

常见错误​

​

​

常见问题​

Q1:插件和连接器哪个优先?​

如果只是连接一个外部服务,优先看 Connector / App。若需要一整套工作流、工具和技能,再看 Plugin。​

Q2:插件会不会自动访问我的数据?​

不应这样理解。访问外部数据通常还需要授权,具体范围取决于连接器和组织设置。​

Q3:Plugin 能带 Skill 吗?​

可以。插件是能力包,Skill 是其中一种能力。​

​