LLM 这个词这几年被聊烂了,但绝大多数人接触它的方式,不是网页聊天框,就是IDE里的插件。直到某天我习惯性打开终端,准备跑个脚本处理日志,突然反应过来:我现在最常用的 AI 工具,居然也是在这个黑窗口里敲命令调出来的。命令行界面(CLI)这种最“老古董”的人机交互方式,正在被大模型重新激活。今天这篇不聊 IDE 插件,也不聊网页聊天,就专门聊 LLM 走进终端这件事——也就是所谓的 LLM CLI。
这篇文章适合谁?如果你是写代码的,想用 AI 帮你改 bug、查文档、写提交信息;如果你平时要处理大量文本、日志、数据文件,想用大模型做管道式批处理;甚至你只是好奇“在终端里玩大模型和网页聊天有什么区别”——这篇都值得你看完。我会把这阵子折腾 LLM CLI 的完整心得、踩坑记录、工具选型思路全部整理出来,不藏私。
1. 为什么大模型偏偏看上了命令行
1.1 从图形界面回归键盘的底层逻辑
先回答一个问题:AI 明明有网页聊天、有 IDE 插件,为什么还要钻进终端里用?
我自己的体会是,终端不是“退步”,反而是更本质的交互方式。大模型本身就是一个“接收文本、输出文本”的程序,而命令行恰恰是纯文本交互的极致形态。你在网页聊天框里能做的事——问问题、写代码、总结文章——在终端里全都能做,而且做得更快。
更深一层,是“管道哲学”。Unix 的设计哲学是“每个程序只做一件事,然后通过管道把它们组合起来”。大模型出现之前,终端里的工具链已经非常成熟:grep搜文本、jq解析 JSON、sed改内容。现在把 LLM 加进来,它就变成了一台能够理解语义的“文本处理器”。以前你要写一堆正则才能从日志里抓出想要的信息,现在直接对 LLM CLI 说一句“帮我把这几百行日志里所有 500 错误按时间排序”,它就替你干完了。这种体验,网页聊天根本给不了,因为网页聊天是孤岛,而命令行天然就是流水线的一部分。
1.2 终端生态正在迎来的 AI 复兴信号
可能很多人没注意到,最近的终端工具市场特别热闹:OpenAI 的 Codex CLI 开源后一堆人连夜安装,Anthropic 的 Claude CLI 也在开发者社区刷屏,Tabby、tmux、zellij 这些老牌终端工具的讨论热度又被带起来了,连带着“终端复用”“LLM 框架”“LLM 网关”这些词都成了热搜常客。
这个现象背后有个逻辑:大家发现,把大模型塞进终端里,不是“多了一种玩法”,而是“补上了终端最后一块短板”。终端擅长精确、擅长速度、擅长自动化,但不擅长“理解”。现在 LLM 把“理解”这一块补上了。你可以让模型读文件、写文件、执行命令、分析报错,一气呵成。这就像给一个只会跑指令的机器人装上了大脑,它能看懂你到底想让它干什么了。
所以你会发现,现在最火的 AI 编程工具几乎都提供了 CLI 形态,而且主推 CLI 的往往还是技术深度最扎实的那批开发者。原因很简单:真正重度使用电脑的人,最终都会回到键盘上。
2. 主流 LLM CLI 工具全景拆解
2.1 官方出品的 CLI 工具
先说 OpenAI 的 Codex CLI。名字听着挺唬人,其实它就是一个跑在终端里的 AI 编程助手。装完之后,你可以在终端里直接跟它对话,它能读取你当前目录的文件、修改代码、甚至执行命令。最惊艳的是它的 agent 模式——你说一句“帮我写个脚本统计这个仓库的代码行数”,它会自己规划步骤、创建文件、运行命令,你只需要在旁边看着,有不对劲的随时打断。对我来说,它更像一个“住在终端里的结对程序员”,而不是一个简单的问答机器人。
然后是 Anthropic 的 Claude CLI。它的定位跟 Codex CLI 类似,也是让你在终端里以对话方式写代码、改代码。但 Claude 在长上下文理解和代码解释方面有自己的优势,处理那种跨多个文件的修改任务时,它的思路会更连贯。安装也很简单,支持 npm 和原生安装器两种方式。装完配置 API key 就能直接上手。
其他值得关注的还有 Trae CLI、MiniMax Code CLI 这些。Trae 是字节系的 AI IDE,它的 CLI 版主打轻量;MiniMax 则是国产模型里较早把 CLI 做得像模像样的。这些工具的逻辑基本一致:把模型能力封装成命令行工具,让你在终端里用自然语言完成编码任务。
这里做一个简明对比,方便你按需选择:
| 工具 | 出品方 | 安装方式 | 核心定位 | 突出特点 |
|---|---|---|---|---|
| Codex CLI | OpenAI | npm / 安装包 | AI 结对程序员 | agent 模式强大,可自主完成多步骤任务 |
| Claude CLI | Anthropic | npm / 安装器 | AI 编码助手 | 长上下文理解好,跨文件修改连贯 |
| Trae CLI | 字节系 | npm | 轻量 AI 编码工具 | 集成度好,对国内模型支持友好 |
| MiniMax Code CLI | MiniMax | npm | 全能编码助手 | 国产模型调用便宜,快速可用 |
2.2 开源生态里的通用 LLM CLI 框架
除了官方出的编码专用 CLI,还有一类更底层的工具——通用 LLM 命令行框架。最典型的是 Simon Willison 做的那个llm工具,它可以让你用一条命令调用各种模型,比如llm "帮我写一首关于秋天的诗",它就会把任务发给配置好的模型并把结果打印到终端。这个工具的意义在于“通用”:不绑定任何一家厂商,OpenAI、Anthropic、本地模型都能接。
另外还有“LLM 网关”这类概念。简单说就是你在终端里调模型时,请求经过一个统一的网关转发到不同模型厂商,方便做负载均衡、密钥管理、成本统计。自己折腾过多家模型 API 的人应该深有体会:每个厂商的接口格式都不一样,代码里到处是 if-else。网关就是解决这个痛点的,它把“调用任意模型”这件事统一成一套接口。
跟官方 CLI 相比,通用框架的定位差异很大。用个生活化的类比:官方 CLI 像是你聘了一个实习生,他直接帮你写文档、跑腿办事;通用框架像是给你家装了一排洗衣机旋钮,想洗衣服就转一下,具体使哪台机器、用多少水,你自己说了算。
还有一个最近很火的方向是“LLM Wiki 知识库”。这个词频繁出现在热搜里,本质上是用 CLI 工具管理一个 Markdown 文件构成的知识库,让大模型基于你的私有知识回答问题。我之前把日常积累的运维笔记整理成了一个 Wiki 仓库,用 CLI 查询时,模型会根据 Wiki 内容回答,而不是瞎编。这对写技术博客、整理团队文档的人来说,极其实用。
3. 从零搭建一套可用的 LLM CLI 环境
3.1 安装与前置准备
说再多不如动手跑一遍。你完全可以把这套环境搭在自己的笔记本上,不需要服务器。
以 macOS 和 Linux 为例,第一步是装 Node.js 环境。Codex CLI 和 Claude CLI 都依赖 Node.js 18+。
# 检查 node 版本,低于 18 先升级 node -v # 用 npm 全局安装 codex npm install -g @openai/codex装完验证一下:
codex --version看到版本号就说明装好了。但这只是开始,接下来要配置 API Key。Codex CLI 首次运行会让你登录 OpenAI 账号授权,如果没法直接登录,也可以手动配置环境变量:
export OPENAI_API_KEY="sk-你的密钥"Claude CLI 类似:
npm install -g @anthropic-ai/claude-code然后设置 Anthropic 的密钥。有意思的是,我在 macOS 上测试时发现 Claude CLI 也可以配置兼容 OpenAI 协议的第三方模型,比如用 Qwen 的 Key 来跑。操作方式是设置ANTHROPIC_BASE_URL指向兼容端点,再把 Key 配上。这种灵活性对国内开发者很友好。
配置完成后,直接在终端里输入:
codex就能进入交互界面。初次打开它会显示一个欢迎界面,告诉你它能够读写文件、执行命令,但需要你授权。这个过程有点像给一个新手机装 SIM 卡:装好、插卡、开机,然后就等着用了。
3.2 顺手把终端本身也武装一下
LLM CLI 的体验,很大程度上取决于你终端本身好不好用。我强烈建议先搞定终端复用工具。说得简单点,终端复用就是让你在一个终端窗口里开多个会话,每个会话还可以随时切回来。用的最多的是 tmux,还有最近比较火的 zellij。为什么要装它?因为你在用 Codex CLI 跑一个长时间任务时,不可能一直盯着屏幕等它跑完。有了 tmux,你可以把任务丢在后台,关掉电脑,下次连上来任务还在跑。LLM 推理特别慢的场景,这个功能简直是救命的。
另外终端工具本身也值得换。macOS 自带的 Terminal 能用,但跟 Tabby 这种现代终端一比就显老了。Tabby 支持多标签、内置 SSH 管理器、主题丰富、还支持拖拽切分窗口。最爽的是它把本地终端和远程服务器的会话管理统一起来,配好密钥之后,一键就连上了。再搭配 tmux 和 fzf(模糊搜索工具),你的终端会变得非常顺手。
最后别忘了给终端配一个好用的 Shell。zsh 加 oh-my-zsh 是标配,补全提示、历史命令搜索这些功能能让你的操作效率提升一个档次。我一直觉得,LLM CLI 不是孤立的工具,它必须扎在一套舒服的终端环境里才能真正发光。
3.3 用一次实际操作看看 LLM CLI 怎么干活
光说不练假把式。拿我自己的一次实际操作举例。
有段时间我需要处理一份几万行的 Nginx 访问日志,想找出哪些 IP 访问了敏感路径、并且出现了 4xx 错误。以前我肯定要写 awk、grep、sort、uniq 一长串管道命令,还得反复调试。这次我直接在 Codex CLI 里说:
帮我分析 access.log,找出所有访问 /admin 路径的 IP,按出现次数排序,顺便统计一下其中 4xx 状态码的占比
Codex CLI 一点没含糊,先是读了一小段日志看格式,然后写出了一个挺漂亮的 awk 命令,跑了一下验证输出,然后又把结果整理成了表格。整个过程不到两分钟,比我自己写命令快多了。关键是它不是我给个指令它给段代码就完事,而是真的在我的目录里读文件、执行命令、看结果、再调整,是个“干活”的流程。
Claude CLI 的场景我也试过。有次我改一个 Python 项目的代码,涉及三个文件的联动修改,直接问它“把订单模块的异常处理统一改成自定义异常类,并更新对应的测试”,它就自己打开文件、逐个修改、然后跑测试给我看结果。那个体验确实震撼,就跟旁边坐了个懂你项目的工程师一样。
4. 把 LLM CLI 玩出花的进阶姿势
4.1 管道组合:让大模型成为 Shell 的一部分
很多人以为 LLM CLI 就是个人对话窗口,其实最大的价值在于它能跟 Shell 管道无缝结合。这是网页聊天永远做不到的事情。
我说个最直观的例子。假设你有一个配置文件config.json,你想把里面所有的英文注释翻译成中文,保留 JSON 格式不变。用通用 LLM CLI 框架,一行命令搞定:
cat config.json | llm "把这段 JSON 里的英文注释翻译成中文,保持 JSON 结构不变"模型读入内容、完成翻译、把结果打印到标准输出。你再接一个>重定向就能把结果写回文件。整个过程没有打开任何对话框,没有复制粘贴,完完全全是在终端里“流动”的数据。再配合jq和ripgrep,你能做出来的自动化程度是非常惊人的。比如定时抓取一个网页内容、用 LLM 总结摘要、然后推到你的通知工具里,全链路命令行完成。
这就回到了前面说的管道哲学:大模型在终端里不是一个“聊天对象”,而是一个“文本函数”——输入什么就处理什么,转发给你下一个工具。
4.2 知识库与 RAG 的 CLI 化
LLM CLI 另外一个让我觉得“回不去”的功能,是接入知识库。先说结论:直接让模型回答问题,它很容易一本正经地胡说八道;但如果你给了它一份靠谱的知识库,它回答的质量会完全不一样。
目前比较流行的做法是“LLM Wiki”。具体操作其实不复杂:你把日常积累的知识写成 Markdown 文件,放在一个仓库里,然后用工具给这些文件做索引和向量化。查询的时候,CLI 会把你的问题转成向量,先去知识库里检索相关内容,再把检索结果连同问题一起送给大模型,让它“基于以下资料回答”。这个流程就是 RAG 的基本思路。
更进阶的是 GraphRAG。传统 RAG 只是“找相似文本”,GraphRAG 会先把你知识库里的实体和关系抽出来建一张图,再基于图去查询。打个比方:普通 RAG 是去图书馆的书架上找几本书丢给你;GraphRAG 是给你画了一张人物关系图谱,让你一眼看清谁是谁的同事、谁又在哪个项目里。对于处理那种“多个概念互相关联”的查询,GraphRAG 的效果明显更好。
我自己的笔记仓库就是这么整理的:所有运维踩坑记录、命令行技巧、项目架构文档全部变成 Wiki,然后用 LLM CLI 去查。以前遇到奇怪的问题总得翻自己博客,现在直接问终端,它会把相关笔记的内容摘出来回答我,还附上出处。使用体验不夸张地说,比我自己的记忆可靠。
4.3 Agent 模式:让 CLI 替你跑完整流程
聊完了管道和知识库,再说说 Agent 模式。
Codex CLI 这类工具不仅支持单轮问答式的插件模式,还有一个“Agent 模式”:给它一个相对复杂的任务目标,它会自动规划、分步执行。比如你可以说“帮我写一个 Python 脚本,每周一把项目里所有未提交的代码变更统计发到群里”。它会先写脚本、再设置 crontab、然后测试一遍。你只需要在关键节点确认一下,它就跑完了。
这种 Agent 模式的实现原理并不神秘,本质上是模型具备调用工具的能力。它会收到“你可以在当前目录里读取文件、写入文件、执行 shell 命令”这些工具函数,然后在每一次推理中决定调用哪个工具、看结果、再决定下一步。这跟人干活的方式是一样的:先看看现场情况,决定先做什么,做完了再看下一步。
但这里必须提醒一个边界问题:Agent 能力越强,风险也越大。让 AI 执行命令等于把终端控制权交给了它。我吃过一次亏:我让它“优化一下这个仓库的依赖”,它自作主张更新了一堆包,结果项目跑不起来了。从那以后我给自己定了一条规矩:凡是执行写操作或影响面较大的命令,必须加--dry-run或先在沙箱环境里试跑。这个习惯保了你多少次,只有踩过坑的人才知道。
5. 常见报错、坑位与排查思路
5.1 三份高发报错排查笔记
工具再好用,总有意想不到的报错。我把这阵子踩过的最常见的几个坑整理了一遍,给各位参考。
第一个高频报错是安装完 Codex CLI 后运行直接提示类似unable to locate the codex cli binary or required runtime components。看到这个先别慌,绝大多数情况是环境变量没配好,或者 Node.js 的全局 bin 目录没有加入 PATH。解决办法很简单:
# 查看 codex 装到了哪里 which codex # 如果找不到,手动把 npm 全局目录加进 PATH export PATH="$(npm prefix -g)/bin:$PATH"第二个坑是 Codex 在对话中提示“当前环境没有终端和文件编辑工具”。这个更隐蔽。表面上看你确实是在终端里跑它,但 Agent 模式下它需要一套安全策略来允许文件读写和命令执行。如果启动时没有授权,或者工作目录权限不对,它就会“看得到文件但碰不了”。我的经验是启动时干脆显式授权:
codex --full-auto # 允许自动执行命令不想给全部权限,也可以用--sandbox加限制。重点是搞清楚你这台机器上什么权限该给,什么不该给。
第三个报错是llm request failed: provider rejected the request schema or tool payload。这个大多出现在你用第三方兼容接口的时候。不同的模型服务商对工具调用的支持程度不一样,有的模型压根不支持 function call,你偏给它传工具参数,它就直接拒绝。解决办法是检查模型是否支持工具调用,或者把工具参数关掉,单纯走文本生成。
我把这三个问题的排查路径汇总成一张表:
| 报错信息 | 可能原因 | 解决思路 |
|---|---|---|
| unable to locate codex cli binary | Node 全局 bin 未在 PATH 中 | 检查 which codex,手动补 PATH |
| 提示没有终端和文件编辑工具 | Agent 权限未授权或沙箱限制 | 使用 codex --full-auto 或检查目录权限 |
| provider rejected schema or tool payload | 模型不支持工具调用 | 确认模型能力,关闭 tool 参数或换模型 |
5.2 环境相关的小问题也别忽视
除了上面这些核心报错,还有些不起眼但很烦人的问题。
比如在 Windows 上跑 WSL 2 进 Ubuntu 终端时,Codex CLI 可能显示异常,多半是字体和终端转义序列的锅。这时候换用 Tabby 或者 Windows Terminal 能解决一大半问题。另外你如果在 WSL 里装 codex,记得在 WSL 内部检查环境变量,别在 Windows 侧配了 Key 就指望 WSL 里能读到。
再比如 VS Code 的终端中文乱码问题。这个是老毛病了,通常是因为编码格式不一致。Linux 下检查locale,确保LANG是en_US.UTF-8或zh_CN.UTF-8;Windows 下可以尝试在settings.json里把终端编码改成 UTF-8。LLM CLI 的输出基本都是 UTF-8,终端不匹配就会出现一排方框,很影响阅读。
还有一个在 Linux 终端里特别常见的困惑:怎么换到上一行。很多人在终端里想编辑长命令,发现方向键左右移动总是串行,其实只需要按Ctrl+A跳到行首、Ctrl+E跳到行尾、Ctrl+W删除前一个单词。这些快捷键在你跟 LLM CLI 长对话时特别有用——你打了一大段话想改几个字,用方向键慢慢挪,那效率真的太低了。
5.3 几个气得想摔键盘后来又发现很简单的案例
分享一个我印象深刻的经历。有次我在 macOS 上用 Claude CLI 配 Qwen 的 Key,折腾了半天一直报 401 认证失败。查了一圈文档,才发现是环境变量名写错了——Claude CLI 认的是ANTHROPIC_AUTH_TOKEN,我用成了ANTHROPIC_API_KEY。这类问题就是典型的“字面上差一点,实际上差很多”。
还有个常被忽略的坑:在 Linux 终端里写管道命令时,如果命令里包含中文或特殊字符,有些工具会默认做文件名补全,导致管道语义错乱。比如llm "翻译这句话" | tee output.txt在某些 shell 里会把引号内容当通配符。这不是 LLM 工具的问题,是 Shell 的解释规则导致的。解决办法是给命令加空格或者用sh -c包一层。
这些小事写出来显得很简单,但实际遇到时真的会卡很久。我最终的办法是养成一个习惯:任何新工具第一次装好,先跑一个最小的 demo 确认链路通畅,再往复杂功能上走。不这样做,你会把时间全浪费在“分不清到底是工具坏了还是自己配置错了”上。
最后说点大实话
我这段日子折腾 LLM CLI 最大的感触是:工具本身不难,真正难的是改变使用习惯。以前遇到问题,我的第一反应是“打开浏览器搜一下”;现在我的第一反应变成了“在终端里问一下”。这不仅仅是操作路径的变化,更是思维方式的转变——从“找资料”变成了“直接对话”。
当然,LLM CLI 也不是万能的。它处理那种明确、局部、可验证的任务时非常高效;但如果你让它做一个需求模糊、涉及大量业务判断的事情,它可能给你一个看起来不错但根本不能用的结果。所以我的建议是:把它当成一个“能力极强的初级工程师”,而不是“全知全能的神”。你给它清晰的目标,自己最后把关,它就能替你省下大量时间。
如果你也想试试,别一上来就装全家桶。先装一个 Codex 或者 Claude CLI,随便找个真实的小任务跑一遍——比如让它分析一份日志、写个自动化脚本、翻译一份文档。等你在终端里体验过那种“一句话搞定一件事”的感觉,就再也回不去了。