引言
在使用 AI Agent 时,一个常见需求是让 AI 扮演特定角色:代码审查员、技术文档写作者、测试工程师等。但如何让 AI 准确理解这个角色的行为边界?直接写出详细指令成本高,且容易遗漏关键约束。
recruit-skill 采用另一种路径:通过迭代式深度询问,让 AI 逐步理解并构建用户期望的人格画像。
设计历程
版本演变
| 版本 | 行数 | 说明 |
|---|---|---|
| v1 | 214 行 | 完整流程图、多表格、详细说明 |
| v2 | 17 行 | 精简到核心指令 |
| v3 | 16 行 | 移除冗余约束 |
从 v1 到 v3,核心变化:
- 角色优先:从预设维度(如"技术栈"、"代码风格")改为先问"什么角色"
- 终止条件:从"覆盖所有维度"改为"AI 判断 + 用户确认"
- 格式精简:参考 grill-me(11 行)极简风格,删除 DOT 图、表格
设计决策
| 决策 | 理由 |
|---|---|
| 不预设固定维度 | 不同角色需要不同维度,由 LLM 动态判断 |
| 不预设终止条件 | AI 判断足够后需用户确认,非单方面结束 |
| 不强制读取记忆 | 选择权交给用户,避免历史污染 |
| 极简指令格式 | 只给核心行为约束,避免过度指导 |
核心逻辑
完整的 SKILL.md:
---
name: recruit
description: Build agent persona through iterative questioning.
---
Build the user's desired agent persona by asking questions one at a time:
1. Explore existing context (memory files, CLAUDE.md, project structure)
2. Ask: what role to define?
3. Ask role-specific dimension questions.
When you believe info is sufficient, present summary for confirmation.
4. Summarize persona, confirm write path or keep as session context
Constraints:
- No assumptions. Ask if uncertain.
- Do NOT write without user confirmation.16 行,无流程图,无预设维度表。
核心特性
| 特性 | 说明 |
|---|---|
| 角色优先 | 先问角色类型,再决定询问维度 |
| 一问一答 | 每次只问一个问题,逐层深入 |
| 语言自适应 | 输出语言自动匹配用户交互语言 |
| 写入需确认 | 任何文件写入必须用户明确确认 |
为什么"一问一答"
一次性抛出多问题,用户回答容易遗漏。逐个询问可确保每个维度都被充分探索。
为什么"语言自适应"
用户可能用中文或英文交互。Skill 不应强制输出语言,而应匹配用户的自然表达。
使用方式
# 安装
cp -r skills/recruit ~/.claude/skills/
# 触发
/recruit典型对话流程:
AI: 你想定义什么角色?
用户: 代码审查员
AI: 代码审查员应该关注哪些方面?
用户: 性能、安全、可维护性
AI: 性能方面,是否有特定的阈值或指标?
用户: 响应时间超过 200ms 算问题
...
AI: 我已收集足够信息,以下是人格摘要:
- 角色:代码审查员
- 关注点:性能、安全、可维护性
- 性能阈值:响应时间 < 200ms
- 输出格式:Markdown 检查清单
是否确认?
用户: 确认,写入 .claude/reviewer.md
对比其他方案
| 方案 | 优点 | 缺点 |
|---|---|---|
| 手写指令 | 完全控制 | 成本高、易遗漏 |
| 预设模板 | 快速启动 | 不适配特殊需求 |
| recruit-skill | 灵活、完整 | 需要对话时间 |
recruit-skill 的价值在于:通过对话过程,确保人格定义的完整性,同时保留用户对最终输出的控制权。
后续方向
- 接入 SuperHarness 项目
- 收集用户反馈迭代
- 多语言输出测试