欢迎光临
我们一直在努力

一个 Skill 教遍所有技术栈?不靠预置课程,靠“元协议“+ 四份范例

一个 Skill 教遍所有技术栈?不靠预置课程,靠"元协议"+ 四份范例

你想做一个"AI 私教"Agent。第一个设计决策就卡住你:

教学内容写死吗?

写死:质量可控,但它这辈子只会教这一门课,学员说"我想学 Kafka"你就得重写一遍。 不写死:什么都能教,但生成质量听天由命,每次问出一张不同的学习路线。

这是所有"通用型 Agent"都要面对的两难:能力与确定性不可兼得——除非,你预置的不是"内容",而是"生成内容的协议"。

这篇拆解开源项目 tech-stack-architect-coach 的核心创新:一个技术栈无关的动态模块池协议。它让同一个 Skill 能教 Redis、Kafka、MySQL、Vue、ES、Nginx…… 同时实测同一输入两次生成的模块池 100% 一致(R7 一致性测试,14/14 模块名与分层完全相同)。

📌 TL;DR 速览

  • 讲什么:不预置课程内容,而是预置"生成课程的协议"——通用型 Agent 的设计五件套
  • 核心结论:通用性的答案不是"什么都预置",而是"把生成方法本身协议化";范例质量 = 生成质量
  • 三个关键数字:L1–L4 四层判定 | 每池 8–14 个模块 | 跨会话一致性 100%(门槛 70%)
  • 适合谁:做"动态生成"类 Agent,被生成质量不稳定折磨的人

目录

  • 一、预置内容 vs 动态生成:先看清两难
  • 二、解法:元协议——预置"生成方法",不预置"内容"
  • 三、模块的 4 条铁标准
  • 四、L1–L4 分层:给任意技术栈"对号入座"
  • 五、五步法:从知识地图到质量自检
  • 六、模块元数据:让路线可以"按目标重排"
  • 七、通过标准:验"做出来",不验"听懂了"
  • 八、质量自检清单:生成器的单元测试
  • 九、四份范例:小样本撬动大确定性
  • 十、与诊断结论联动:同一份模块池,三种学员
  • 十一、可复用清单
  • 十二、总结

一、预置内容 vs 动态生成:先看清两难

预置内容动态生成
覆盖面 一门课一份内容 任意技术栈
质量 人工打磨,可控 依赖模型当场发挥
一致性 稳定 同输入可能出不同结果
维护成本 加一门课写一份 改协议一处,全域生效
个性化 千人一面 可按学员基础/目标/时间调整

直觉上"动态生成"全是优点,但它的死穴是中间两行:质量没保障、结果不稳定。大多数项目倒在"每次生成都不一样"上——学习路线这种东西,今天一张明天一张,用户凭什么信你?

所以这个设计要回答的真问题是:怎么让"动态生成"拥有接近"预置内容"的确定性和质量?


二、解法:元协议——预置"生成方法",不预置"内容"

答案是把预置对象从"内容"换成"生成内容的协议":

