增強作者個人檔案
此技能透過網路研究,補全作者個人檔案中缺失的欄位(簡介、頭像、網站、社交媒體)。
工作流程概覽
階段 1:作者識別
└─ 尋找並驗證作者檔案
階段 2:並行研究(僅針對缺失欄位)
├─ 網路搜尋代理 1:簡介/背景
├─ 網路搜尋代理 2:頭像網址
└─ 網路搜尋代理 3:網站 + 社交媒體
階段 3:使用者審查(強制閘門)
└─ 展示發現結果,等待批准
階段 4:儲存增強後的作者資料
└─ 更新 frontmatter 欄位
階段 5:品質檢查
└─ 執行 pnpm lint:fix && pnpm typecheck
階段 1:作者識別
1.1 尋找作者檔案
接受作者 slug、名稱或部分名稱作為參數:
- 先嘗試精確 slug 比對:檢查
content/authors/{slug}.md是否存在(將空格轉換為連字號,轉為小寫) - 若無精確比對:使用 Grep 在作者檔案中搜尋名稱:
Grep 模式:"name:.*{搜尋詞}" 搭配 glob:"content/authors/*.md"
結果:
- 單一比對 → 使用該檔案
- 多個比對 → 列出選項供使用者選擇
- 無比對 → 列出可用的作者
1.2 識別缺失欄位
讀取作者檔案,檢查哪些欄位缺失或為空:
必要欄位(始終存在):
nameslug
可增強的選填欄位:
bio- 專業背景與專長avatar- 個人頭像網址website- 個人網站網址socials.twitter- Twitter/X 帳號socials.github- GitHub 用戶名socials.linkedin- LinkedIn 用戶名socials.youtube- YouTube 頻道
如果欄位符合以下情況,則視為「缺失」:
- 不存在於 frontmatter 中
- 存在但為空(
""或null)
如果所有欄位都已填寫,通知使用者,並提供更新特定欄位的選項。
階段 2:並行研究
根據缺失的欄位,並行啟動最多 3 個網路搜尋代理:
**代理 1 - 簡介/背景:**
使用 subagent_type: "general-purpose" 的任務工具
提示詞:"使用 WebSearch 尋找 [作者名稱] 的專業背景資訊。
查詢:'[作者名稱]' bio background expertise
提取:職稱、公司、專業領域、知名專案。
回傳:一段 1-2 句話的專業簡介。"
**代理 2 - 頭像網址:**
使用 subagent_type: "general-purpose" 的任務工具
提示詞:"使用 WebSearch 尋找 [作者名稱] 的個人頭像網址。
查詢:'[作者名稱]' site:github.com OR site:twitter.com
提取:GitHub 用戶名或 Twitter 帳號以建構頭像網址。
回傳:頭像網址(優先使用 GitHub 格式:https://github.com/{username}.png)"
**代理 3 - 網站與社交媒體:**
使用 subagent_type: "general-purpose" 的任務工具
提示詞:"使用 WebSearch 尋找 [作者名稱] 的社交媒體個人資料。
查詢:'[作者名稱]' twitter github linkedin youtube
提取:個人網站、Twitter 帳號、GitHub 用戶名、LinkedIn 個人檔案、YouTube 頻道。
回傳:找到的個人檔案清單,包含網址/帳號。"
僅為缺失的欄位啟動代理。如果簡介已存在,則跳過代理 1。
透過 TaskOutput 收集所有結果(阻塞式)。
階段 3:使用者審查(強制閘門)
這是強制性的批准步驟。 在儲存前展示提議的變更。
3.1 展示變更
以比較表格顯示提議的更新:
## [作者名稱] 的提議更新
| 欄位 | 目前值 | 提議值 |
|-------|---------|----------|
| bio | (空) | "X 創辦人,Y 的創作者..." |
| avatar | (空) | "https://github.com/username.png" |
| website | (空) | "https://example.com" |
| socials.twitter | (空) | "username" |
| socials.github | (空) | "username" |
| socials.linkedin | (空) | "username" |
| socials.youtube | (空) | (未找到) |
3.2 請求批准
使用 AskUserQuestion 工具:
question: "儲存這些變更到作者個人檔案?"
header: "審查"
multiSelect: false
options:
- label: "儲存"
description: "使用這些值更新作者檔案"
- label: "編輯"
description: "告訴我要更改什麼"
- label: "取消"
description: "不要修改檔案"
3.3 處理回應
- 儲存:進入階段 4
- 編輯:套用使用者回饋,顯示更新後的預覽
- 取消:不進行任何變更即退出
在沒有使用者明確批准前,請勿進入階段 4。
階段 4:儲存增強後的作者資料
4.1 更新 Frontmatter
使用編輯工具,僅更新已批准的欄位:
修改前:
---
name: "John Doe"
slug: "john-doe"
bio: ""
avatar: ""
website: ""
socials:
twitter: ""
github: ""
linkedin: ""
youtube: ""
---
修改後:
---
name: "John Doe"
slug: "john-doe"
bio: "專注於分散式系統的軟體工程師..."
avatar: "https://github.com/johndoe.png"
website: "https://johndoe.dev"
socials:
twitter: "johndoe"
github: "johndoe"
linkedin: "johndoe"
youtube: ""
---
4.2 保留現有值
關鍵: 除非明確要求,否則絕不覆蓋現有的非空值:
- 保持現有的
name和slug不變 - 僅更新為空/缺失的欄位
- 保留任何其他自訂欄位
4.3 確認
向使用者回報:
已更新:content/authors/{slug}.md
- bio:已新增
- avatar:已新增
- website:已新增
- socials.twitter:已新增
- socials.github:已新增
階段 5:品質檢查
執行 linter 和型別檢查以發現任何問題:
pnpm lint:fix && pnpm typecheck
如果發現錯誤,請在完成任務前修復它們。
錯誤恢復
| 錯誤 | 恢復方式 |
|---|---|
| 找不到作者 | 列出 content/authors/ 中的可用作者 |
| 沒有缺失欄位 | 通知使用者,提供更新特定欄位的選項 |
| WebSearch 失敗 | 嘗試其他查詢模式 |
| 使用者拒絕變更 | 允許編輯或取消 |
| 找不到資訊 | 將欄位標記為「(未找到)」,繼續處理其他欄位 |
品質檢查清單
儲存前,請確認:
- 作者檔案存在於
content/authors/中 - 僅更新為空/缺失的欄位
- 簡介為 1-2 句話,語氣專業
- 頭像網址有效(優先使用 GitHub 格式)
- 社交媒體帳號僅為用戶名(非網址)
- 現有的非空值已保留
- 使用者已明確批准變更