aichat 和终端 AI 工具——命令行里用 AI 的新方式
aichat 和终端 AI 工具——命令行里用 AI 的新方式
适读人群:喜欢在终端工作的开发者 | 阅读时长:约13分钟 | 核心价值:把 AI 集成进终端工作流,快查文档、生成脚本、分析日志
我在 IDE 里开着 AI 助手,终端里跑着七八个窗口,浏览器开着三十个标签页,这大概是大多数开发者的日常工作状态。
有一天我突然意识到一个低效的模式:我在终端里看到一条报错,要么切到浏览器去搜,要么切到 IDE 的 Chat 里问,要么打开一个 Claude 网页。这三个动作都要离开终端,打断当前的工作流。
我在想,能不能让 AI 直接待在终端里?
于是我开始研究终端 AI 工具。用下来,aichat 是目前我最满意的一个。
aichat 是什么
aichat 是一个用 Rust 写的命令行 AI 工具,开源,支持接入几十种不同的 AI 模型(OpenAI、Anthropic、Gemini、本地 Ollama 等)。
它有几个特点让我特别喜欢:
- 多模型随时切换,不绑定一个
- 支持 Shell 集成,可以直接执行 AI 生成的命令
- 支持 Session(对话历史),可以连续多轮对话
- 支持 Role(预设角色),可以配置不同工作场景的专用角色
- 支持通过管道直接分析文件内容
安装和基础配置
安装:
# macOS
brew install aichat
# 或者用 cargo(需要 Rust 环境)
cargo install aichat
# Linux 可以直接下二进制
# https://github.com/sigoden/aichat/releases
# 下载对应版本解压到 PATH安装完后第一次运行会引导配置:
aichat配置文件在 ~/.config/aichat/config.yaml,手动编辑更清晰:
# ~/.config/aichat/config.yaml
# 默认使用的模型
model: claude:claude-3-5-sonnet-20241022
# 启动时是否显示信息
highlight: true
light_theme: false
# 保存对话历史
save_session: true
# 流式输出(打字机效果)
stream: true
# 函数调用
function_calling: true
clients:
# Anthropic Claude
- type: anthropic
api_key: sk-ant-你的key
# OpenAI
- type: openai
api_key: sk-你的key
# 本地 Ollama
- type: ollama
api_base: http://localhost:11434
# 硅基流动(国内,价格便宜)
- type: openai-compatible
name: siliconflow
api_base: https://api.siliconflow.cn/v1
api_key: sk-你的key
models:
- name: Qwen/Qwen2.5-Coder-32B-Instruct
max_input_tokens: 32768验证配置:
aichat "你好,测试一下"
# 如果有输出就说明配置成功日常工作流的几种用法
1. 快速查文档
这是我用得最多的场景。遇到不熟悉的命令或者 API,不用切浏览器查:
# 查 rsync 参数含义
aichat "rsync -avz --delete 这几个参数分别是什么意思,一行一个解释"
# 查 curl 怎么发 POST JSON
aichat "curl 发送 POST 请求,body 是 JSON,同时带 Authorization header,给我一个完整命令"
# 查 awk 怎么用
aichat "awk 打印第一列和第三列,并且第二列大于100的行,给我语法"和搜索引擎相比,这个方式的好处是:直接给你想要的答案,不用在一堆搜索结果里筛选,也不用看广告。
2. 生成 Shell 脚本
我写 Shell 脚本不快,也经常记不住语法细节。但 AI 写 Shell 脚本很稳:
# 直接描述需求,让 AI 生成
aichat "写一个 bash 脚本:遍历当前目录所有 .log 文件,找出包含 ERROR 关键字的行,输出到 errors_$(date +%Y%m%d).txt"输出:
#!/bin/bash
output_file="errors_$(date +%Y%m%d).txt"
> "$output_file"
for log_file in *.log; do
if [ -f "$log_file" ]; then
grep "ERROR" "$log_file" | while IFS= read -r line; do
echo "[$log_file] $line" >> "$output_file"
done
fi
done
echo "完成,结果保存到 $output_file"aichat 还有一个 -e 参数(execute 模式),生成命令之后直接提示你是否执行:
aichat -e "列出当前目录按大小排序的前10个文件"
# AI 生成:ls -lhS | head -11
# 然后问你:是否执行?[y/N]这个功能要注意安全,不要对高危操作用 -e,比如不要 aichat -e "删除所有临时文件" 这种。
3. 分析日志
通过管道把日志内容直接传给 AI 是我觉得终端 AI 最香的用法:
# 分析最近100行日志里的异常
tail -n 100 /var/log/app/error.log | aichat "分析这些日志,找出主要的错误类型和可能的原因"
# 统计某种错误出现的模式
grep "OutOfMemoryError" app.log | aichat "这些 OOM 错误有什么规律?什么时间段密集出现?内存溢出的可能原因是什么?"
# 分析 GC 日志
cat gc.log | aichat "分析这个 GC 日志,告诉我:1. GC 频率是否正常 2. 有没有 Full GC 3. 堆大小配置是否合理"相比人工看日志,这个方式在日志量大的情况下能快很多。AI 能帮你快速归类问题、定位时间段,把分析缩短到几分钟。
4. 代码片段快速生成
在终端里写代码片段,不用开 IDE:
# 生成一个 Python 单行数据处理
aichat "Python 一行代码:从列表 [{'name': 'a', 'score': 90}, {'name': 'b', 'score': 70}] 里过滤 score > 80 的,返回 name 列表"
# 生成 jq 命令处理 JSON
echo '{"users": [{"id": 1, "name": "张三"}, {"id": 2, "name": "李四"}]}' | aichat "写 jq 命令只提取 name 字段的数组"
# 生成正则表达式
aichat "写一个正则:匹配中国大陆手机号,11位数字,1开头,第二位是3/4/5/7/8"配置 Role(预设角色)
Role 是 aichat 里非常实用的功能。你可以预设不同场景的 System Prompt,切换 Role 就切换了 AI 的工作模式。
Role 配置文件在 ~/.config/aichat/roles/,每个 Role 一个 YAML 文件:
# ~/.config/aichat/roles/devops.yaml
name: devops
model: claude:claude-3-5-sonnet-20241022
temperature: 0.3
system_prompt: |
你是一个资深 DevOps 工程师,擅长 Linux 运维、Shell 脚本、Docker/Kubernetes、CI/CD 流水线。
回答问题时:
1. 给出可以直接复制使用的命令,不要有占位符
2. 命令涉及修改系统配置或删除操作时,主动提醒风险
3. 如果有更安全/更现代的替代方案,主动提到
4. 命令解释用内联注释,不要单独写一段解释# ~/.config/aichat/roles/java-dev.yaml
name: java-dev
model: claude:claude-3-5-sonnet-20241022
temperature: 0.2
system_prompt: |
你是 Java 高级工程师,专注 Spring Boot 生态。
技术栈:Java 17, Spring Boot 3.x, MyBatis-Plus, Redis, RabbitMQ。
代码规范:构造器注入、无 Lombok、Result<T> 返回值封装。
生成代码要完整可运行,包含 import,遇到不清楚的需求先问。使用 Role:
# 切换到 devops 角色
aichat -r devops "nginx 怎么配置 upstream 负载均衡,四台服务器,权重不同"
# 切换到 java-dev 角色
aichat -r java-dev "写一个 Spring Boot 的拦截器,检查 Header 里的 token"常用 alias 配置
把常用操作做成 alias,是提升终端 AI 使用效率的关键。
在 ~/.zshrc 或 ~/.bashrc 里加入:
# 基础 AI 对话
alias ai='aichat'
# 快速问命令/语法
alias aq='aichat -r devops'
# 分析剪贴板内容(macOS)
alias aclip='pbpaste | aichat'
# 解释上一条命令(需要 fc -ln -1 获取历史)
alias aexplain='fc -ln -1 | aichat "解释这条命令的作用"'
# 分析当前目录的 git diff
alias areview='git diff | aichat "Code Review 这些修改,找出潜在问题"'
# 快速生成并执行命令(谨慎使用)
alias arun='aichat -e'
# 问 Java 相关问题
alias ajava='aichat -r java-dev'
# 分析日志(和 tail 配合)
alogtail() {
tail -n "${2:-100}" "$1" | aichat "分析这些日志,找出主要问题和规律"
}
# 解释错误信息(从管道接收)
alias aerror='aichat "解释这个错误信息,给出可能的原因和解决方案"'加完之后 source ~/.zshrc 生效。
用起来:
# 快速查命令
aq "find 命令怎么搜索7天内修改过的 .java 文件"
# 分析最近的错误日志
alogtail /var/log/app/error.log 200
# 分析当前改动
areview
# 解释报错
java -jar app.jar 2>&1 | grep Exception | aerror和其他终端 AI 工具的对比
除了 aichat,我也试过 llm(Simon Willison 写的 Python 工具)和 shell_gpt。
llm(github.com/simonw/llm)
优点:安装简单(pip install llm),插件生态丰富,Simon Willison 本人很活跃。
缺点:Python 写的,启动略慢;功能不如 aichat 完整(特别是 Shell 集成部分)。
适合:喜欢 Python 生态、需要大量插件扩展的用户。
shell_gpt(github.com/TheR1D/shell_gpt)
优点:专注 Shell 命令生成,这个场景做得很好,有 --shell 参数直接生成并执行。
缺点:只做 Shell 命令,没有 aichat 的 Chat/Role/Session 完整功能。
适合:主要需求是生成 Shell 命令的用户。
我为什么选 aichat:
功能全面且性能好(Rust 写的,启动快),多模型支持好,Role 和 Session 功能完整,活跃维护。
唯一不太方便的是配置文件是 YAML,初次配置要花点时间。但配置好之后很稳定。
终端 AI 工具这个方向,我觉得是被低估的。大家都在用浏览器 Chat 或者 IDE 插件,但终端才是很多开发者花时间最多的地方。
把 AI 带进终端,减少上下文切换,这个提升是真实的。