#mermaid-svg-UQcJGqax8fRTnMdy{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UQcJGqax8fRTnMdy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UQcJGqax8fRTnMdy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UQcJGqax8fRTnMdy .error-icon{fill:#552222;}#mermaid-svg-UQcJGqax8fRTnMdy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UQcJGqax8fRTnMdy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UQcJGqax8fRTnMdy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UQcJGqax8fRTnMdy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UQcJGqax8fRTnMdy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UQcJGqax8fRTnMdy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UQcJGqax8fRTnMdy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UQcJGqax8fRTnMdy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UQcJGqax8fRTnMdy .marker.cross{stroke:#333333;}#mermaid-svg-UQcJGqax8fRTnMdy svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UQcJGqax8fRTnMdy p{margin:0;}#mermaid-svg-UQcJGqax8fRTnMdy .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-UQcJGqax8fRTnMdy .cluster-label text{fill:#333;}#mermaid-svg-UQcJGqax8fRTnMdy .cluster-label span{color:#333;}#mermaid-svg-UQcJGqax8fRTnMdy .cluster-label span p{background-color:transparent;}#mermaid-svg-UQcJGqax8fRTnMdy .label text,#mermaid-svg-UQcJGqax8fRTnMdy span{fill:#333;color:#333;}#mermaid-svg-UQcJGqax8fRTnMdy .node rect,#mermaid-svg-UQcJGqax8fRTnMdy .node circle,#mermaid-svg-UQcJGqax8fRTnMdy .node ellipse,#mermaid-svg-UQcJGqax8fRTnMdy .node polygon,#mermaid-svg-UQcJGqax8fRTnMdy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UQcJGqax8fRTnMdy .rough-node .label text,#mermaid-svg-UQcJGqax8fRTnMdy .node .label text,#mermaid-svg-UQcJGqax8fRTnMdy .image-shape .label,#mermaid-svg-UQcJGqax8fRTnMdy .icon-shape .label{text-anchor:middle;}#mermaid-svg-UQcJGqax8fRTnMdy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UQcJGqax8fRTnMdy .rough-node .label,#mermaid-svg-UQcJGqax8fRTnMdy .node .label,#mermaid-svg-UQcJGqax8fRTnMdy .image-shape .label,#mermaid-svg-UQcJGqax8fRTnMdy .icon-shape .label{text-align:center;}#mermaid-svg-UQcJGqax8fRTnMdy .node.clickable{cursor:pointer;}#mermaid-svg-UQcJGqax8fRTnMdy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UQcJGqax8fRTnMdy .arrowheadPath{fill:#333333;}#mermaid-svg-UQcJGqax8fRTnMdy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UQcJGqax8fRTnMdy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UQcJGqax8fRTnMdy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UQcJGqax8fRTnMdy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UQcJGqax8fRTnMdy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UQcJGqax8fRTnMdy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UQcJGqax8fRTnMdy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UQcJGqax8fRTnMdy .cluster text{fill:#333;}#mermaid-svg-UQcJGqax8fRTnMdy .cluster span{color:#333;}#mermaid-svg-UQcJGqax8fRTnMdy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UQcJGqax8fRTnMdy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UQcJGqax8fRTnMdy rect.text{fill:none;stroke-width:0;}#mermaid-svg-UQcJGqax8fRTnMdy .icon-shape,#mermaid-svg-UQcJGqax8fRTnMdy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UQcJGqax8fRTnMdy .icon-shape p,#mermaid-svg-UQcJGqax8fRTnMdy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UQcJGqax8fRTnMdy .icon-shape .label rect,#mermaid-svg-UQcJGqax8fRTnMdy .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UQcJGqax8fRTnMdy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UQcJGqax8fRTnMdy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UQcJGqax8fRTnMdy :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

每个技术栈一份写不完

什么技术栈都能生成

预置内容方案Redis 课.md + Kafka 课.md + …

通用 Skill

元协议方案模块池生成协议.md+ 四份风格范例

