Ell:纯 Bash 写的 LLM 命令行工具
高热度开源 CLI 工具,用 Bash 实现 LLM 交互。轻量级可移植,对命令行开发者极其实用。
高热度开源 CLI 工具,用 Bash 实现 LLM 交互。轻量级可移植,对命令行开发者极其实用。
用于与 LLM 交互的命令行界面。
在终端中向 LLM 提问的基本用法(webm,1.6MiB)
将你的终端上下文带给 LLM 并提出问题
在终端中与 LLM 聊天
通过模板支持函数调用等更多功能
敏感信息脱敏(#14)
要使用 ell,你需要以下工具:
git clone --depth 1 https://github.com/simonmysun/ell.git \
"${XDG_DATA_HOME:-$HOME/.local/share}/ell"
echo 'export PATH="${XDG_DATA_HOME:-$HOME/.local/share}/ell:$PATH"' >> ~/.bashrc
这会将仓库克隆到 ${XDG_DATA_HOME:-$HOME/.local/share}/ell(遵循 XDG Base Directory Specification)并将其添加到你的 PATH。你可以将其克隆到任何地方;只有 PATH 上的目录才重要。
另一种方式是,如果 ~/.local/bin 已经在你的 PATH 中(在许多现代发行版上都是这样),你可以将仓库目录从 PATH 中移除,转而将启动器符号链接到该位置:
mkdir -p ~/.local/bin
ln -s "${XDG_DATA_HOME:-$HOME/.local/share}/ell/ell" ~/.local/bin/ell
链接 ell 启动器(不是 ell.sh):它将符号链接解析回克隆目录,以便始终能找到包含的辅助工具、模板和插件。
从较旧的安装升级?之前的布局(git clone ... ~/.ellrc.d,配置在 ~/.ellrc)仍然有效:~/.ellrc 仍会被读取,~/.ellrc.d 下的模板和插件仍会被识别。不需要迁移。
ell 是一个 Bash 程序,所以需要在 Bash 环境中运行,如 Git Bash、MSYS2、Cygwin 或 WSL。
ell 命令是一个纯粹的包装脚本(不是符号链接),所以即使在 git 无法在检出时创建符号链接的情况下也能工作——在 Windows 上这是默认行为,除非拥有开发者模式或管理员权限。无需额外设置;只需克隆仓库并按上述方式将其目录添加到 PATH。你调用它的方式相同,例如 ell "your prompt"。
Bash 环境在模拟 POSIX 系统的程度上有所不同,某些功能会相应降级:
为获得 Windows 上最完整的体验,优先选择 WSL 或 MSYS2 而不是 Git Bash。
下面是一个配置示例,用于从 Google 使用 gemini-1.5-flash。你需要在配置文件 ${XDG_CONFIG_HOME:-$HOME/.config}/ell/config 中设置这些变量(旧版本的 ~/.ellrc 也仍然有效):
ELL_API_STYLE=gemini
ELL_LLM_MODEL=gemini-1.5-flash
ELL_TEMPLATE=default-gemini
ELL_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ELL_API_URL=https://generativelanguage.googleapis.com/v1beta/models/
下面是一个配置示例,用于从 OpenAI 使用 gpt-4o-mini。
ELL_API_STYLE=openai
ELL_LLM_MODEL=gpt-4o-mini
ELL_TEMPLATE=default-openai
ELL_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ELL_API_URL=https://api.openai.com/v1/chat/completions
确保你的配置正确。
ell "What is the capital of France?"
ell -m gpt-4o -f user_prompt.txt
cat somecode.py | ell -f -
如果你更喜欢即时添加另一段 prompt 而不是在模板中添加:
(cat somecode.py; echo "Explain this code") | ell -f -
ell -r
# do random stuff
ell What does the error code mean?
ell How to fix it?
ell -i
在交互模式下,record mode 会自动启用,允许你在有上下文的情况下与 LLM 聊天。
ell -r -i -t ctf-gemini
ell -r -i -t ctf-openai
取决于你使用的是哪个 API。
示例应用:夺旗赛游戏(webm,2.6MiB)
请注意,ell 中对 LLM 提供商插件支持的使用是通过模板实现的。
这里的术语"插件"指的是可以被 ell 调用的脚本。它可以用于扩展 ell 的功能。LLM 提供商支持的插件不包括在这里。请参阅模板。
Backend 将 ell 适配到某个 LLM API"风格"(使用 --api-style / ELL_API_STYLE 选择)。OpenAI 和 Gemini 开箱即用支持,你也可以添加自己的。
有关 ell 的构成、启动序列、配置优先级、请求管道及其四个钩子阶段、backend 和 record mode 的详细信息,请参阅架构。
请参阅风险考量。
A: "ell" 是 shell 和 LLM 的组合。它是用来使用 LLM backend 的 shell 脚本。曾经考虑过"shellm",但被放弃了,因为可能会被误解为"she llm"。"ell" 更短,易于输入和记忆。它不与任何活跃的软件冲突。注意"shell"这个 shell 脚本的名称之所以存在,是因为它是暴露给用户的操作系统的外层。它并不表示这是 CLI 或 GUI。不幸的是,它无法缩短为"L"(同音),因为那会与太多东西冲突。
A: 因为 Bash 是类 Unix 系统上最常见的 shell,没有必要为此使用更复杂的语言。
A: ell 几乎完全用 Bash 编写,这使它非常轻量级且易于安装。它也非常易于扩展和修改。它是管道友好的,这意味着它设计用于与其他工具结合使用。
https://github.com/kardolus/chatgpt-cli - 用 Go 编写的 ChatGPT CLI。
https://github.com/kharvd/gpt-cli 用于各种 LLM backend 的 CLI,用 Python 编写。
https://github.com/JohannLai/gptcli 用于 OpenAI LLM 的 CLI,用 TypeScript 编写。
https://github.com/x-cmd/x-cmd 包含 LLM API CLI 的大量工具集合。该项目用 POSIX bash 和 awk 编写。
https://github.com/llimllib/gpt-bash-cli 用于 OpenAI API 的 CLI,将请求和响应保存到数据库中。它也使用系统钥匙环来存储 API 密钥,这更安全。该项目也用 bash 编写。
https://github.com/charmbracelet/mods 用 Go 编写的与 LLM 交互的 CLI 工具。它在会话管理方面具有丰富的功能。
https://github.com/hiquest/nicechat 用于 OpenAI 模型的 CLI 聊天界面,用 Node.js 编写。
https://github.com/closedloop-technologies/autocomplete-sh 用于 LLM 的 CLI,使用补全与用户交互。它还获取多个历史操作以提供更好的建议,也用 bash 编写。
https://github.com/plandex-ai/plandex 用于开发 AI 集成工作流的 CLI 工具,用 Go 编写。
https://github.com/simonw/llm 用于深度操作 LLM 的 CLI 工具,用 Python 编写。
https://github.com/sigoden/aichat 与各种 LLM 提供商交互的 CLI 工具,用 Rust 编写。
https://github.com/npiv/chatblade ChatGPT 的 CLI 瑞士军刀,用 Python 编写。
使用 bash tests/entry.sh 在你的主机上运行整个测试套件,或使用 bash tests/docker.sh 在 Docker 中跨受支持的 Bash 版本运行。测试是自检查的且不需要依赖(LLM backend 通过 ell_echo backend 和 file:// fixtures 离线运行,所以不需要网络或 API 密钥)。有关布局以及如何添加测试,请参阅 CONTRIBUTING.md。
欢迎贡献!请提交 issue 或发送 pull request。有关编码约定和测试套件,请参阅 CONTRIBUTING.md。
有关重要更改,请参阅 CHANGELOG.md。
该项目在 MIT License 下授权。详见 LICENSE 文件。