Claude Code(五)斜杠命令:从”对话框”到”控制台”的效率提升
深入解析 Claude Code 的斜杠命令(Slash Commands)。探索如何通过结构化指令减少自然语言的模糊性,精准控制 Token 消耗、会话状态与系统配置,将 AI Agent 转化为高效的终端工具。
在前几章中,我探讨了 Claude Code 的配置与Hooks 机制。如果说 Hooks 是 AI 的”神经系统”,那么 斜杠命令(Slash Commands) 就是它的”控制面板”。
虽然我习惯用自然语言与 AI 交流,但在 CLI(命令行界面)环境中,效率往往来自于确定性和简洁性。斜杠命令既包括 Claude Code 内置的系统命令,也包括我可以自定义的项目命令和个人命令。它们正是连接”自然对话”与”精准操作”的桥梁。
Background / Problem:为什么需要斜杠命令?
我曾经问自己:”我直接跟 Claude 说’清理会话’不就行了吗?”
虽然自然语言非常灵活,但在以下场景中,我发现斜杠命令具有不可替代的优势:
- 原子操作(Atomicity):斜杠命令是由终端程序(Claude Code Client)直接解析的,不经过 LLM 处理(针对内置命令)。这意味着它响应快,且成功率高,无需等待 AI 推理。
- Token 消耗控制(Token Control):当我发送
/compact时,我不需要写一段长长的指令解释为什么要压缩上下文,从而节省了输入 Token。 - 状态隔离(State Isolation):某些操作(如
/login或/config)涉及系统敏感信息,不应该作为上下文喂给 AI。 - 工作流自动化(Workflow Automation):自定义命令可以编码复杂的多步骤操作,提升重复性任务的效率。
- 跨项目一致性(Consistency):项目命令(
.claude/commands/)可被团队共享,确保标准化的开发流程。
核心哲学: 我将管理权留给斜杠命令,将创造权留给自然语言。
Deep Analysis:斜杠命令的执行机制
理解斜杠命令在系统中的位置,有助于我更好地使用它。斜杠命令不仅仅是文本替换,它是一个本地路由机制。
执行流全景图
graph TD
A[用户输入] --> B{输入路由层}
B -- 以 / 开头 --> C{命令解析器}
B -- 普通文本 --> D[LLM 推理引擎]
C -- 内置系统命令 --> E[本地执行环境]
C -- 自定义命令 --> F[命令加载器]
E -- "/compact" --> G[Context Manager: 压缩历史]
E -- "/config" --> H[Config Manager: 读写配置]
F --> I{元数据解析}
I -- disable-model-invocation: true --> J[本地工具执行器]
I -- 默认模式 --> K[Prompt 组装器]
K --> L[注入 System Prompt & Context]
L --> D
G --> M[CLI 界面反馈]
H --> M
J --> M
D --> N[生成 Tool Calls / 文本回复]
N --> M
关键技术点解析:
本地路由(Local Routing): 内置命令(如
/clear,/cost)在本地被拦截和执行。这避免了网络往返延迟(RTT),操作体验接近原生 Shell 命令。上下文无污染(Context Hygiene): 许多内置命令执行后,不会在 AI 的上下文窗口中留下痕迹(或者只留下精简的结果)。这对于维持 Agent 的专注力很重要。
混合执行模式(Hybrid Execution): 自定义命令非常灵活。我可以通过设置
disable-model-invocation: true让它变成一个纯粹的 Bash 脚本封装器(不消耗 LLM Token),或者让它携带 Prompt 进入 LLM 进行智能处理。
Core Principles:核心命令全景图
内置系统命令(Built-in Commands)
这些命令由 Claude Code 直接提供,开箱即用。
会话控制类
/clear:- 作用:彻底清空当前会话的对话历史,回到初始状态。
- 注意:这会擦除 AI 对当前任务的所有短期记忆,但不会删除物理文件。
/compact [instructions]:- 作用:智能压缩会话历史。它会总结之前的对话,只保留关键信息和文件变更摘要。
- 场景:当感觉 Claude 开始变得反应迟钝,或者收到”Context window near limit”警告时使用。
/rewind:- 作用:回退到之前的会话状态,同时可选地恢复代码更改。
代码审查与开发
/review:- 作用:请求 Claude 对当前代码或最近的更改进行代码审查。
- 关注点:自动分析代码质量、最佳实践、潜在问题。
上下文与成本追踪
/context:- 作用:可视化当前会话的上下文使用情况,显示各部分(对话、文件、工具调用)对 Token 的占用。
/cost:- 作用:显示当前会话的 Token 消耗统计。
- 场景:当我需要评估一个重构任务的成本,或者优化自己的 Prompt 策略时。
配置与系统
/config:查看或修改全局配置。/model:切换 AI 模型(如 Haiku/Sonnet/Opus)。/init:初始化.claude环境。
Practical Implementation:自定义命令实战
除了内置命令,Claude Code 真正的威力在于自定义命令。通过定义 Markdown 文件,我可以将特定的 Prompt 工程固化为可复用的工具。
基础结构
自定义命令存储在 .claude/commands/(项目级)或 ~/.claude/commands/(用户级)。
1
2
3
4
5
6
7
8
---
description: 命令描述
argument-hint: [参数提示]
allowed-tools: Bash(git add:*), Bash(git commit:*) # 权限控制
model: claude-3-5-sonnet-20241022 # 指定模型
---
这里是具体的 Prompt 内容。可以使用 $1, $2 引用参数,或者使用 `@filename` 引用文件。
场景 1:Git Workflow 自动化 (/create-pr)
创建 .claude/commands/create-pr.md:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
---
description: Create a pull request with automatic commits
argument-hint: [branch-name] [title]
allowed-tools: Bash(git add:*), Bash(git commit:*), Bash(git push:*)
---
## 任务
基于当前的代码变更创建 PR。
## 步骤
1. 分析 @. 中所有修改过的文件
2. 将相关更改按逻辑分组(特性、组件、关注点)
3. 为每个逻辑单元创建独立的 commit(遵循 Conventional Commits)
4. 推送分支到远程
5. 生成 PR 摘要
## PR 摘要格式
```text
## 功能描述
<简要说明>
## 关键变更
- <列表>
## 测试计划
- [ ] <测试项>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
### 场景 2:代码质量卫士 (`/lint-custom`)
创建 `.claude/commands/lint-custom.md`:
```markdown
---
description: Check code against project standards
argument-hint: [file-path]
---
检查 @$1 是否符合项目编码规范:
### 检查清单
- [ ] **命名规范**:变量驼峰,类名帕斯卡
- [ ] **函数复杂度**:圈复杂度 < 10
- [ ] **错误处理**:避免空的 catch 块
- [ ] **类型安全**:TypeScript 避免使用 any
输出具体的违规实例和改进后的代码片段。
场景 3:游戏开发资产管线 (/process-asset)
Game Dev Context: 游戏开发中常涉及繁琐的资源导入设置或格式转换。我们可以用命令简化这一流程。
创建 .claude/commands/process-asset.md:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
---
description: Pre-process game assets for Unity/Unreal
argument-hint: [asset-path] [target-platform]
allowed-tools: Bash(magick:*), Bash(ffmpeg:*)
model: claude-3-5-haiku-20241022
---
## 资产预处理任务
你是一个技术美术(TA)助手。请处理位于 @$1 的资源文件,目标平台为 $2。
### 处理逻辑
1. **如果是图片 (.png, .tga)**:
- 检查分辨率是否为 2 的幂次(POT)。如果不是,调整为最近的 POT。
- 如果目标是 Mobile,转换为 ASTC 友好的格式(去除 Alpha 通道如果未使用)。
- 使用 ImageMagick 执行操作。
2. **如果是音频 (.wav)**:
- 转换为 44.1kHz, 16-bit Mono (对于语音) 或 Stereo (对于 BGM)。
- 使用 FFmpeg 执行。
3. **生成 .meta 建议**:
- 如果是 Unity 项目,分析对应的 `.meta` 文件设置是否合理(如压缩算法)。
请先输出分析结果,再执行转换命令。
Advanced Topics:高级技巧与 FAQ
1. 快捷键与别名
在 .zshrc 或 .bashrc 中,我可以结合 echo 管道来创建系统级快捷键:
1
2
# 快速查看开销
alias ccost="echo '/cost' | claude"
2. 区分 Slash Commands 与 Agent Skills
这是很多开发者的困惑点,两者看似相似,实则定位不同:
| 特性 | Slash Commands (斜杠命令) | Agent Skills (技能) |
|---|---|---|
| 定位 | 快速指令,单次交互为主 | 复杂能力,包含逻辑、知识库和多步工具调用 |
| 触发方式 | 用户显式输入 /command | AI 根据上下文自动决策调用,或通过命令触发 |
| 文件结构 | 单个 Markdown 文件 | 包含 SKILL.md、脚本、参考文档的目录结构 |
| 复杂度 | 适合原子操作(Git 提交、Lint 检查) | 适合复杂工作流(编写整个模块、重构遗留系统) |
结论:我通常用 Slash Command 封装高频的、简单的动作;用 Agent Skills 封装复杂的、需要领域知识的业务逻辑。
FAQ
Q: 自定义命令可以调用其他命令吗? A: 目前不支持直接嵌套调用(如在命令 A 中写 /command-b)。但我可以通过 Prompt 指引 AI 去按顺序执行一系列逻辑。
Q: 如何在命令中嵌入动态的系统信息? A: 使用 Bash 插值。例如在命令文件中写:当前 Git 分支状态:!git status(注意:这是 Markdown 里的 Bash 块执行结果,或者使用反引号插值取决于具体实现版本)。Claude Code 的命令解析器通常会将 `git status` 的输出注入到 Prompt 中。
结语
斜杠命令将 Claude Code 从一个”对话式 AI”转变为一个”高效的终端工具”。
- 内置命令 让我掌控全局(Session 管理、Cost 控制)。
- 自定义命令 让我将个人经验固化为工具(Prompt as Code)。
熟练掌握这些短指令,能让我在编码过程中保持专注,而不必纠结于如何措辞才能让 AI 明白我的管理意图。当我的需求超越了简单的命令,需要更复杂的逻辑判断和多工具协同运作时,我就需要下一章介绍的更强大的工具——Agent Skills。
下一篇预告:Claude Code(六)AgentSkills:AI 技能系统实践详解 - 学习如何构建包含脚本、文档和复杂逻辑的 AI 技能包。