协议文件(module-pool-generation.md)里没有任何具体技术的教学内容,只有:

  • 模块的粒度标准(什么算一个模块)
  • 分层判定标准(L1–L4 四层,按"逻辑角色"对号入座)
  • 元数据规范(依赖、时长、按目标的优先级)
  • 通过标准的写法硬要求(可执行、量化)
  • 五步法生成流程 + 质量自检清单
  • 四份少样本范例(Redis/Kafka/MySQL/Vue,锚定风格与粒度)
  • README 里有一句贡献指南,把这个原则说得很死:

    改进协议文件:直接提 PR,注意保持"通用框架"定位——不要往 Skill 里加具体技术栈的预置教学内容(模块池是运行时生成的)。 新增技术栈的生成效果不佳时,优先改进分层规则与范例,而不是加特例。

    “改规则,不加特例”——这句就是整个设计的定海神针。


    三、模块的 4 条铁标准

    生成的最小单位是"模块",协议给模块定了 4 条必须同时满足的标准:

  • 单一知识点单元:一个模块只解决一类问题——"缓存穿透治理"是一个模块,"缓存"不是;
  • 可验收:有明确的、可操作的通过标准;
  • 时长有界:预估 0.5~2 天可完成,超 2 天必须拆分;
  • 可独立讲解:内部自成闭环(场景→概念→原理→编码→验证→面试六步走)。
  • 协议还给了反例,直接点名禁止形态:

    反例(禁止):“Redis 高级篇”(不可验收)、“数据结构与持久化”(两个知识点混装)、“消息队列原理”(超过 2 天上限)。

    为什么反例重要?LLM 生成的典型毛病恰恰是"XX 高级篇"这种又大又虚的模块——把禁止形态写出来,比写 10 句正面要求都管用(上一篇"硬约束解剖学"里的"违规形态枚举"在这里复现了)。


    四、L1–L4 分层:给任意技术栈"对号入座"

    任何技术栈的知识体系都按四层组织。注意设计精髓:分层名是逻辑角色,不是固定栏目——非后端载体可以把层名换成同义词(前端 L3 叫"性能与工程化层"),但判定标准不变,且 layer 字段必须保留 L1–L4 前缀。

    层判定标准后端典型内容前端典型内容
    L1 基础层 使用该技术的最小必要知识,后续一切的前置 核心数据结构、连接与序列化、线程模型 组件模型、响应式数据流、路由与状态管理入门
    L2 核心机制层 该技术赖以工作的内部机制,生产必配 持久化、索引、事务、副本与一致性协议 渲染机制、更新调度、响应式依赖追踪
    L3 高可用与治理层 生产环境的坑与稳定性保障,面试最高频 高可用、集群、限流降级、容量规划、监控 性能优化、内存泄漏治理、错误监控、工程化
    L4 实战层 用该技术解决真实业务问题的组合打法 分布式锁/幂等/延迟任务、典型架构落地 复杂组件抽象、中台方案、大型应用架构

    四份真实分层映射(协议原文):

    • Redis:L1=数据结构/序列化/线程模型;L2=RDB/AOF/主从;L3=哨兵/Cluster/缓存三坑/大Key;L4=分布式锁/Lua/监控
    • Kafka:L1=Topic/Partition/生产者消费者;L2=存储机制/副本与 ISR/位移管理;L3=重平衡/exactly-once/积压治理;L4=延迟队列/事务消息/压测调优
    • MySQL:L1=索引与执行计划;L2=事务与 MVCC/日志体系;L3=锁/主从/分库分表;L4=慢查询治理/线上故障复盘
    • Vue:L1=组件与响应式基础;L2=渲染与更新机制/编译优化;L3=性能优化/内存泄漏/错误监控;L4=复杂状态方案/组件库封装

    判定标准与载体无关,是这套协议能跨技术栈复用的根基。 这也是项目留给贡献者的扩展点:生成新载体效果不好,优先打磨的是这张判定标准表。


    五、五步法:从知识地图到质量自检

    #mermaid-svg-wFq6yYgCRoBeue0M{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wFq6yYgCRoBeue0M .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wFq6yYgCRoBeue0M .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wFq6yYgCRoBeue0M .error-icon{fill:#552222;}#mermaid-svg-wFq6yYgCRoBeue0M .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wFq6yYgCRoBeue0M .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wFq6yYgCRoBeue0M .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wFq6yYgCRoBeue0M .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wFq6yYgCRoBeue0M .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wFq6yYgCRoBeue0M .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wFq6yYgCRoBeue0M .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wFq6yYgCRoBeue0M .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wFq6yYgCRoBeue0M .marker.cross{stroke:#333333;}#mermaid-svg-wFq6yYgCRoBeue0M svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wFq6yYgCRoBeue0M p{margin:0;}#mermaid-svg-wFq6yYgCRoBeue0M .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-wFq6yYgCRoBeue0M .cluster-label text{fill:#333;}#mermaid-svg-wFq6yYgCRoBeue0M .cluster-label span{color:#333;}#mermaid-svg-wFq6yYgCRoBeue0M .cluster-label span p{background-color:transparent;}#mermaid-svg-wFq6yYgCRoBeue0M .label text,#mermaid-svg-wFq6yYgCRoBeue0M span{fill:#333;color:#333;}#mermaid-svg-wFq6yYgCRoBeue0M .node rect,#mermaid-svg-wFq6yYgCRoBeue0M .node circle,#mermaid-svg-wFq6yYgCRoBeue0M .node ellipse,#mermaid-svg-wFq6yYgCRoBeue0M .node polygon,#mermaid-svg-wFq6yYgCRoBeue0M .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wFq6yYgCRoBeue0M .rough-node .label text,#mermaid-svg-wFq6yYgCRoBeue0M .node .label text,#mermaid-svg-wFq6yYgCRoBeue0M .image-shape .label,#mermaid-svg-wFq6yYgCRoBeue0M .icon-shape .label{text-anchor:middle;}#mermaid-svg-wFq6yYgCRoBeue0M .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wFq6yYgCRoBeue0M .rough-node .label,#mermaid-svg-wFq6yYgCRoBeue0M .node .label,#mermaid-svg-wFq6yYgCRoBeue0M .image-shape .label,#mermaid-svg-wFq6yYgCRoBeue0M .icon-shape .label{text-align:center;}#mermaid-svg-wFq6yYgCRoBeue0M .node.clickable{cursor:pointer;}#mermaid-svg-wFq6yYgCRoBeue0M .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wFq6yYgCRoBeue0M .arrowheadPath{fill:#333333;}#mermaid-svg-wFq6yYgCRoBeue0M .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wFq6yYgCRoBeue0M .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wFq6yYgCRoBeue0M .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wFq6yYgCRoBeue0M .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wFq6yYgCRoBeue0M .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wFq6yYgCRoBeue0M .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wFq6yYgCRoBeue0M .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wFq6yYgCRoBeue0M .cluster text{fill:#333;}#mermaid-svg-wFq6yYgCRoBeue0M .cluster span{color:#333;}#mermaid-svg-wFq6yYgCRoBeue0M div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wFq6yYgCRoBeue0M .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wFq6yYgCRoBeue0M rect.text{fill:none;stroke-width:0;}#mermaid-svg-wFq6yYgCRoBeue0M .icon-shape,#mermaid-svg-wFq6yYgCRoBeue0M .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wFq6yYgCRoBeue0M .icon-shape p,#mermaid-svg-wFq6yYgCRoBeue0M .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wFq6yYgCRoBeue0M .icon-shape .label rect,#mermaid-svg-wFq6yYgCRoBeue0M .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wFq6yYgCRoBeue0M .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wFq6yYgCRoBeue0M .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wFq6yYgCRoBeue0M :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    第1步 建立知识地图列 10-16 个候选知识点对照官方文档章节 × 主流面试考点交叉验证

    第2步 知识点归层按 L1-L4 判定标准对号入座

    第3步 拆分与合并超 2 天拆,不足 0.5 天合并目标规模 8-14 个模块

    第4步 标注元数据依赖 / 难度 / 时长 / 按目标优先级

    第5步 质量自检逐条过 7 项检查清单不过则回到对应步修改

    第 1 步"知识地图怎么列"给了可操作的口径:

    • 依据训练知识,列出该技术栈"一个高级开发者必须掌握"的知识点清单;
    • 对照官方文档章节结构 × 主流面试考点清单交叉验证,防结构性遗漏;
    • 规模参考:最终 8–14 个模块。少于 8 个通常是粒度太粗,多于 14 个通常是切得太碎——数字本身就是质量的代理指标。

    六、模块元数据:让路线可以"按目标重排"

    每个模块强制携带元数据:

    —
    id: 05
    title: 缓存三大坑治理(穿透 / 击穿 / 雪崩)
    layer: L3 高可用与治理层
    difficulty: 进阶
    prerequisites: [01]
    goals: [面试冲刺, 项目落地, 系统学习]
    duration: 0.5
    priority_by_goal: {面试冲刺: 10, 项目落地: 9, 系统学习: 7}
    —

    priority_by_goal 的填写规则写得非常具体:

    • 面试最最高频的考点模块打 9–10(一般全池只有 2–3 个);
    • 高频 7–8;中等 5–6;冷门但成体系必需的 3–4;边角知识 1–2。

    这套打分的意义:同一份模块池,按不同目标列降序,就是三条不同的推荐路线——面试冲刺走考点优先,项目落地走实战优先,不必为每种目标维护一份独立内容。元数据是"一次生成、多路复用"的关键。


    七、通过标准:验"做出来",不验"听懂了"

    协议对"通过标准"的写法提出了 4 条硬要求,这一条最能体现工程品味:

    ① 可执行——“做一件事 + 看到什么结果”,不是"理解某概念":

    ❌ “理解 RDB 和 AOF 的区别” ✅ “在项目中同时开启 RDB 和 AOF,制造一次宕机,用日志证明数据恢复到了哪个时间点;并能口述两种持久化各自的取舍”

    ② 量化或可视化,且按载体类型选指标:

    载体类型主要验证手段量化指标示例
    后端服务 压测 / 集成测试 / 日志分析 P99 延迟、QPS、错误率、恢复时间
    前端应用 Lighthouse / 构建产物分析 / 单元测试 LCP、性能分、包体积、覆盖率
    移动端 真机调试 / Profiler 冷启动时间、帧率、内存峰值、崩溃率
    大数据 任务跑批 / 数据校验 吞吐、延迟、一致性抽查通过率
    SRE 工具链 故障注入 / SLI/SLO 观测 可用性、MTTR、告警覆盖率

    ③ 与教学流程对齐:通过标准落在六步走的第 ⑤ 步(验证环节),第 ⑥ 步面试追问另附 2–3 道连环题。

    ④ 最重要的一条——验"做出来" ≠ 验"理解":

    通过标准验的是动手结果(压测达标/测试通过/口述成因不混淆);知识点是否"已完成"还需学员确认理解。模块完成 = 通过标准达成 且 所含知识点均已确认理解。

    这一句把上一篇讲的"讲解 ≠ 完成"红线直接接进了模块的完成定义里——协议文件之间是相互咬合的,不是各自为战。


    八、质量自检清单:生成器的单元测试

    模块池生成后,逐条自检、全部通过才允许进入下一阶段:

    • 模块数在 8–14 之间
    • 每个模块都有明确的 layer、prerequisites、duration、priority_by_goal
    • 依赖图无环;L1 模块无前置;每个模块的前置都在它之前
    • 每个模块都有可执行的、量化的通过标准
    • 覆盖了该技术栈"面试最高频"的至少 80% 考点
    • 有一个贯穿全课程的统一项目载体,每个模块的实战都能在其中落类
    • 难度曲线平滑:不存在"前一模块入门、后一模块突然实战"的无铺垫跳跃

    这份清单就是生成器的单元测试:模型自己产出、自己核对,不通过就回到对应步骤修改。它和上一篇的门禁、第一篇的量规,是同一种思想的三个应用场景——不要让关键质量依赖模型的自觉,要让检查成为流程的一部分。


    九、四份范例:小样本撬动大确定性

    协议的最后一部分,也是整个设计里最"贵"的资产:Redis(14 模块完整版)、Kafka(12)、MySQL(10)、Vue(10)四份模块池范例,外加一个"缓存三大坑"模块的完整详卡(元数据 + 六段式:场景引入→概念解释→原理简述→实战落地→通过标准→面试连环追问)。

    协议对范例的定位写得很清楚:

    以下示例供你模仿风格与粒度,不是让你背诵内容。为其他技术栈生成时,结构、元数据齐全程度、通过标准的具体程度都要对齐这些范例。

    四份范例 × 四种载体(后端 ×3 + 前端 ×1),恰好覆盖"教会模型什么叫合格的粒度"所需的最小样本集。

    这份投入的直接回报就是 R7 一致性测试(详见专栏第 1 篇):两个独立会话、逐字相同的学员剧本,各自生成 Redis 模块池——14/14 模块名一致、层归属一致、元数据全同、自检清单两次全过,综合相似度 100%(门槛 ≥70%)。报告给出的结论:

    协议 §7.1 的少样本范例对生成起到强锚定作用,模块池生成具有高度确定性。

    范例质量 = 生成质量。 想提升某个新载体的生成效果,别调 prompt 措辞,去打磨范例。


    十、与诊断结论联动:同一份模块池,三种学员

    协议最后一节回答了"个性化"问题:模块池生成时必须按诊断结论调整——

    诊断结论联动规则
    学员水平 = 深入 已掌握知识点所在模块降级为"快速验证模块"(0.25 天,通过标准=入学测);L1 整体降级,省下的时长让给 L3/L4
    学员水平 = 入门 L1 时长不变但优先级上调;提示总时长可能拉长 20–30%
    目标 = 面试冲刺 按"面试冲刺"优先级降序推荐;L4 中面试优先级 ≥8 的模块不可裁剪
    目标 = 项目落地 L4 实战层提前到 L3 之前;通过标准改写为"产出可复用代码 + 验证达标"
    目标 = 特定场景 以场景反推所需模块链(“订单超时关闭"→ 01→03→08→12),链外标记"可选”,协商阶段由学员决定

    注意设计边界:个性化不是"生成不同的池子",而是"在同一份池子上做有规则的变换"——池子的确定性保住了,个性化由联动规则承担。


    十一、可复用清单

    设计你自己的"动态生成"类 Agent 前过一遍:

    • 预置的是"生成协议"还是"内容"?加新领域时改规则还是加特例?
    • 生成单元有明确的粒度标准吗?禁止形态写出来了吗?
    • 有与领域无关的"分层/分类"判定标准吗?
    • 生成产物有结构化元数据吗?能按目标重排吗?
    • 验收标准是"可执行的做一件事",还是"理解某概念"?
    • 有量化指标吗?指标按载体类型区分了吗?
    • 有生成后的自检清单吗?不通过有回退路径吗?
    • 有几份覆盖不同载体的范例?范例风格就是质量上限吗?
    • 做过跨会话一致性测试吗(同输入多次生成比对)?
    • 个性化是"变换同一份产物"还是"每次重新生成"?

    十二、总结

    #mermaid-svg-B9HmCVPO9RPstRWP{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-B9HmCVPO9RPstRWP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-B9HmCVPO9RPstRWP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-B9HmCVPO9RPstRWP .error-icon{fill:#552222;}#mermaid-svg-B9HmCVPO9RPstRWP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-B9HmCVPO9RPstRWP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-B9HmCVPO9RPstRWP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-B9HmCVPO9RPstRWP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-B9HmCVPO9RPstRWP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-B9HmCVPO9RPstRWP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-B9HmCVPO9RPstRWP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-B9HmCVPO9RPstRWP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-B9HmCVPO9RPstRWP .marker.cross{stroke:#333333;}#mermaid-svg-B9HmCVPO9RPstRWP svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-B9HmCVPO9RPstRWP p{margin:0;}#mermaid-svg-B9HmCVPO9RPstRWP .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-B9HmCVPO9RPstRWP .cluster-label text{fill:#333;}#mermaid-svg-B9HmCVPO9RPstRWP .cluster-label span{color:#333;}#mermaid-svg-B9HmCVPO9RPstRWP .cluster-label span p{background-color:transparent;}#mermaid-svg-B9HmCVPO9RPstRWP .label text,#mermaid-svg-B9HmCVPO9RPstRWP span{fill:#333;color:#333;}#mermaid-svg-B9HmCVPO9RPstRWP .node rect,#mermaid-svg-B9HmCVPO9RPstRWP .node circle,#mermaid-svg-B9HmCVPO9RPstRWP .node ellipse,#mermaid-svg-B9HmCVPO9RPstRWP .node polygon,#mermaid-svg-B9HmCVPO9RPstRWP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-B9HmCVPO9RPstRWP .rough-node .label text,#mermaid-svg-B9HmCVPO9RPstRWP .node .label text,#mermaid-svg-B9HmCVPO9RPstRWP .image-shape .label,#mermaid-svg-B9HmCVPO9RPstRWP .icon-shape .label{text-anchor:middle;}#mermaid-svg-B9HmCVPO9RPstRWP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-B9HmCVPO9RPstRWP .rough-node .label,#mermaid-svg-B9HmCVPO9RPstRWP .node .label,#mermaid-svg-B9HmCVPO9RPstRWP .image-shape .label,#mermaid-svg-B9HmCVPO9RPstRWP .icon-shape .label{text-align:center;}#mermaid-svg-B9HmCVPO9RPstRWP .node.clickable{cursor:pointer;}#mermaid-svg-B9HmCVPO9RPstRWP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-B9HmCVPO9RPstRWP .arrowheadPath{fill:#333333;}#mermaid-svg-B9HmCVPO9RPstRWP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-B9HmCVPO9RPstRWP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-B9HmCVPO9RPstRWP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-B9HmCVPO9RPstRWP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-B9HmCVPO9RPstRWP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-B9HmCVPO9RPstRWP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-B9HmCVPO9RPstRWP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-B9HmCVPO9RPstRWP .cluster text{fill:#333;}#mermaid-svg-B9HmCVPO9RPstRWP .cluster span{color:#333;}#mermaid-svg-B9HmCVPO9RPstRWP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-B9HmCVPO9RPstRWP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-B9HmCVPO9RPstRWP rect.text{fill:none;stroke-width:0;}#mermaid-svg-B9HmCVPO9RPstRWP .icon-shape,#mermaid-svg-B9HmCVPO9RPstRWP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-B9HmCVPO9RPstRWP .icon-shape p,#mermaid-svg-B9HmCVPO9RPstRWP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-B9HmCVPO9RPstRWP .icon-shape .label rect,#mermaid-svg-B9HmCVPO9RPstRWP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-B9HmCVPO9RPstRWP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-B9HmCVPO9RPstRWP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-B9HmCVPO9RPstRWP :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    动态模块池

    元协议预置方法不预置内容 / 改规则不加特例

    模块标准单一知识点 / 可验收 0.5-2天

    分层 L1-L4判定标准与载体无关

    五步法知识地图 8-14个 / 自检清单

    通过标准做出来≠听懂 / 量化指标按载体

    范例杠杆四份范例 / R7 一致性100%

    一句话总结:通用性的答案不是"什么都预置",而是"把生成方法本身协议化"——粒度标准、分层判定、量化验收、自检清单、风格范例五件套,让动态生成拥有预置内容级的确定性。


    📌 系列导航:AI Agent 工程实践专栏

    • 第 1 篇:如何科学地评估一个 AI Agent(Skill Lift +275% 全记录)
    • 第 2 篇:协议化 Prompt 设计(Markdown 硬约束)
    • 第 3 篇:Agent 跨窗口状态续接(CONTEXT.md + TRACE.md 双文档模式)
    • 本篇:如何设计"通用型"Agent Skill(动态模块池 vs 预置内容)
    • 下篇:什么是 Agent Skill?Anthropic Skills 规范拆解(入门)

    你在做"通用型 Agent"时怎么保证生成质量的?few-shot 范例你放了几个?评论区交流 👇 觉得"范例质量 = 生成质量"这个洞察值一个点赞 + 收藏,下一篇回到入门视角,聊聊 Agent Skill 这个形态本身。

    赞(0)
    未经允许不得转载:171主机测评 » 一个 Skill 教遍所有技术栈?不靠预置课程,靠“元协议“+ 四份范例
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址