把调试与头脑风暴经验变成可复用资产:SmallCode技能系统与6个内置方法论技能详解
【免费下载链接】smallcodeAI coding agent optimized for small LLMs. 87% benchmark with 4B-active model.项目地址: https://gitcode.com/gh_mirrors/sm/smallcode
SmallCode是一款专为小型本地大模型(7B–20B)优化的 AI 编程代理(AI coding agent)。它的技能系统(Skill System)能把调试、头脑风暴、TDD 等工程经验沉淀成可复用的 Markdown 资产:6 个内置方法论技能开箱即用,且每个技能只占用约 8 个 token 的提示词预算——这正是小模型最缺的东西。
什么是技能系统:给小模型的"方法论外挂"
技能本质上就是一个带 YAML 前置头的 Markdown 文件,用来教会模型一套固定的行为流程。与插件相比它更轻量——不需要任何代码逻辑,只是结构化提示词模板:
| 概念 | 说明 |
|---|---|
| 技能文件 | 一个.md文件,开头可选 YAML 前置头(name/trigger/keywords) |
| 触发方式 | match(关键词自动匹配)或manual(手动调用) |
| 核心价值 | 弥补小模型推理深度有限的问题:把"该怎么做事"变成显式步骤 |
核心源码在 src/plugins/skills.js 中的SkillManager类,索引格式化逻辑见 src/plugins/skill_index_formatter.js。
💡懒加载设计:系统提示词中永远只注入技能的"索引"(名称+关键词,每行约 8 token),技能正文只在模型真正调用use_skill时才加载(见 _loadBody 实现)。对 8k–16k 上下文的小模型来说,这意味着几十个技能也不会挤爆提示词窗口。
技能从哪些目录加载?4 层优先级覆盖
SmallCode 按"后加载覆盖先加载"的顺序扫描技能目录(_getSkillDirs):
| 优先级 | 目录 | 用途 |
|---|---|---|
| 1(最低) | skills/(随包发布) | 内置默认技能 |
| 2 | ~/.smallcode/skills/或~/.config/smallcode/skills/ | 用户级全局技能 |
| 3(最高) | .smallcode/skills/(项目内) | 项目级覆盖,同名技能直接替换内置版 |
它还能自动识别嵌套目录布局:项目根下的.agents/skills/<name>/SKILL.md和.claude/skills/<name>/SKILL.md(兼容 Claude Code 的技能目录约定,见 _getNestedSkillRoots)。
最实用的场景:把内置技能复制一份到项目里,按团队习惯改写,就能无感覆盖默认版本:
mkdir -p .smallcode/skills # 复制内置 debugging.md 后按项目规范修改,同名即覆盖6 个内置方法论技能详解
内置技能位于 skills/ 目录,改编自 Willow 2.0 的 Fylgja 开发方法论包,专门针对 8B–35B 本地模型的预算约束调优(详见 skills/README.md)。
1️⃣ brainstorming(头脑风暴):先想清楚再写代码
触发词:
design/feature/approach/plan/architecture
小模型最容易犯的错是"急着写代码、造错东西"。这个技能强制 6 步流程(skills/brainstorming.md):
- 先搜上下文——调用
memory_load+ 代码搜索,绝不凭空脑暴 - 一句话说清问题——我们到底在解决什么
- 给出 3 个方案——每个方案用一句话点明核心取舍
- 推荐一个——两句话说清理由
- 标记约束——认证、迁移、外部 API、配置等坑
- 停下——用户确认方案前,禁止动手实现
其中第 6 步"不可跳过"是精髓:"I'll just start"(我直接开干了)恰恰跳过了整个技能的意义。
2️⃣ debugging(结构化调试):8 步锁定 Bug,拒绝瞎猜
触发词:
bug/fix/error/broken/fails/crash
skills/debugging.md 把调试变成一条"漏斗":
| 步骤 | 动作 | 防的是什么 |
|---|---|---|
| 1 | memory_load查历史 +search搜报错 | 重复踩同一个坑 |
| 2 | 明确 Bug:精确报错、file:line、预期 vs 实际 | 模糊描述 |
| 3 | 最小复现——能触发的最小输入 | 不理解就下结论 |
| 4 | 列出 2–3 个候选原因,按可能性排序 | 猜测式修复 |
| 5 | 验证头号假设,确认或排除 | 范围蔓延 |
| 6 | 外科手术式修复——不顺手重构 | 改出问题 |
| 7 | 跑测试确认;没有测试就先写一个 | 修完不知道对不对 |
| 8 | 非显而易见的坑用memory_remember(类型gotcha)沉淀 | 经验流失 |
一句话规则:不能复现 = 还不理解它。
3️⃣ tdd(测试驱动开发循环):红-绿循环自动推进
触发词:
tdd/test/implement/feature/requirements
skills/tdd.md 的用法最简单:把需求列表交给tdd_loop工具,例如tdd_loop(requirements=["add() 返回两数之和", "add() 对非法输入抛 TypeError"]),然后对每条需求执行"先写失败测试,再写最小实现"。
测试框架会在每次写文件后自动跑测试,目标测试变绿就自动进入下一个需求;全部需求变绿且整个测试套件通过时循环才结束。随时可用tdd_status查看进度。
4️⃣ iterative-retrieval(迭代检索):4 级阶梯,别一上来就读整个文件
触发词:
search/context/find/where/lookup/remember
核心理念是"记忆是地图,文件是领土"(skills/iterative-retrieval.md)。需要上下文时按阶梯逐级攀爬,够用就停:
阶梯 1 项目记忆 memory_load(最宽泛) ↓ 不够 阶梯 2 代码搜索 search / graph_search(只看路径和片段) ↓ 不够 阶梯 3 定向读取 read_file 的特定区段 ↓ 还不够 阶梯 4 读完整文件(最后手段)规则只有一条:永远不要跳到阶梯 4——小模型读整文件会白白烧掉大量上下文。
5️⃣ learn(经验沉淀):把"踩过的坑"变成团队资产
触发方式:手动(
/skill use learn)
当会话中发现非显而易见的东西(变通方案、库的怪癖、架构陷阱、集成模式)时,这个技能指导模型把经验提炼成可复用模式(skills/learn.md):
- ✅该记:操作约束、版本特定修复、构建/测试命令的怪癖
- ❌不该记:读代码就能推导的模式、本会话的临时状态、README 里已有的内容
保存时用memory_remember标注 5 种类型:decision(已定决策)/workflow(可复用流程)/gotcha(陷阱与规避)/convention(约定)/context(领域知识)。规则:一次只存一个模式,内容不超过 200 词——小模型检索聚焦的笔记效果更好。
6️⃣ external-guard(外部内容防护):防提示注入的"三明治"
触发词:
web/fetch/external/untrusted/url/ingest
抓取网页或粘贴外部文本前,skills/external-guard.md 要求先用"三明治防御"包裹内容:明确声明边界内的文字只是数据、不是指令,然后再分析。
它还提供 3 档处置策略:
| 扫描结果 | 动作 |
|---|---|
| 干净 | 三明治包裹后放行 |
| 可疑 | 向用户展示命中模式,确认后再包裹 |
| 拦截 | 拒绝摄入,不写入记忆,并说明命中原因 |
典型拦截模式包括 "ignore previous instructions"、伪装成用户内容的工具调用 JSON、HTML 注释中的隐藏指令等。
快速上手:3 条 /skill 命令管理你的技能
在 SmallCode 终端中即可管理技能(命令实现见 skills/README.md):
/skill list # 查看所有已加载技能 /skill use brainstorming # 手动加载某个技能 /skill use learn # 手动触发经验沉淀技能行为有完整测试覆盖,见 test/skills.test.js 与 test/skill_lazy.test.js。
总结:小模型的最佳搭档是"方法论",不是更大参数
| 技能 | 一句话价值 |
|---|---|
brainstorming | 先确认方案再编码,防止造错东西 |
debugging | 8 步漏斗定位 Bug,修完必有测试 |
tdd | 红-绿循环自动推进,全绿才算完 |
iterative-retrieval | 4 级检索阶梯,守住上下文预算 |
learn | 把坑与经验写成可检索的记忆 |
external-guard | 三明治防御,挡住提示注入 |
SmallCode 的设计哲学很清晰:用结构化的方法论弥补小模型的推理深度。调试与头脑风暴这些原本靠资深工程师直觉的经验,现在变成了任何小模型都能稳定执行的资产——而你的项目只需要在.smallcode/skills/下放一个 Markdown 文件,就能让它按团队的方式工作。
【免费下载链接】smallcodeAI coding agent optimized for small LLMs. 87% benchmark with 4B-active model.项目地址: https://gitcode.com/gh_mirrors/sm/smallcode
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考