gekro
GitHub LinkedIn
Workflow

终端速度:把 CLI 当作你的 AI 抽象层

阅读约 7 分钟

本文是英文原文的机器翻译,部分细节可能有所损失,请以英文版本为准。 阅读英文原文

要点速览

为什么图形界面是 AI 工程的瓶颈,以及如何用 WSL2 和 Zsh 搭建高速命令行工作流。
图形界面是为探索而设计的谎言,不是为速度。在 AI 开发中,终端是唯一能跟上思维速度的界面。本文详细介绍我使用的 Zsh 函数和 WSL2 配置,它们让我不碰鼠标,就能用管道把系统输出直接送进 LLM。

在现代 AI 实验室里,你的吞吐量受限于上下文切换的开销。如果你总是用 alt-tab 切到浏览器去粘贴错误日志或提交信息,你就是在流失专注力。我所有事情都在一个高度定制的 WSL2 实例里完成,因为终端是“智能层”的原生界面。通过管道把操作系统直接接到 LLM 上,我已经把我的“蠢活”(格式化、写提交信息、翻找日志)降到了接近零。

这次转变并非出于意识形态。我的 IDE 一次又一次地在 PowerShell 和 Bash 命令上出错,而终端就是能把事情办成。整个“皈依”就这么简单。

架构

我的工作流把 shell 视为一条可组合的数据管道。任何命令的输出,无论是失败的构建、git diff 还是 curl 的响应,都只是文本。而文本是 LLM 的主要语言。

组件工具 / 配置理由
ShellZsh + Oh My Zsh插件生态丰富,Tab 补全更出色。
终端Windows TerminalWindows 上最好的多标签页和 GPU 渲染。
多路复用器TmuxWSL2 重启后仍保持的持久会话。
字体MesloLGS NFPowerlevel10k 和图标所必需。
AI CLIfabric / ollama用管道把文本送给“大脑”的轻量封装。

搭建

真正的威力在你的 .zshrc 里。简单任务我不用复杂的智能体,而是用与我的 GekroLLMClient 对话的 shell 函数。

1. AI 驱动的 Git 提交

别再把“fix”当提交信息了。这个函数会暂存你的改动,把 diff 发给本地的 Llama 3 实例,并生成一条规范的提交信息。

# Generate AI commit message from staged changes
aic() {
  local diff=$(git diff --cached)
  if [ -z "$diff" ]; then
    echo "No staged changes found."
    return 1
  fi
  
  echo "Generating commit message..."
  local msg=$(echo "$diff" | ollama run llama3 "Generate a concise, one-line conventional commit message for this diff. No preamble.")
  
  git commit -m "$msg"
}

2. Explain 管道

每当命令失败,我就用管道把输出送过去。再也不用去搜那些晦涩的 C++ 错误码了。

# Pipe any output to LLM for instant explanation
alias explain="ollama run llama3 'Explain this error output and suggest a fix concisely:'"

# Usage:
# npm run build | explain

3. WSL2 配置说明

要让它在 Windows 上有原生 Linux 的体验,你需要修复路径和字体方面的怪问题。

Windows Terminal settings.json 片段:

{
    "guid": "{57605e5d-1f0f-5602-9ae4-0466a014995f}",
    "name": "Ubuntu-22.04",
    "source": "Windows.Terminal.Wsl",
    "font": {
        "face": "MesloLGS NF",
        "size": 12
    },
    "startingDirectory": "//wsl$/Ubuntu-22.04/home/rohit"
}

提示:在 Windows 应用程序里始终使用 //wsl$/ 路径格式,以避免 NTFS/9P 带来的性能损失。

取舍

搭建这一套花掉了我没预算过的好几个小时。我当时想让一个模型带我走完 WSL2 和 Zsh 的配置,结果它把我绕了好几圈(那是 Gemini 的第二代):信心十足地给我一条命令,看着我粘贴,看着它失败,然后再给我另一条。最后我是靠读真正的文档才搞定的,就像 2015 年那样。如果你也要做这套配置,请留出一整个下午,别走捷径。

我见过工程师犯的最大错误是别名过载。我曾经有 200 多个别名,花在回忆快捷方式上的时间比直接敲命令还多。后来我把它们精简到了“高频五个”:aic(AI 提交)、gup(Docker Compose Up)、ld(日志转储)、pf(Python 格式化)和 explain。

运维现实:**用管道把敏感日志送给云端 LLM,就是一场等着发生的安全事故。**我是在不小心把一份含明文凭据的生产环境 .env 文件发给云服务商之后才学到这一点的,因为它被我用管道传给“explain”别名的一个 grep 抓到了。做 shell 管道时始终使用本地 Ollama 实例,确保你的环境变量留在你自己的机器上。

还有一点,它会让标题泄点气。我现在两个都用。终端赢下了它擅长的活,图形界面守住了它擅长的活,不知从什么时候起,我已经不再计较比分了。如果你是来看一个结局干净利落的“皈依”故事,那这就是诚实的版本。

接下来

我目前正在构建一座从终端到行动的桥梁。shell 函数不会只解释错误,而是会提出一条 sed 或 patch 命令,我只要按下 Y 就能直接应用修复。终端并没有变得过时,它正在成为我们所构建的每个智能体的驾驶舱。

Rohit Burani

作者

Rohit Burani

AI 工程师,在实验室里构建本地优先系统、自托管基础设施和自主工具。

感谢阅读。

如果这篇文章对你有帮助,欢迎分享给你的圈子。

← 返回博客