你要给 agent 添加"代码审查"能力。做成 Tool、Skill 还是 CLI?决策依据是什么?
考察点:考能力分层的核心判断框架。面试官想看你是否理解三者的本质差异,而不只是"都能实现"。
7+ 分回答骨架:代码审查需要组合多种能力(读文件、理解语义、应用最佳实践、生成建议),不是原子操作 → 不适合做单一 Tool。审查标准需要上下文判断(不同语言、框架、团队规范不同)→ 需要模型智能决策 → 适合 Skill。但底层需要调用 CLI 工具(eslint、pylint、git diff)做静态检查 → Skill 编排 CLI。最终方案:Skill(审查流程 + 最佳实践)+ CLI(静态检查工具)+ Tool(git diff API 封装)。决策矩阵:原子操作 → Tool;流程方法论 → Skill;已有成熟工具 → CLI;复杂场景三者组合。
继续追问会衍生:衍生知识点:atomicity criterion、composition pattern、capability boundary、hybrid design。
知识展开
| 概念 | 是什么 | 工程落点 | 面试表达 / 常见坑 |
|---|---|---|---|
| atomicity criterion | 原子性判断标准:如果一个能力是单一动作、输入输出明确、需要确定性执行、返回结构化数据,适合做成 Tool。如果是多步骤流程、需要上下文判断、组合现有工具,适合做成 Skill。 | Read/Write/Edit 是 Tool(原子文件操作);TDD/Debugging/Code Review 是 Skill(流程方法论)。 | 面试表达:不是"能不能做成 tool"的问题,而是"做成 tool 是否合理"的问题。审查逻辑做成 tool 会丧失灵活性。 |
| composition pattern | 组合模式是 Skill 编排 Tool 和 CLI 完成复杂任务,而不是把所有逻辑塞进一个 tool。 | Skill 定义审查流程和检查项 → 调用 Read tool 读文件 → 调用 Bash 执行 eslint → 模型综合判断 → 输出审查意见。 | 强回答要说"Skill 是编排层,Tool 和 CLI 是执行层,两者职责不同"。 |
| capability boundary | 能力边界是判断一个功能属于哪一层的具体标准。Tool 边界是"一次调用、一个动作";Skill 边界是"一个完整工作流";CLI 边界是"已有成熟工具"。 | 新增能力时先问:这是原子操作吗?需要模型判断吗?有现成工具吗?三个问题决定归属层。 | 常见坑是把所有能力都做成 Tool(丧失灵活性)或都做成 Skill(丧失确定性)。 |