🍊 UglyOrange
💻 软件

qqqa:极速无状态的命令行 AI 助手,重塑终端交互体验

frigidpluto Views: ...

又一款 AI cli 助手,跟我们之前介绍的 Cai 挺类似,都是基于 Rust 编写的 CLI 工具集,主打高效快速。

什么是 qqqa?

qqqa 是一款基于 Rust 编写的命令行 AI 助手,主要由两个核心命令组成:

  1. qq (Quick Question):用于快速提问。不保存上下文,只负责回答当前的问题,非常适合查询命令用法、代码片段或概念解释。
  2. qa (Quick Agent):一个单步代理。既能回答问题,又能调用工具(如读取文件、执行命令),适合处理具体的任务。

至于为什么要用 qqqa 这样的命名,开发者的意思是, qa 在键盘上挨得近,触手可及,同时还是 “Quick Question” 和 “Quick Agent” 的简写。

一词双关,有点意思。

why qq/qa

核心设计哲学:无状态与管道友好

与一般的 Chatbot 不同,qqqa 默认是无状态的。也即是说每次运行都是独立的,没有对话历史。好处呢:

  • 省钱:这是必然的,移除了对话历史,调用 API 时 token 消耗也少了。
  • 简单纯粹:方便实现,这点是开发者而言的,对用户来说没什么影响。
  • Shell 友好:可以完美地融入管道(Pipe)操作中,将上一个命令的输出作为 AI 的输入。
  • 可复现性:相同的输入(通常)会产生相似的输出,便于脚本化。

场景一:智能查询 (qq)

当你需要 Google 一个复杂的 ffmpeg 参数或 git 命令时:

# 加不加引号都没影响
qq convert mp4 to mp3

# 或者查询特定系统操作
qq "how do I kill a process by name on macOS"

qq 默认采用流式输出,响应极快。如果你需要将结果直接用于后续操作,可以使用 --no-stream 配合 --copy-command(或简写 --cc),工具会自动将回答中的代码块复制到剪贴板。

场景二:上下文感知与管道 (|)

这是 qqqa 最强大的用法之一。你可以将任何命令的输出 “喂” 给 AI:

# 分析 git 状态并建议下一步操作
git status | qq "summarize what I should do next"

# 解释一段复杂的代码
cat src/main.rs | qq "explain the error handling logic here"

这两点都是基本功能,前面提到的 cai 也有实现,功能比较类似,qqqa 的一个亮点是支持了 agent。

场景三:让 Agent 替你干活 (qa)

qa 具备执行能力,它可以读取文件、写入文件或执行 Shell 命令(需用户确认)。

# 自动生成文档
qa "read src/lib.rs and write a summary to docs/intro.md"

# 执行任务(会先请求确认,使用 -y 可自动同意)
qa "list all Rust files sorted by size"

灵活的模型支持:丰俭由人

qqqa 的配置灵活,支持多种模型后端,本地模型也好,OpenAI API 也罢,都能信手拈来。

1. 开箱即用:OpenRouter (默认)

默认配置下,qqqa 使用 OpenRouter 的 API,并指向 openai/gpt-4.1-nano。这个模型速度极快且价格便宜,非常适合日常的快速问答。你只需要设置 OPENROUTER_API_KEY 环境变量即可。

2. 零边际成本:复用 ChatGPT/Claude 订阅

这是 qqqa 最具吸引力的特性之一。如果你已经订阅了 ChatGPT Plus 或 Claude Pro,你可以直接利用现有的订阅,而无需额外支付 API 费用。

  • Codex CLI Profile:通过配置 codex profile,qqqa 可以调用 ChatGPT 桌面应用的 CLI 接口(需先安装 codex-cli)。
  • Claude Code CLI Profile:同理,支持调用 Anthropic 的 claude 命令行工具。

也即是说,你可以在终端里 “免费” 使用 GPT-5 (preview) 或 Claude 3.5 Sonnet 的能力。

3. 隐私优先:本地 Ollama

对于处理敏感代码或处于离线环境的场景,qqqa 对 Ollama 的支持非常完善。通过 qq --init 初始化时选择 Ollama,或者手动配置:

{
  "profiles": {
    "ollama": {
      "model_provider": "ollama",
      "model": "llama3.1",
      "api_base": "http://127.0.0.1:11434/v1"
    }
  }
}

安全性设计

qqqa 在这方面做了严格的限制,避免了 AI 直接通过 rm -rf / 帮你清空系统的尴尬。

  1. 文件沙箱:文件读写操作被限制在用户主目录或当前工作目录内,防止路径遍历攻击。
  2. 命令白名单qa 内置了一个默认的安全命令列表(如 ls, grep, find 等)。
  3. 人工确认:对于不在白名单内的命令,或者涉及管道、重定向的操作,qa 会强制要求用户确认。危险命令(如 rm -rf /)会被直接拦截。
  4. 只读模式qq 命令本身是完全只读的,无法执行任何副作用操作。

高级配置技巧

首次安装后,建议运行 qq --init 生成配置文件 ~/.qq/config.json。以下是一些实用的高级配置:

  • 开启历史记录:虽然主打无状态,但你可以通过 --history 参数或在配置中设置 "include_history": true,将最近的 10 条 qq/qa 命令作为上下文发送,实现类似 “多轮对话” 的效果。
  • 严肃模式:如果你不喜欢 AI 回复中带有 Emoji,可以使用 --no-fun 参数(或在配置中永久关闭),让 AI 变身为严肃的系统管理员。
  • 企业级代理:支持自定义 TLS 证书路径,方便在需要自签名证书的企业内网环境中使用。

总结

如果你之前试过了同样主打 AI 终端工作流的 Cai,觉得还不满意,那不妨也试试 brew install qqqa,AI cli 会不断演化,总有一款适合你。