自然语言转 Bash 命令行助手
Termi 让你可以用自然语言描述想要做的事情,它会调用多种 LLM(OpenAI GPT、Azure OpenAI、Google Gemini、Anthropic Claude、Llama.cpp 等)将其翻译成可以直接粘贴执行的 Bash 命令,并在终端内提供交互式候选选择与一键执行。
- 自然语言 ➜ 命令行:输入任何中文需求,Termi 会返回可直接运行的 Bash 命令。
- 智能追问:当关键信息缺失时,LLM 会自动以中文向你提问,补全上下文。
- TUI 候选列表:基于 Bubble Tea 的终端 UI,显示多条候选命令,↑/↓ 选择,Enter 执行。
- 完整交互执行:命令通过
bash -c启动,标准输入/输出与当前终端直连,体验与手动输入无异。 - 零本地规则依赖:所有解析逻辑均在 LLM 中完成,代码简洁易于扩展。
确保本机拥有 Go ≥ 1.23(推荐使用最新版)。
$ go version$ git clone https://github.com/aimuz/termi.git
$ cd termiTermi 支持多种 LLM 提供商,请设置其中一个环境变量:
$ export OPENAI_API_KEY="sk-..."
$ export OPENAI_BASE_URL="https://api.openai.com" # 可选,自定义API地址$ export AZURE_OPENAI_API_KEY="your-key"
$ export AZURE_OPENAI_BASE_URL="https://your-resource.openai.azure.com"
$ export AZURE_OPENAI_DEPLOYMENT_ID="your-deployment-id"
$ export AZURE_OPENAI_API_VERSION="2023-12-01-preview" # 可选$ export GEMINI_API_KEY="your-gemini-api-key"
$ export GEMINI_MODEL="gemini-pro" # 可选,默认为 gemini-pro$ export ANTHROPIC_API_KEY="your-claude-api-key"
$ export CLAUDE_MODEL="claude-3-haiku-20240307" # 可选$ export LLAMA_CPP_BASE_URL="http://localhost:8080"或者,你也可以创建配置文件 ~/.config/termi/config.json:
{
"llm": {
"provider": "openai",
"openai": {
"api_key": "your-api-key",
"model": "gpt-3.5-turbo",
"timeout": 30
}
}
}参考 config.example.json 获取完整配置示例。
# 在当前目录编译二进制
$ go build -o termi .
# 或直接安装到 GOPATH/bin,并加入 PATH
$ go install go.aimuz.me/termi@latest$ termi 我想对 baidu.com 发起 ping
候选命令 (↑/↓ 选择, Enter 确定, q 退出):
➜ 1. ping -c 4 baidu.com [llm]
2. ping baidu.com [llm]按 Enter 即开始执行,输出与你在终端直接输入 ping -c 4 baidu.com 完全一致。
如果缺少参数,Termi 会先向你提问:
$ termi 删除文件 你要删除哪个文件(支持通配符)? _填写后继续生成命令并进入候选界面。
graph TD
A[自然语言语句] --> B(AskSmart 调用 GPT-3.5/GPT-4o)
B -->|返回 command| C[候选列表]
B -->|返回 ask| D[追问用户]
D -->|补全| B
C --> E[Bubble Tea UI 选择]
E --> F[Runner bash -c 执行]
核心包概览:
internal/llmOpenAI API 封装,提供Ask/AskCommand/AskSmart三种模式。internal/uiBubble Tea TUI,实现候选展示与加载动画。internal/runner包装exec.Command,负责命令执行与 I/O 直通。internal/suggest候选命名空间(预留本地规则扩展)。cmd/termi/main.goCLI 入口,整合各组件。
- 为什么提示 "未找到任何 LLM 提供商配置"?
请设置对应的环境变量或创建配置文件,参考上面的配置说明。 - 支持 Windows 吗?
理论上可以,但尚未充分测试,欢迎 PR。 - 如何切换不同的 LLM 提供商?
通过设置不同的环境变量或修改配置文件中的provider字段。 - 可以同时配置多个提供商吗?
可以,但同时只会使用一个提供商,优先级:配置文件 > 环境变量检测(OpenAI > Azure > Gemini > Claude > Llama.cpp)。
欢迎提交 Issue、PR,或在 Discussions 中交流新点子。
- Fork 仓库并创建分支;
- 保持
go vet,go test通过; - 提交 PR 时附上说明截图 / 文字。
- 支持本地命令规则建议
- 接入更多 LLM (Gemini, Llama-cpp, Azure OpenAI, Claude)
- 增加批量模式,直接输出命令而不执行
- 增加
--dry-run/--yes等安全选项 - 支持插件系统和自定义提供商
MIT © 2025 aimuz & Contributors