终端速度:把 CLI 当作你的 AI 抽象层
本文是英文原文的机器翻译,部分细节可能有所损失,请以英文版本为准。 阅读英文原文
要点速览
在现代 AI 实验室里,你的吞吐量受限于上下文切换的开销。如果你总是用 alt-tab 切到浏览器去粘贴错误日志或提交信息,你就是在流失专注力。我所有事情都在一个高度定制的 WSL2 实例里完成,因为终端是“智能层”的原生界面。通过管道把操作系统直接接到 LLM 上,我已经把我的“蠢活”(格式化、写提交信息、翻找日志)降到了接近零。
这次转变并非出于意识形态。我的 IDE 一次又一次地在 PowerShell 和 Bash 命令上出错,而终端就是能把事情办成。整个“皈依”就这么简单。
架构
我的工作流把 shell 视为一条可组合的数据管道。任何命令的输出,无论是失败的构建、git diff 还是 curl 的响应,都只是文本。而文本是 LLM 的主要语言。
| 组件 | 工具 / 配置 | 理由 |
|---|---|---|
| Shell | Zsh + Oh My Zsh | 插件生态丰富,Tab 补全更出色。 |
| 终端 | Windows Terminal | Windows 上最好的多标签页和 GPU 渲染。 |
| 多路复用器 | Tmux | WSL2 重启后仍保持的持久会话。 |
| 字体 | MesloLGS NF | Powerlevel10k 和图标所必需。 |
| AI CLI | fabric / 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 就能直接应用修复。终端并没有变得过时,它正在成为我们所构建的每个智能体的驾驶舱。