
Bash4LLM+: работаем с LLM-API из терминала без зависимостей
Bash4LLM+ — лёгкий bash-скрипт для работы с LLM API (Groq, OpenAI-совместимые). Только curl и jq, никаких зависимостей. Полный разбор.
Зачем вообще запускать LLM из bash?
Представьте: вы пишете автоматизированный пайплайн на сервере — никакого GUI, никакого Python-окружения, только чистый шелл. Или у вас Android-телефон с Termux и желание поспрашивать GPT-подобную модель прямо из командной строки. Или вы просто не хотите тащить в проект тяжёлый SDK ради одного-единственного API-вызова.
Именно в таких сценариях появляются инструменты вроде Bash4LLM+ — минималистичного bash-обёртки для LLM API, которая опубликована на Hacker News под рубрикой «Show HN» и вызвала живой интерес в сообществе.
«Только Bash, curl и jq. Никаких зависимостей, никаких eval, никакого /tmp.» — концепция проекта одной строкой.
Давайте разберём, что это такое, зачем нужно и как начать пользоваться уже сегодня.
Что такое Bash4LLM+ и в чём его идея
Bash4LLM+ использует только Bash, curl и jq. С его помощью можно отправлять промпты, запускать мини-чат, обрабатывать файлы построчно, стримить вывод и сохранять метаданные сессий в формате JSON. При этом в коде намеренно не используется системный /tmp и не применяется eval.
По сути, Bash4LLM+ — это безопасный, полностью аудируемый CLI-обёртка для Chat Completions API, совместимого с OpenAI-форматом (в первую очередь Groq), который при этом расширяем на другие провайдеры.
Инструмент совместим со всеми Unix-подобными окружениями: Linux, macOS, WSL, Cygwin, Termux (Android), BSD. Изначально он ориентирован на Groq’s OpenAI-совместимый API и позиционируется как безопасный и портативный.
Архитектура: как устроен один скрипт внутри
Bash4LLM+ представляет собой единственный Bash-скрипт, самодостаточный, читаемый и верифицируемый. Достаточно скачать его, сделать исполняемым, экспортировать API-ключ — и можно сразу работать.
Модульная структура скрипта разбита на логические секции:
Архитектура включает модульные секции: PRECORE_BOOT, PRECORE_RUN, PROVIDER, CORE_SETUP, CORE_PROVIDER — каждая отвечает за свою зону ответственности.
graph TD
A[Пользователь вводит промпт] --> B[PRECORE_BOOT: инициализация]
B --> C[PRECORE_RUN: парсинг аргументов]
C --> D[PROVIDER: выбор провайдера]
D --> E[CORE_SETUP: конфигурация модели]
E --> F[CORE_PROVIDER: HTTP-запрос через curl]
F --> G{Формат вывода}
G -->|text| H[Текст в терминал]
G -->|json| I[Raw JSON]
G -->|stream| J[Стриминг токенов]
H --> K[Сохранение сессии NDJSON]
I --> K
J --> K
Безопасность заложена в дизайн: нет использования /tmp, нет eval, применяются рестриктивные права доступа, реализована продвинутая валидация провайдеров.
Список моделей получается динамически через GET-запрос к API — ни одна модель не захардкожена в скрипте.
Установка и первый запуск
Процесс установки намеренно сделан максимально простым:
# 1. Скачиваем скрипт
curl -O https://raw.githubusercontent.com/kamaludu/bash4llm/main/bash4llm.sh
# 2. Делаем исполняемым
chmod +x bash4llm.sh
# 3. Экспортируем ключ Groq (бесплатно на console.groq.com)
export GROQ_API_KEY="gsk_ваш_ключ_здесь"
# 4. Первый запрос!
./bash4llm.sh "Объясни разницу между grep и awk"
~/.local/bin/llm и добавьте директорию в $PATH — тогда можно вызывать просто llm "ваш вопрос" из любого места в системе.Основные режимы работы
Скрипт умеет отправлять одиночные промпты, запускать мини-чат, обрабатывать файлы построчно, стримить вывод и сохранять метаданные сессий в формате JSON.
# Одиночный промпт
./bash4llm.sh "Напиши регулярку для валидации email"
# Интерактивный чат (REPL-режим)
./bash4llm.sh --chat
# Стриминг ответа (токены появляются по мере генерации)
./bash4llm.sh --stream "Расскажи историю про пингвина"
# Обработка файла построчно (каждая строка = отдельный промпт)
./bash4llm.sh --batch prompts.txt
# Сохранить результат в файл
./bash4llm.sh --save --output ./results/ "Проанализируй этот код"
# Системный промпт
./bash4llm.sh --system "Ты эксперт по Linux" "Как оптимизировать swap?"
Управление параметрами модели
Доступны параметры температуры (от 0.0 до 2.0) и максимального количества токенов — всё управляется флагами командной строки.
# Температура = 0 (детерминированный вывод)
./bash4llm.sh --temperature 0.0 "Сколько будет 2+2?"
# Ограничение токенов
./bash4llm.sh --max-tokens 100 "Коротко о квантовых компьютерах"
# Сырой JSON-ответ
./bash4llm.sh --json "Список столиц СНГ"
Сессии и работа с историей диалога
Одна из ключевых фич Bash4LLM+ — встроенная система сессий. Это позволяет вести полноценный многоходовой диалог и возвращаться к нему позже.
Сессия безопасно инициализируется пустой (создаются NDJSON-файл и метаданные) и регистрируется в глобальном индексе сессий без выполнения API-вызовов. При этом требуется совместное использование с флагом --session <id>.
# Начать новую сессию с именем "work"
./bash4llm.sh --session work --init
# Продолжить существующую сессию
./bash4llm.sh --session work "Помнишь, мы обсуждали архитектуру?"
# Показать текущую конфигурацию
./bash4llm.sh --config
# Диагностика системы
./bash4llm.sh --diag
Система UI-состояния (ui_state) позволяет CORE-модулю постоянно экспортировать метаданные в атомарном JSON-формате — это открывает интеграцию с GUI или внешними инструментами.
# Анализируем лог-файл через LLM
cat /var/log/nginx/error.log | tail -50 | ./bash4llm.sh --stream "Найди паттерны ошибок и предложи решения"
# Генерируем документацию для кода
cat myscript.py | ./bash4llm.sh "Напиши docstring для каждой функции"
# Пакетная обработка: перевод файла
cat english_texts.txt | ./bash4llm.sh --batch - "Переведи на русский:"
Сравнение с альтернативами
Bash4LLM+ — не первый инструмент в своей нише. Посмотрим, как он соотносится с конкурентами:
| Инструмент | Язык | Зависимости | Сессии | Стриминг | Termux | Лицензия |
|---|---|---|---|---|---|---|
| Bash4LLM+ | Bash | curl + jq | ✅ NDJSON | ✅ | ✅ | Open Source |
| llm.sh | Bash | curl + jq | ❌ | ❌ | ⚠️ | Open Source |
| Simon Willison’s llm | Python | pip (много) | ✅ SQLite | ✅ | ❌ | Open Source |
| LiteLLM Proxy | Python | pip (много) | ✅ | ✅ | ❌ | Open Source |
| LLM-Shell | Python | pip | ✅ | ✅ | ❌ | Open Source |
Ближайший аналог — llm.sh, простой bash-скрипт для работы с LLM из командной строки, вдохновлённый инструментом Саймона Уиллисона, но с единственными зависимостями в виде curl и jq. Bash4LLM+ идёт дальше: добавляет сессии, батч-режим, стриминг и систему шаблонов.
ps aux и истории. Всегда используйте переменные окружения: export GROQ_API_KEY=... в ~/.bashrc или через менеджер секретов.Практические сценарии использования
1. DevOps и мониторинг
#!/bin/bash
# Автоматический анализ алертов
ALERT_MSG=$(cat /tmp/alert.txt)
export GROQ_API_KEY="$SECRET_API_KEY"
./bash4llm.sh \
--system "Ты DevOps-инженер. Давай краткие actionable советы." \
--max-tokens 300 \
"Проанализируй этот алерт и предложи 3 шага: $ALERT_MSG"
2. Обработка данных в CI/CD
# Автоматическая генерация changelog из git diff
git diff HEAD~1 HEAD | ./bash4llm.sh \
"Напиши human-readable changelog для этого diff в формате Keep a Changelog"
3. Терминальный ассистент на Android (Termux)
Совместимость с Termux на Android делает инструмент уникальным — вы буквально держите LLM-клиент в кармане без каких-либо дополнительных установок кроме базовых пакетов.
# В Termux
pkg install curl jq
export GROQ_API_KEY="gsk_..."
./bash4llm.sh "Как настроить SSH на Android?"
4. Шаблоны промптов
Bash4LLM+ поддерживает систему шаблонов через переменную BASH4LLM_TEMPLATES_DIR — можно хранить часто используемые системные промпты в файлах и вызывать их по имени, не вводя каждый раз заново.
# Структура шаблонов
~/.config/bash4llm/templates/
├── code-review.txt
├── sql-expert.txt
└── bash-helper.txt
# Использование
./bash4llm.sh --template code-review "$(cat myfile.py)"
Конфигурация и тонкая настройка
Конфигурация Bash4LLM+ хранится в $BASH4LLM_CONFIG_DIR/config и включает параметры: MODEL, TURE (температура), MAX_TOKENS, FORMAT, THRESHOLD. Кроме того, поддерживается файл model.$PROVIDER для задания модели по умолчанию для конкретного провайдера.
# ~/.config/bash4llm/config
MODEL=llama-3.3-70b-versatile
TURE=0.7
MAX_TOKENS=2048
FORMAT=text
THRESHOLD=1000
Флаги вывода дают полный контроль над форматом ответа:
Доступны четыре режима вывода: сырой интегральный JSON, форматированный JSON, стандартный извлечённый текст (поведение по умолчанию) и сырой текст без финальных разделителей.
Заключение: когда стоит выбрать Bash4LLM+
Bash4LLM+ — это не замена полноценным SDK или таким инструментам, как LiteLLM. Это специализированный инструмент для конкретной ниши: автоматизация на чистом bash без лишних зависимостей.
Выбирайте Bash4LLM+, если:
- Вы работаете в среде с ограниченным набором пакетов (контейнеры, встраиваемые системы, Termux)
- Нужно быстро встроить LLM-запрос в существующий bash-скрипт
- Важна прозрачность и аудируемость кода (один читаемый файл)
- Вы цените философию UNIX: делай одно дело хорошо
Не выбирайте Bash4LLM+, если:
- Нужна мультимодальность (изображения, аудио)
- Требуется сложная оркестрация агентов
- Критична поддержка десятков провайдеров из коробки
Лучший инструмент — тот, который исчезает в процессе работы. Bash4LLM+ именно такой: скачал, запустил, получил ответ. Никакого шума.
- Зайдите на console.groq.com и создайте бесплатный API-ключ
- Скачайте скрипт:
curl -O https://raw.githubusercontent.com/kamaludu/bash4llm/main/bash4llm.sh && chmod +x bash4llm.sh - Попробуйте:
export GROQ_API_KEY=ваш_ключ && ./bash4llm.sh "Hello, Llama!" - Почитайте полную документацию на GitHub