你正在 进阶版 · 🛠️ 技能工坊 · ← 回到学院 · 进阶版主页 · 总入口

← 十二个项目

项目 02 · 给一个具体的人定制一套技能包

不是抽象的"用户"。是一个真实的、能被你采访的人。给他做 5 个互相调用的 Skill,组成一个完整的工作流。

怎么算"成"?

那个人用了你做的技能包两周。其中至少 3 个 Skill 他每周用过。

步骤 1 · 采访

选一个真人。和他坐 60 分钟。问:

步骤 2 · 设计 5 个 Skill

每个 Skill 解决一个具体痛点。它们之间应该互相调用—— Skill A 解决了一半,转给 Skill B 完成。

步骤 3 · 实现

用智谱清言 AI 助手或 Ollama 自定义 modelfile 实现。每个 Skill 单独一个文件,有清晰的版本号。

步骤 4 · 试用与改

那个真人用一周。每天 5 分钟问"哪个 Skill 今天用了?哪里不顺?"根据反馈改三轮。

步骤 5 · 文档

写 README.md。包含:每个 Skill 的目的、使用场景、已知问题、改动历史。

← 上一个 下一个 →

工程测验 Skills 函数何时该回答「我不会」?
一个 Skills 系统被问到领域外的问题。你应该:
解释:Skills 系统的核心原则是「边界清晰」。如果一个问题不在 Skills 的范围内,系统应该直接拒绝,而不是让 LLM 编造。这防止了幻觉和安全问题。
分步引导 打包一个可复用的 Skills 函数集的 3 步
  1. 审视你的 domain。写下这个领域里「一个外行永远不会做的 5 件事」。
    看参考

    例:医学领域的外行永远不会(1)开处方;(2)看 X 光;(3)诊断;(4)手术;(5)评估风险分级。这 5 件事,就是你的核心 Skills。

  2. 每个 Skill 都要有「入参」和「出参」的严格定义。写一个简单的 TypeScript interface。
    看参考

    例:`Skill` —— input 包括 symptoms, patient_age, history;output 包括 likely_conditions, confidence, next_steps。

  3. 给每个 Skill 写 3–5 个真实用例。不是假想的,是你真实工作里会碰到的。然后测试一遍。
    看参考

    例:问题 1:患者说『头疼』→ 预期输出应该包括「血压检查」;问题 2:患者说『突然眩晕伴恶心』→ 预期输出应该包括「内科或神经科转诊」。

动手 为你的领域手写 2 个 Skill 函数
任务:定义两个领域特定的函数(比如医生的诊断建议、工程师的代码审查、厨师的烹饪技巧)。每个函数要有清晰的入参、出参和至少一个测试用例。
参考实现

工程级参考答案(带完整注释):

// Skill 函数的工程级实现
function codeReview(code, language) {
  // 这是一个「Skill」—— 做一件事,做对
  // 不负责决定是否调用,只负责执行检查
  
  const issues = [];
  const patterns = {
    singleLetterVar: { regex: /\b[a-z]\s*=/, msg: '避免单字母变量(除了循环计数器)', severity: 'warn' },
    unhandledAsync: { regex: /await\s+(?!\(|fetch)/, msg: '裸露的 await,检查是否需要 try/catch', severity: 'warn' },
    missingErrorHandler: { regex: /fetch\([^)]+\)(?!.*\.catch|.*catch\s*\()/s, msg: 'fetch 缺少错误处理', severity: 'error' },
  };
  
  for (const [name, { regex, msg, severity }] of Object.entries(patterns)) {
    if (regex.test(code)) {
      issues.push({ name, msg, severity });
    }
  }
  
  return {
    language,
    passed: issues.filter(i => i.severity === 'error').length === 0,
    issueCount: issues.length,
    issues,
    recommendation: issues.length === 0 ? '✓ 代码质量良好' : `✗ 需要修复 ${issues.filter(i => i.severity === 'error').length} 个错误和 ${issues.filter(i => i.severity === 'warn').length} 个警告`
  };
}
动手 设计一个 Skill 的文档字符串(docstring)
任务:写一个 Skill 函数的文档字符串。包括:(1) 这个 Skill 做什么,一句话;(2) 入参的类型和含义;(3) 出参的例子;(4) 3 个使用场景;(5) 什么情况下会失败或拒绝。

在下面框里写你自己的 prompt(可以用中文):

→ 打开通义千问粘贴试 已复制 ✓
看参考 prompt

参考 prompt(这是一个模板,你可以改细节):

你是一个领域专家。请基于以下规则回答问题:

1. 只基于你的专业知识和常见做法回答,不编造。
2. 如果问题超出你的领域,明确说「这不在我的专业范围内」。
3. 给出的建议应该包括「为什么」和「什么时候不应该这样做」。
4. 对于有争议的做法,列出不同观点。

现在,开始回答用户的问题。