Agent: programmer (
programmer)
Confidence: 65%
Cost: $0.9163
Duration: 4m 12s
Task ID:400fe601-03e2-4f46-af01-b8e82f680bae
★ Insight ─────────────────────────────────────
1. 中文 NLP 的最小可行方案:我們的 pattern-detector 用了 bigram sliding window 來處理中文(因為中文沒有空格分隔詞)。這是一個常見的取捨——不引入 jieba 等重型斷詞庫,用 n-gram 近似。但 sliding window(stride=1)的致命問題是產生跨詞邊界碎片(如「始實」)。改成 non-overlapping stride=2 就能消除大部分問題,成本為零。
2. 自製 YAML Parser 的風險:為了避免引入 js-yaml 依賴,我們手寫了一個 ~60 行的 YAML subset parser。它目前能用,但每個 edge case 都是潛在 bug。這是「dependency avoidance」和「correctness」之間的典型取捨。對我們的場景(frontmatter 格式由自己控制),風險可控,但應該在文件中明確記錄支援的語法子集。
3. Signal File 的熱載入模式:用 .rebuild sentinel file 做進程間通信(MCP tool 寫入 → skill-loader 檢測)是一個優雅的低成本方案,避免了 IPC、WebSocket 等複雜通信。缺點是需要檔案系統輪詢(每次 matchSkills 都 stat() 一次),但因為 matchSkills 本來就是 I/O 操作,額外的 stat() 開銷可忽略。─────────────────────────────────────────────────
報告摘要
技術報告已完成並存檔至 soul/agent-reports/programmer/skill-system-code-review-2026-02-26.md。
核心發現:
6 個問題,按嚴重度排序:
| # | 嚴重度 | 問題 | 位置 |
|---|---|---|---|
| BUG-1 | HIGH | 中文 bigram 斷詞產出垃圾 skill(auto-開始-始實-實作) |
pattern-detector.ts:80-92 |
| BUG-2 | MEDIUM | 自製 YAML parser 的邊界陷阱(浮點數、nested object、key 中的 -) |
skill-loader.ts:61-125 |
| BUG-3 | LOW-MED | .rebuild signal 有 race condition(double rebuild) |
skill-loader.ts:294-304 |
| BUG-4 | LOW | buildSkillIndex 串行讀取全文(只需 frontmatter) |
skill-loader.ts:130-174 |
| BUG-5 | LOW | Weekly count 重置丟失中間數據 | skill-usage-tracker.ts:65-70 |
| BUG-6 | DESIGN | weaveSkills 硬編碼只注入 1 個 skill |
context-weaver.ts:461 |
與文章觀點對照:
- 我們做對了:延遲加載、frontmatter 設計、signal 熱載入、使用追蹤、自動學習
- 文章有但我們沒有:目錄語義化(低優先)、技能繼承(目前不需要)
- 我們有但文章沒提:自動學習系統(但品質需修)
最優先修復:
- 修中文斷詞 — 改 stride=2 或引入基本詞典,並清理 2 個垃圾 skill
- 提高自動學習閾值 — MIN_FREQUENCY 3→5,MIN_CONFIDENCE 0.3→0.5
- keyword 匹配改 word boundary — 避免
"git"匹配到"legitimate"