aichat 是一个终端里的 AI 对话客户端,Rust 写的单文件 exe,12793856 字节。它自己不跑模型,只负责按配置把请求发到各家接口:OpenAI、Claude、Gemini、Ollama、任何兼容 OpenAI 协议的本地服务都行。
实测把它接到本地起的 koboldcpp 服务上,一次问答 0.51 秒。整个过程里最值得记下来的是一个坑:模型名写错了它不报错,照样给你答案。
12 MB 的 exe,一份 yaml 管所有模型
model: local:qwen
clients:
- type: openai-compatible
name: local
api_base: http://127.0.0.1:5001/v1
api_key: dummy-key-not-used
models:
- name: qwen
max_input_tokens: 2048
配置文件放在 AICHAT_CONFIG_DIR 指向的目录里,文件名 config.yaml,上面这份 13 行。上面这份把本地 5001 端口上的 koboldcpp 定义成一个叫 local 的 client,模型名 qwen,调用时写 -m local:qwen。
一个 client 可以挂多个模型,多个 client 写在同一个 clients 列表里。切换模型就是改 -m 后面的名字,不用换工具。
接本地服务,一次问答 0.46 秒
| 指标 | 数值 | 说明 |
|---|---|---|
| exe 体积 | 12793856 字节 | 单文件,无运行时依赖 |
| 本地服务就绪 | 9.05 秒 | koboldcpp 加载模型的时间 |
| 一次问答(含启动) | 0.51 秒 | 非流式,一次回答完 |
| --version / --list-models | 0.14 秒 | 纯启动开销 |
| 一次回答的单词数 | 29 个 | 0.51 秒那次 |
| 配置文件行数 | 13 行 | 一个 client 一个模型 |
| 服务没起时的失败耗时 | 2.17 秒 | 退出码 1 |
0.51 秒里包含了 aichat 自己的进程启动、读配置、发请求、等模型回答完整。光启动就要 0.14 秒(--version 的耗时),所以真正花在模型上的不到 0.4 秒。模型那侧的首 token 延迟大概 0.1 秒,剩下的时间在生成和进程初始化上。
它默认是流式输出,逐字往外打。-S 关掉流式,等全部生成完一次性输出,脚本里取结果用这个。上面那个 0.51 秒是加了 -S 测的,回答一共 29 个单词。
模型名写错,它照样回答
aichat -m local:nope -S "hi"
Hello! How can I assist you today?
配置里只有 qwen 这一个模型,传 local:nope 却正常返回了答案,退出码还是 0。它把不认识的名字回落到了该 client 的默认模型上,没有任何提示。
这个行为在脚本里很危险:本来想验证「模型是否可用」,结果永远通过。要判断模型名对不对,只能先跑 --list-models 拿全部可用名字,自己比对:
aichat --list-models
local:qwen
输出只有一行,就是配置里定义的那一个,耗时 0.14 秒。配置写错、模型名拼错,在这个列表里直接就能看出来。
服务没起,报错给了四层原因
aichat -m dead:qwen -S "hi"
Error: Failed to call chat-completions api
Caused by:
0: error sending request for url (http://127.0.0.1:5999/v1/chat/completions)
1: client error (Connect)
2: tcp connect error
3: 由于目标计算机积极拒绝,无法连接。 (os error 10061)
退出码 1,耗时 2.17 秒。这个错误链写得比大多数工具清楚:第一层说哪个接口失败了,中间两层说是连接阶段的问题,最后一层直接给系统错误码 10061。
2.17 秒这个时间说明它没有重试太多次,脚本里可以放心让它失败。
它还带角色和会话
-r 可以选角色(role),角色就是一段预设的 system prompt,存在配置目录下的 roles 里。--list-roles 能看到全部。
会话是自动保存的,同一个终端里连续对话会带上上下文,一次问答 0.51 秒里已经包含了这部分开销。要开新会话用 . 开头的命令,离开终端再回来还能接着上次的聊。
这几个功能都不复杂,但组合起来就是一个能日常用的终端 AI 入口:配置一次,之后 aichat "问题" 就能用,不用记各家 API 的调用格式。
适合谁用
手上有多个模型账号、或者同时用云端 API 和本地模型的人,配置一次就能用同一个命令切来切去。反过来,只用一家、只用网页版的人没必要装它。
还有一点要清楚:它是纯客户端,对话记录、API Key 都在本地配置文件里,不经过任何中转。这一点对介意数据出机器的人是刚需,但也意味着配置文件和 key 要自己管好。









