SuperAPI AI 工具集

learner

智能体与模型

查看项目

更新于 10-16 07:50

技能介绍

用途

Learner 是一个用于从当前对话中提取“已学技能”的工具。它的核心理念是:可复用的技能不是用来复制粘贴的代码片段,而是教会 Codex 如何思考某一类问题的原则与决策启发式。

资料给出的对比:

  • 差(模仿):“当你看到 ConnectionResetError 时,加上这段 try/except 代码块”
  • 好(可复用技能):“在异步网络代码中,任何 I/O 操作都可能因客户端/服务端生命周期不匹配而独立失败。原则是:把每个 I/O 操作分别包裹起来,因为操作之间的失败是常见情况,而不是例外。”

一个好的技能改变的是 Codex 处理问题的方式,而不仅仅是它产出的代码。

何时使用

在提取技能之前,先问自己:

  • “别人能在 5 分钟内搜到吗?”→ 能,就停止,不要提取。
  • “这是否是当前代码库特有的?”→ 不是,就停止,不要提取。
  • “这是否花了真实的调试努力才发现?”→ 不是,就停止,不要提取。

如果某个潜在技能在上述任一问题中不满足,就不值得保存。

识别模式:仅在以下情况之后使用 /learner:

  • 解决了一个需要深入调查的棘手 bug
  • 发现了当前代码库特有的、非显而易见的变通方案
  • 找到了一个一旦忘记就会浪费时间的隐藏陷阱
  • 发现了影响本项目的未文档化行为

提取流程

第一步:收集所需信息

  • 问题陈述:发生的具体错误、症状或困惑。包含实际错误信息、文件路径、行号。示例:“重启后 sessionId 为 undefined 时,src/hooks/session.ts:45 出现 TypeError”
  • 解决方案:确切的修复方式,而非泛泛建议。包含代码片段、文件路径、配置变更。示例:“在访问 session.user 前加空值检查,在 401 时重新生成 session”
  • 触发词:再次遇到该问题时会出现的关键词。使用错误信息片段、文件名、症状描述。示例:["sessionId undefined", "session.ts TypeError", "401 session"]
  • 范围:几乎总是项目级,除非是真正通用的洞察

第二步:质量校验

系统会拒绝以下技能:

  • 过于泛泛(没有文件路径、行号或具体错误信息)
  • 容易搜到(标准模式、库用法)
  • 解决方案含糊(没有代码片段或精确指令)
  • 触发词不佳(匹配一切的通用词)

第三步:保存位置

  • 用户级:~/.codex/skills/omc-learned/ —— 少见,仅用于真正可移植的洞察。
  • 项目级:.omx/skills/ —— 默认,随仓库进行版本控制。

什么算有用的技能

关键:并非每个解决方案都值得保存。好的技能应满足:

  • 无法轻易搜到:
    • 差:“如何在 TypeScript 中读取文件”
    • 好:“本代码库在 ESM 中使用自定义路径解析,需要 fileURLToPath 加特定相对路径”
  • 上下文特定:引用本代码库的实际文件、错误信息或模式
    • 差:“用 try/catch 做错误处理”
    • 好:“server.py:42 的 aiohttp 代理在 ClientDisconnectedError 时崩溃——把 StreamResponse 包进 try/except”
  • 可精确执行:明确告诉你做什么、在哪里做
    • 差:“处理边界情况”
    • 好:“在 dist/ 中看到 'Cannot find module' 时,检查 tsconfig.json 的 moduleResolution 是否匹配 package.json 的 type 字段”
  • 来之不易:花了大量调试努力才发现
    • 差:通用编程模式
    • 好:“worker.ts 中的竞态条件——第 89 行的 Promise.all 需要在 map 回调返回前 await”

反模式(不要提取):

  • 通用编程模式(改用文档)
  • 重构技巧(这些是通用的)
  • 库用法示例(改用库文档)
  • 类型定义或样板代码
  • 任何初级开发者 5 分钟就能搜到的东西

技能格式

技能以 Markdown 保存,结构如下:

YAML Frontmatter:标准元数据字段:id、name、description、source、triggers、quality

正文结构(必需):

[技能名称]

The Insight

你发现的底层原则是什么?不是代码,而是心智模型。示例:“异步 I/O 操作可独立失败。客户端生命周期 != 服务端生命周期。”

Why This Matters

不知道这一点会出什么问题?是什么症状把你带到这里?示例:“代理服务器在客户端断开时崩溃,拖垮其他请求。”

Recognition Pattern

如何判断该技能适用?有哪些迹象?示例:“构建任何长连接处理器(代理、websocket、SSE)时”

The Approach

决策启发式,而不仅是代码。Codex 应如何思考?示例:“对每个 I/O 操作问:如果它此刻失败会怎样?在本地处理它。”

Example(可选)

如果代码有帮助就展示——但作为原则的说明,而非复制粘贴材料。

关键:如果 Codex 能把技能应用到新情境,而不仅是相同情境,它就是可复用的。

相关命令

  • /note —— 保存能在压缩后存活的快速笔记(比技能更非正式)
  • /ralph —— 启动带学习捕获的开发循环

限制

资料未提供该技能的安装命令、收费或价格信息、支持平台、具体效果数据,这些内容暂未提供。