补充作者档案 是做什么的?
该技能通过网络研究,自动填补作者简介资料中缺失的字段(简介、头像、网站、社交媒体)。
工作流程概览
阶段 1:作者身份识别
└─ 查找并验证作者文件
阶段 2:并行研究(仅针对缺失字段)
├─ 网络搜索代理 1:简介/背景
├─ 网络搜索代理 2:头像 URL
└─ 网络搜索代理 3:网站 + 社交媒体
阶段 3:用户审核(阻塞关卡)
└─ 呈现发现结果,等待批准
阶段 4:保存增强后的作者信息
└─ 更新前置元数据字段
阶段 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- 头像图片的 URLwebsite- 个人网站 URLsocials.twitter- Twitter/X 账号socials.github- GitHub 用户名socials.linkedin- LinkedIn 用户名socials.youtube- YouTube 频道
如果一个字段符合以下任一情况,则视为“缺失”:
- 未出现在前置元数据中
- 存在但为空(
""或null)
如果所有字段都已填充,则告知用户,并提供更新特定字段的选项。
阶段 2:并行研究
根据缺失的字段,最多同时启动 3 个网络搜索代理:
**代理 1 - 简介/背景:**
Task 工具,subagent_type:"general-purpose"
prompt:"使用 WebSearch 查找 [作者名称] 的专业背景信息。
查询:'[作者名称]' bio background expertise
提取:职位、公司、专长领域、知名项目。
返回:1-2句的专业简介。"
**代理 2 - 头像 URL:**
Task 工具,subagent_type:"general-purpose"
prompt:"使用 WebSearch 为 [作者名称] 查找头像图片 URL。
查询:'[作者名称]' site:github.com OR site:twitter.com
提取:GitHub 用户名或 Twitter 账号以构建头像 URL。
返回:头像 URL(优先使用 GitHub 格式:https://github.com/{username}.png)"
**代理 3 - 网站和社交媒体:**
Task 工具,subagent_type:"general-purpose"
prompt:"使用 WebSearch 查找 [作者名称] 的社交媒体资料。
查询:'[作者名称]' twitter github linkedin youtube
提取:个人网站、Twitter 账号、GitHub 用户名、LinkedIn 资料、YouTube 频道。
返回:找到的资料列表,包括 URL/账号。"
仅为缺失的字段启动代理。如果简介已存在,则跳过代理 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 更新前置元数据
使用编辑工具,仅更新已批准的字段:
修改前:
---
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/ 下的可用作者 |
| 无缺失字段 | 告知用户,提供更新特定字段的选项 |
| 网络搜索失败 | 尝试其他查询模式 |
| 用户拒绝更改 | 允许编辑或取消 |
| 未能找到信息 | 将该字段标记为“(未找到)”,继续处理其他字段 |
质量检查清单
在保存之前,请验证:
- 作者文件存在于
content/authors/下 - 仅更新空/缺失的字段
- 简介为 1-2 句话,语气专业
- 头像 URL 有效(优先使用 GitHub 格式)
- 社交账号仅包含用户名(不含 URL)
- 保留现有的非空值
- 用户已明确批准更改