自我改進技能
將學習與錯誤記錄到 Markdown 檔案中,以實現持續改進。程式碼代理之後可以將這些記錄轉化為修正,而重要的學習則可提升至專案記憶體。
快速參考
| 情境 | 動作 |
|---|---|
| 指令/操作失敗 | 記錄至 .learnings/ERRORS.md |
| 使用者糾正你 | 記錄至 .learnings/LEARNINGS.md,類別設為 correction |
| 使用者想要缺少的功能 | 記錄至 .learnings/FEATURE_REQUESTS.md |
| API/外部工具失敗 | 記錄至 .learnings/ERRORS.md,並附上整合細節 |
| 知識已過時 | 記錄至 .learnings/LEARNINGS.md,類別設為 knowledge_gap |
| 發現更好的方法 | 記錄至 .learnings/LEARNINGS.md,類別設為 best_practice |
| 與現有條目相似 | 以「另請參閱」連結,考慮提升優先級 |
| 普遍適用的學習 | 提升至 CLAUDE.md、AGENTS.md 及/或 .github/copilot-instructions.md |
| 工作流程改進 | 提升至 AGENTS.md(OpenClaw 工作區) |
| 工具使用陷阱 | 提升至 TOOLS.md(OpenClaw 工作區) |
| 行為模式 | 提升至 SOUL.md(OpenClaw 工作區) |
OpenClaw 設定(建議)
OpenClaw 是此技能的主要平台。它使用基於工作區的提示注入,並自動載入技能。
安裝
透過 ClawdHub(建議):
clawdhub install self-improving-agent
手動安裝:
git clone https://github.com/peterskoett/self-improving-agent.git ~/.openclaw/skills/self-improving-agent
工作區結構
OpenClaw 會將這些檔案注入每個工作階段:
~/.openclaw/workspace/
├── AGENTS.md # 多代理工作流程、委派模式
├── SOUL.md # 行為指南、個性、原則
├── TOOLS.md # 工具能力、整合陷阱
├── MEMORY.md # 長期記憶(僅限主要工作階段)
├── memory/ # 每日記憶檔案
│ └── YYYY-MM-DD.md
└── .learnings/ # 此技能的日誌檔案
├── LEARNINGS.md
├── ERRORS.md
└── FEATURE_REQUESTS.md
建立學習檔案
mkdir -p ~/.openclaw/workspace/.learnings
然後建立日誌檔案(或從 assets/ 複製):
LEARNINGS.md— 修正、知識差距、最佳實務ERRORS.md— 指令失敗、例外FEATURE_REQUESTS.md— 使用者請求的功能
推廣目標
當學習被證明具有普遍適用性時,將其推廣至工作區檔案:
| 學習類型 | 推廣至 | 範例 |
|---|---|---|
| 行為模式 | SOUL.md | 「保持簡潔,避免免責聲明」 |
| 工作流程改進 | AGENTS.md | 「為長時間任務生成子代理」 |
| 工具使用陷阱 | TOOLS.md | 「Git push 需要先設定驗證」 |
跨工作階段通訊
OpenClaw 提供用於跨工作階段共享學習的工具:
- sessions_list — 檢視作用中/近期的工作階段
- sessions_history — 讀取其他工作階段的對話記錄
- sessions_send — 將學習發送到另一個工作階段
- sessions_spawn — 產生子代理以執行背景工作
可選:啟用鉤子
為了在工作階段開始時獲得自動提醒:
# 將鉤子複製到 OpenClaw 鉤子目錄
cp -r hooks/openclaw ~/.openclaw/hooks/self-improvement
# 啟用它
openclaw hooks enable self-improvement
查看 references/openclaw-integration.md 以獲得完整細節。
通用設定(其他代理)
對於 Claude Code、Codex、Copilot 或其他代理,請在專案中建立 .learnings/ 目錄:
mkdir -p .learnings
從 assets/ 複製範本或自行建立含標頭的檔案。
日誌格式
學習條目
附加至 .learnings/LEARNINGS.md:
## [LRN-YYYYMMDD-XXX] 類別
**記錄時間**:ISO-8601 時間戳記
**優先級**:低 | 中 | 高 | 緊急
**狀態**:待處理
**區域**:前端 | 後端 | 基礎設施 | 測試 | 文件 | 設定
### 摘要
學到內容的一行描述
### 詳細資訊
完整背景:發生了什麼、出了什麼錯、正確的是什麼
### 建議行動
要進行的具體修正或改進
### 中繼資料
- 來源:對話 | 錯誤 | 使用者回饋
- 相關檔案:path/to/file.ext
- 標籤:tag1, tag2
- 另請參閱:LRN-20250110-001(如果與現有條目相關)
---
錯誤條目
附加至 .learnings/ERRORS.md:
## [ERR-YYYYMMDD-XXX] 技能或指令名稱
**記錄時間**:ISO-8601 時間戳記
**優先級**:高
**狀態**:待處理
**區域**:前端 | 後端 | 基礎設施 | 測試 | 文件 | 設定
### 摘要
簡短描述什麼失敗了
### 錯誤
實際的錯誤訊息或輸出
### 背景
- 嘗試的指令/操作
- 使用的輸入或參數
- 相關的環境詳細資訊
### 建議修正
如果可以確定,可能會解決此問題的方法
### 中繼資料
- 可重現:是 | 否 | 未知
- 相關檔案:path/to/file.ext
- 另請參閱:ERR-20250110-001(如果是重複發生)
---
功能請求條目
附加至 .learnings/FEATURE_REQUESTS.md:
## [FEAT-YYYYMMDD-XXX] 功能名稱
**記錄時間**:ISO-8601 時間戳記
**優先級**:中
**狀態**:待處理
**區域**:前端 | 後端 | 基礎設施 | 測試 | 文件 | 設定
### 請求的功能
使用者想要做什麼
### 使用者背景
他們為什麼需要它,他們在解決什麼問題
### 複雜度估計
簡單 | 中等 | 複雜
### 建議實作方式
如何構建此功能,它可能擴展什麼
### 中繼資料
- 頻率:首次 | 重複
- 相關功能:現有功能名稱
---
ID 產生
格式:TYPE-YYYYMMDD-XXX
- TYPE:
LRN(學習)、ERR(錯誤)、FEAT(功能) - YYYYMMDD:當前日期
- XXX:序號或隨機 3 個字元(例如
001、A7B)
範例:LRN-20250115-001、ERR-20250115-A3F、FEAT-20250115-002
解決條目
當問題被修正時,更新條目:
- 將
**狀態**:待處理更改為**狀態**:已解決 - 在中繼資料後新增解決方案區塊:
### 解決方案
- **解決時間**:2025-01-16T09:00:00Z
- **提交/PR**:abc123 或 #42
- **備註**:已完成操作的簡短描述
其他狀態值:
進行中- 正在積極處理中不予修復- 決定不處理(在解決方案備註中新增原因)已推廣- 提升至 CLAUDE.md、AGENTS.md 或 .github/copilot-instructions.md
推廣至專案記憶體
當一個學習具有普遍適用性(非一次性修正)時,將其推廣至永久專案記憶體。
何時推廣
- 學習內容適用於多個檔案/功能
- 任何貢獻者(人類或 AI)都應知道的知識
- 能防止重複性錯誤
- 記錄了專案特定的慣例
推廣目標
| 目標 | 應包含的內容 |
|---|---|
CLAUDE.md | 專案事實、慣例、所有 Claude 互動的陷阱 |
AGENTS.md | 代理特定工作流程、工具使用模式、自動化規則 |
.github/copilot-instructions.md | 供 GitHub Copilot 使用的專案背景與慣例 |
SOUL.md | 行為指南、溝通風格、原則(OpenClaw 工作區) |
TOOLS.md | 工具能力、使用模式、整合陷阱(OpenClaw 工作區) |
如何推廣
- 提煉 學習內容為簡潔的規則或事實
- 新增 至目標檔案的適當區段(如果檔案不存在則建立)
- 更新 原始條目:
- 將
**狀態**:待處理更改為**狀態**:已推廣 - 新增
**推廣至**:CLAUDE.md、AGENTS.md或.github/copilot-instructions.md
- 將
推廣範例
學習(冗長):
專案使用 pnpm 工作區。嘗試
npm install但失敗了。 鎖定檔案是pnpm-lock.yaml。必須使用pnpm install。
在 CLAUDE.md 中(簡潔):
## 建置與相依性
- 套件管理器:pnpm(非 npm)- 請使用 `pnpm install`
學習(冗長):
當修改 API 端點時,必須重新產生 TypeScript 客戶端。 忘記此步驟會導致執行時期型別不符。
在 AGENTS.md 中(可操作):
## API 變更後
1. 重新產生客戶端:`pnpm run generate:api`
2. 檢查型別錯誤:`pnpm tsc --noEmit`
重複模式偵測
如果記錄的內容與現有條目類似:
- 優先搜尋:
grep -r "關鍵字" .learnings/ - 連結條目:在中繼資料中新增
**另請參閱**:ERR-20250110-001 - 提升優先級(如果問題持續重複發生)
- 考慮系統性修正:重複發生的問題通常表示:
- 缺少文件(→ 推廣至 CLAUDE.md 或 .github/copilot-instructions.md)
- 缺少自動化(→ 新增至 AGENTS.md)
- 架構性問題(→ 建立技術債票證)
定期審查
在自然的休息點審查 .learnings/ 目錄:
何時審查
- 開始新的主要任務之前
- 完成一個功能之後
- 在過去有學習記錄的區域工作時
- 活躍開發期間每週一次
快速狀態檢查
# 計算待處理項目數量
grep -h "Status\*\*:待處理" .learnings/*.md | wc -l
# 列出高優先級待處理項目
grep -B5 "Priority\*\*:高" .learnings/*.md | grep "^## \["
# 尋找特定區域的學習
grep -l "Area\*\*:後端" .learnings/*.md
審查行動
- 解決已修正的項目
- 推廣適用的學習
- 連結相關條目
- 升級重複問題
觸發偵測
當你注意到以下情況時,自動記錄:
修正(→ 類別為 correction 的學習):
- 「不,那不是正確的...」
- 「實際上,應該是...」
- 「你關於...的說法是錯的」
- 「那已經過時了...」
功能請求(→ 功能請求條目):
- 「你可以也...」
- 「我希望你能...」
- 「有沒有辦法...」
- 「為什麼你不能...」
知識差距(→ 類別為 knowledge_gap 的學習):
- 使用者提供你不知道的資訊
- 你參考的文件已過時
- API 行為與你的認知不同
錯誤(→ 錯誤條目):
- 指令返回非零退出碼
- 例外或堆疊追蹤
- 非預期的輸出或行為
- 逾時或連線失敗
優先級指南
| 優先級 | 何時使用 |
|---|---|
緊急 | 阻礙核心功能、資料遺失風險、安全性問題 |
高 | 顯著影響、影響常見工作流程、重複發生的問題 |
中 | 中等影響、有替代解決方案 |
低 | 輕微不便、邊緣情況、錦上添花 |
區域標籤
用於依程式碼庫區域過濾學習:
| 區域 | 範圍 |
|---|---|
前端 | 使用者介面、元件、客戶端程式碼 |
後端 | API、服務、伺服器端程式碼 |
基礎設施 | CI/CD、部署、Docker、雲端 |
測試 | 測試檔案、測試工具、覆蓋率 |
文件 | 文件、註解、README |
設定 | 設定檔案、環境、設定 |
最佳實務
- 立即記錄 - 問題發生後背景資訊最新鮮
- 具體明確 - 未來的代理需要快速理解
- 包含重現步驟 - 特別是針對錯誤
- 連結相關檔案 - 讓修正更容易
- 建議具體修正 - 而不僅僅是「調查」
- 使用一致的類別 - 便於過濾
- 積極推廣 - 如有疑慮,就新增至 CLAUDE.md 或 .github/copilot-instructions.md
- 定期審查 - 老舊的學習會失去價值
Gitignore 選項
將學習保留在本機(每位開發者):
.learnings/
在儲存庫中追蹤學習(團隊共用): 不要新增至 .gitignore - 學習將成為共享知識。
混合模式(追蹤範本,忽略條目):
.learnings/*.md
!.learnings/.gitkeep
鉤子整合
透過代理鉤子啟用自動提醒。這需要 主動選擇 - 你必須明確設定鉤子。
快速設定(Claude Code / Codex)
在專案中建立 .claude/settings.json:
{
"hooks": {
"UserPromptSubmit": [{
"matcher": "",
"hooks": [{
"type": "command",
"command": "./skills/self-improvement/scripts/activator.sh"
}]
}]
}
}
這會在使用者每次提交提示後注入學習評估提醒(約 50-100 tokens 開銷)。
完整設定(包含錯誤偵測)
{
"hooks": {
"UserPromptSubmit": [{
"matcher": "",
"hooks": [{
"type": "command",
"command": "./skills/self-improvement/scripts/activator.sh"
}]
}],
"PostToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "./skills/self-improvement/scripts/error-detector.sh"
}]
}]
}
}
可用的鉤子腳本
| 腳本 | 鉤子類型 | 用途 |
|---|---|---|
scripts/activator.sh | UserPromptSubmit | 提醒在任務後評估學習 |
scripts/error-detector.sh | PostToolUse (Bash) | 在指令錯誤時觸發 |
查看 references/hooks-setup.md 以獲得詳細設定與故障排除。
自動技能提取
當一個學習足夠有價值而能成為可重複使用的技能時,使用提供的輔助工具將其提取出來。
技能提取條件
當以下任何條件適用時,學習就符合技能提取資格:
| 條件 | 描述 |
|---|---|
| 重複發生 | 有 2 個以上類似問題的「另請參閱」連結 |
| 已驗證 | 狀態為「已解決」且有可用的修正 |
| 非顯而易見 | 需要實際除錯/調查才能發現 |
| 廣泛適用 | 非專案特定;可在多個程式碼庫中使用 |
| 使用者標記 | 使用者說「將此儲存為技能」或類似內容 |
提取工作流程
- 識別候選:學習符合提取條件
- 執行輔助工具(或手動建立):
./skills/self-improvement/scripts/extract-skill.sh skill-name --dry-run ./skills/self-improvement/scripts/extract-skill.sh skill-name - 自訂 SKILL.md:用學習內容填寫範本
- 更新學習:將狀態設為
promoted_to_skill,新增Skill-Path - 驗證:在新的工作階段中閱讀技能,確保其是自包含的
手動提取
如果你偏好手動
…
[因長度截斷]