Post

Claude Code(五)斜杠命令:从”对话框”到”控制台”的效率提升

深入解析 Claude Code 的斜杠命令(Slash Commands)。探索如何通过结构化指令减少自然语言的模糊性,精准控制 Token 消耗、会话状态与系统配置,将 AI Agent 转化为高效的终端工具。

Claude Code(五)斜杠命令:从”对话框”到”控制台”的效率提升

在前几章中,我探讨了 Claude Code 的配置Hooks 机制。如果说 Hooks 是 AI 的”神经系统”,那么 斜杠命令(Slash Commands) 就是它的”控制面板”。

虽然我习惯用自然语言与 AI 交流,但在 CLI(命令行界面)环境中,效率往往来自于确定性简洁性。斜杠命令既包括 Claude Code 内置的系统命令,也包括我可以自定义的项目命令个人命令。它们正是连接”自然对话”与”精准操作”的桥梁。

Background / Problem:为什么需要斜杠命令?

我曾经问自己:”我直接跟 Claude 说’清理会话’不就行了吗?”

虽然自然语言非常灵活,但在以下场景中,我发现斜杠命令具有不可替代的优势:

  1. 原子操作(Atomicity):斜杠命令是由终端程序(Claude Code Client)直接解析的,不经过 LLM 处理(针对内置命令)。这意味着它响应快,且成功率高,无需等待 AI 推理。
  2. Token 消耗控制(Token Control):当我发送 /compact 时,我不需要写一段长长的指令解释为什么要压缩上下文,从而节省了输入 Token。
  3. 状态隔离(State Isolation):某些操作(如 /login/config)涉及系统敏感信息,不应该作为上下文喂给 AI。
  4. 工作流自动化(Workflow Automation):自定义命令可以编码复杂的多步骤操作,提升重复性任务的效率。
  5. 跨项目一致性(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

关键技术点解析

  1. 本地路由(Local Routing): 内置命令(如 /clear, /cost)在本地被拦截和执行。这避免了网络往返延迟(RTT),操作体验接近原生 Shell 命令。

  2. 上下文无污染(Context Hygiene): 许多内置命令执行后,不会在 AI 的上下文窗口中留下痕迹(或者只留下精简的结果)。这对于维持 Agent 的专注力很重要。

  3. 混合执行模式(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 (技能)
定位快速指令,单次交互为主复杂能力,包含逻辑、知识库和多步工具调用
触发方式用户显式输入 /commandAI 根据上下文自动决策调用,或通过命令触发
文件结构单个 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 技能包。

This post is licensed under CC BY 4.0 by the author.