工程

SSH 的 AI 命令生成:10,000 名用户教会我们什么

一年来 AI 命令建议的迭代经验:prompt 设计、上下文窗口、信任建立。

CC Chen Chen· 创始人·2026 年 5 月 14 日·阅读 9 分钟

为什么 SSH 比聊天难

让 LLM 写一行 shell 命令听起来是个小问题。其实不是。在聊天产品里,错答案的代价是用户重看或再问。在 shell 里,错答案的代价是一条命令在生产服务器上跑起来。当输出会被执行时,「够用」的门槛要高得多。

我们在 TermAI v0.4 上线了 AI 命令助手,看了一年的遥测。约三分之一用户每天用;约一半每周用;四分之一基本不碰。每天用的用户是我们最认真听的 —— 他们发现了每一个小毛病,且有自己的看法。

上下文:发多少、发什么

第一版只发用户问题,别的什么都不送。模型经常猜错 shell 上下文 —— 你在 Alpine 上它假设 Ubuntu,你用 zsh 它假设 bash,你不是 root 它假设你是。

所以我们加了上下文。但加多少?

最便宜的做法是发完整终端 scrollback。我们没那么做,三个理由:

  1. 隐私。Scrollback 含一切 —— 文件内容、输出、滚走的密钥。默认发给模型感觉不对。
  2. Token 成本。长上下文贵。AI 助手免费档要用;我们承担不起每次调用 10× 成本。
  3. 质量。反直觉地,更多上下文经常**伤害**答案。模型会咬住 scrollback 里某个跟新问题无关的老错误。

最终上线行为是一份精选快照、而非整段回滚:操作系统和已装工具、这台机器当前的磁盘/内存/CPU 负载、最近约 30 行输出、以及你最近的命令和它们的结果。够把答案锚定在**当前**会话里,又不必把整段历史都塞进去(也不必为此付费)。代理在转发前剥离 IP、主机名、明显的密钥。用户可以完全关闭上下文要"裸 prompt"。

能用的 prompt 设计

Prompt engineering 值得单独写一篇,但一年迭代下来收敛的模式长这样:

System: You are a shell command generator. Output ONLY a runnable
command, no explanation. If the request is ambiguous, generate the
most common interpretation. Do not include backticks or markdown.
Target shell: {detected_shell}
OS: {detected_os}

User: {question}

Context (last 5 lines of output):
{context_lines}

两个关键。第一,我们告诉模型只输出命令、只输出命令 —— 没有前言。移动用户要的是结果,不是教程。第二,系统 prompt 说"最常见解读"而不是请求澄清。在 ChatGPT 里通过聊天请求澄清没问题;在终端里那是多一个来回打断节奏。如果用户想要更具体的东西,他们会编辑结果。

执行前确认

生成的命令永不自动跑。助手产生建议;你点按发送到终端。这听起来理所当然,但这是整个产品最重要的 UX 决定。用户信任助手恰恰因为它不带来意外。

每条建议三个动作:运行原样发出去,编辑放进输入行调整,取消关掉建议。我们考虑过且短暂上线"简单命令自动跑"模式。用户讨厌。即使是 ls 也要这一点,因为助手接下来建议的可能不是 ls

把错误粘进去当上下文

最常用的流程结果不是命令生成,是错误分析。模式:用户跑命令、失败、选错误输出、点"问 AI 这个"。助手拿到错误、失败的命令、scrollback 最近几行当上下文 —— 解释哪里出问题。

这一个功能可能占了助手 40% 用量。错误消息棘手又吓人;LLM 是真的擅长解析它们。我们加了一个 fast-path:检测到输入像错误(匹配 sshdnginxsystemddocker 等已知模式),就路由到更小的模型,用更紧的错误解释 prompt。更快、更便宜,经常更好。

什么时候路由到哪个模型

这块变化最频繁。等你读到时具体细节会不一样。原则不会。

我们用多个模型。便宜快的模型给高频场景(简单命令、错误解析),慢且聪明的给硬场景(复杂多步请求、"装 nginx 配 TLS 加重定向")。客户端有个小分类器根据 token 数、是否含某些关键词、用户档位决定路由到哪个。

免费档用户全部走 fast 模型(80% 场景够用)。Pro 用户默认走聪明模型,高峰期 fall back 到 fast。

五条我们硬学到的经验

  1. 延迟胜过质量。200ms 的还行答案比 800ms 的好答案更好。手机用户会把感觉慢的东西直接关掉自己打命令。
  2. 上下文是个旋钮,不是最大值。更多上下文经常伤。我们按查询类型调。
  3. 永不自动跑。产品建立在信任上。一次意外足以失去它。
  4. 解释失败,不只是翻译它。好的错误分析说"这意味着 X,试 Y" —— 不是"这个错误意味着 Y/n prompt 没被回答"。
  5. 免费档限调用次数,不限功能。免费版每天 5 次、功能完整,比无限次阉割版更有价值。该升级的会升,不该的也不觉得被夹。

快速事实

  • 自然语言转命令:描述任务,AI 给出可在运行前复核的 shell 命令
  • 危险命令有闸:递归删除、裸盘写入、重新格式化等破坏性命令需显式确认;普通命令一点即跑
  • 真实上下文:AI 看得到 OS/发行版、实时磁盘/内存/CPU、最近输出与命令历史,命令贴合你这台机器
  • 免费层:AI 5 次/日(轻量模型),次日零点重置;Pro 解除限制
  • 按需启用:会话永不自动喂给模型;AI 由你按问题调用
试试 TermAI

免费上手,iOS 和 Android 都有。免费档每天 5 次 AI,SSH/SFTP 不限量,内置 Tailscale。

CC
Chen Chen — Founder of TermAI

Writes about mobile DevOps, terminal UX, and the surprising depth of "boring" infrastructure.

Was this useful? ← Back to blog