17 KiB
Руководство по использованию (USAGE_GUIDE)
Что это
Linux Command GPT (lcg) преобразует описание на естественном языке в готовую Linux‑команду. Инструмент поддерживает сменные провайдеры LLM (Ollama или Proxy), управление системными промптами, историю за сессию, сохранение результатов и интерактивные действия над сгенерированной командой.
Требования
- Установленный Go (для сборки из исходников) или готовый бинарник.
- Для функции «скопировать в буфер обмена»: установите
xclipилиxsel.
# Debian/Ubuntu
sudo apt-get install xclip
# или
sudo apt-get install xsel
Установка
Сборка из исходников:
git clone --depth 1 https://github.com/asrul10/linux-command-gpt.git ~/.linux-command-gpt
cd ~/.linux-command-gpt
go build -o lcg
# Добавьте бинарник в PATH
ln -s ~/.linux-command-gpt/lcg ~/.local/bin
Или скачайте готовый бинарник из раздела релизов.
Быстрый старт
Простой запрос:
lcg "хочу извлечь файл linux-command-gpt.tar.gz"
Смешанный ввод: часть из файла, часть — текстом:
lcg --file /path/to/context.txt "хочу вывести список директорий с помощью ls"
После генерации вы увидите:
🤖 Запрос: <ваше описание>
✅ Выполнено за X.XX сек
ВНИМАНИЕ: ОТВЕТ СФОРМИРОВАН ИИ. ТРЕБУЕТСЯ ПРОВЕРКА И КРИТИЧЕСКИЙ АНАЛИЗ. ВОЗМОЖНЫ ОШИБКИ И ГАЛЛЮЦИНАЦИИ.
📋 Команда:
<сгенерированная команда>
Действия: (c)копировать, (s)сохранить, (r)перегенерировать, (e)выполнить, (v|vv|vvv)подробно, (n)ничего:
Переменные окружения
Можно настроить поведение без изменения командной строки.
| Переменная | Значение по умолчанию | Назначение |
|---|---|---|
LCG_HOST |
http://192.168.87.108:11434/ |
Базовый URL API провайдера (для Ollama поставьте, например, http://localhost:11434/). |
LCG_COMPLETIONS_PATH |
api/chat |
Относительный путь эндпоинта для Ollama. |
LCG_MODEL |
codegeex4 |
Имя модели у выбранного провайдера. |
LCG_PROMPT |
См. значение в коде | Содержимое системного промпта по умолчанию. |
LCG_API_KEY_FILE |
.openai_api_key |
Файл с API‑ключом (для Ollama/Proxy не требуется). |
LCG_RESULT_FOLDER |
$(pwd)/gpt_results |
Папка для сохранения результатов. |
LCG_PROVIDER |
ollama |
Тип провайдера: ollama или proxy. |
LCG_JWT_TOKEN |
пусто | JWT токен для proxy провайдера (альтернатива — файл ~/.proxy_jwt_token). |
LCG_PROMPT_ID |
1 |
ID системного промпта по умолчанию. |
LCG_TIMEOUT |
120 |
Таймаут запроса в секундах. |
LCG_RESULT_HISTORY |
$(LCG_RESULT_FOLDER)/lcg_history.json |
Путь к JSON‑истории запросов. |
LCG_NO_HISTORY |
пусто | Если 1/true — полностью отключает запись/обновление истории. |
Примеры настройки:
# Ollama
export LCG_PROVIDER=ollama
export LCG_HOST=http://localhost:11434/
export LCG_MODEL=codegeex4
# Proxy
export LCG_PROVIDER=proxy
export LCG_HOST=http://localhost:8080
export LCG_MODEL=GigaChat-2
export LCG_JWT_TOKEN=your_jwt_token_here
Базовый синтаксис
lcg [глобальные опции] <описание команды>
Глобальные опции:
--file, -f string— прочитать часть запроса из файла и добавить к описанию.--sys, -s string— системный промпт (содержимое или ID как строка). Если не задан, используется--prompt-idилиLCG_PROMPT.--prompt-id, --pid int— ID системного промпта (1–5 для стандартных, либо ваш кастомный ID).--timeout, -t int— таймаут запроса в секундах (по умолчанию 120).--version, -v— вывести версию.--help, -h— помощь.
Подкоманды
lcg update-key(-u): обновить API‑ключ. Дляollamaиproxyне требуется — команда сообщит, что ключ не нужен.lcg delete-key(-d): удалить API‑ключ (не требуется дляollama/proxy).lcg update-jwt(-j): обновить JWT дляproxy. Токен будет сохранён в~/.proxy_jwt_token(права0600).lcg delete-jwt(-dj): удалить JWT файл дляproxy.lcg models(-m): показать доступные модели у текущего провайдера.lcg health(-he): проверить доступность API провайдера.lcg config(-co): показать текущую конфигурацию и состояние JWT.lcg history list(-l): показать историю из JSON‑файла (LCG_RESULT_HISTORY).lcg history view <id>(-v): показать запись истории поindex.lcg history delete <id>(-d): удалить запись истории поindex(с перенумерацией).- Флаг
--no-history(-nh) отключает запись истории для текущего запуска и имеет приоритет надLCG_NO_HISTORY. lcg prompts ...(-p): управление системными промптами:lcg prompts list(-l) — список всех промптов.lcg prompts add(-a) — добавить пользовательский промпт (по шагам в интерактиве).lcg prompts delete <id>(-d) — удалить пользовательский промпт по ID (>5).
lcg test-prompt <prompt-id> <описание>(-tp): показать детали выбранного системного промпта и протестировать его на заданном описании.
Подробные объяснения (v/vv/vvv)
v— кратко: что делает команда и ключевые опции, без альтернатив.vv— средне: назначение, основные ключи, 1–2 примера, кратко об альтернативах.vvv— максимально подробно: полный разбор ключей, сценариев, примеры, разбор альтернатив и сравнений.
После вывода подробного объяснения доступно вторичное меню: Действия: (c)копировать, (s)сохранить, (r)перегенерировать, (n)ничего:
Провайдеры
Ollama (LCG_PROVIDER=ollama)
- Требуется запущенный Ollama API (
LCG_HOST, напримерhttp://localhost:11434/). models,healthи генерация используют REST Ollama (/api/tags,/api/chat).- API‑ключ не нужен.
Proxy (LCG_PROVIDER=proxy)
- Требуется доступ к прокси‑серверу (
LCG_HOST) и JWT (LCG_JWT_TOKENили файл~/.proxy_jwt_token). - Основные эндпоинты:
/api/v1/protected/sberchat/chatи/api/v1/protected/sberchat/health. - Команды
update-jwt/delete-jwtпомогают управлять токеном локально.
Рекомендации по выбору провайдера, модели и таймаутов
Выбор провайдера
- Ollama: выбирайте для локальной работы (офлайн/частные данные), когда есть доступ к GPU/CPU и готовность поддерживать локальные модели. Минимальные задержки сети, полная приватность.
- Proxy: выбирайте для централизованного хостинга моделей, более мощных/обновляемых моделей, простоты развёртывания у команды. Обязательно используйте HTTPS и корректный
JWT.
Выбор модели
- Для генерации Linux‑команд подходят компактные «code»/«general» модели (по умолчанию
codegeex4). - Для подробных объяснений (
v/vv/vvv) точность выше у более крупных моделей (например, семейства LLaMA/Qwen/GigaChat), но они медленнее. - Русскоязычные запросы часто лучше обрабатываются в
GigaChat-*(режим proxy), английские — в популярных open‑source (Ollama). - Балансируйте: скорость (малые модели) vs качество (крупные модели). Тестируйте
lcg modelsи подбирайтеLCG_MODEL.
Таймауты
- Стартовые значения: локально с Ollama — 60–120 сек, удалённый proxy — 120–300 сек.
- Увеличьте таймаут для больших моделей/длинных запросов. Флаг
--timeoutперекрываетLCG_TIMEOUTна время запуска. - Если часто видите таймауты — проверьте здоровье API (
lcg health) и сетевую доступностьLCG_HOST.
Практические советы
- Если данные чувствительные — используйте Ollama локально и
--no-historyпри необходимости. - Для «черновой» команды начните с
Ollama + небольшая модель; для «объяснений и альтернатив» используйте более крупную модель/Proxy. - Не вставляйте секреты в запросы. Перед выполнением (
e) проверяйте команду вручную. - Для структуры API см.
API_CONTRACT.md(эндпоинты и форматы запросов/ответов).
Системные промпты
Встроенные (ID 1–5):
| ID | Name | Описание |
|---|---|---|
| 1 | linux-command | «Ответь только Linux‑командой, без форматирования и объяснений». |
| 2 | linux-command-with-explanation | Сгенерируй команду и кратко объясни, что она делает (формат: COMMAND: explanation). |
| 3 | linux-command-safe | Безопасные команды (без потери данных). Вывод — только команда. |
| 4 | linux-command-verbose | Команда с подробными объяснениями флагов и альтернатив. |
| 5 | linux-command-simple | Простые команды, избегать сложных опций. |
Пользовательские промпты сохраняются в ~/.lcg_prompts.json и доступны между запусками.
Сохранение результатов
При выборе действия s ответ сохраняется в LCG_RESULT_FOLDER (по умолчанию: ./gpt_results) в файл вида:
gpt_request_<MODEL>_YYYY-MM-DD_HH-MM-SS.md
Структура файла (команда):
# <заголовок>— H1, это ваш запрос, при длине >120 символов обрезается до 116 +....## Prompt— запрос (включая системный промпт).## Response— сгенерированная команда.
Структура файла (подробное объяснение):
# <заголовок>— H1, ваш исходный запрос (с тем же правилом обрезки).## Prompt— исходный запрос.## Command— первая сгенерированная команда.## Explanation and Alternatives (model: <MODEL>)— подробное объяснение и альтернативы.
Выполнение сгенерированной команды
Действие e запустит команду через bash -c. Перед запуском потребуется подтверждение y/yes. Всегда проверяйте команду вручную, особенно при операциях с файлами и сетью.
Примеры
- Базовый запрос с Ollama:
export LCG_PROVIDER=ollama
export LCG_HOST=http://localhost:11434/
export LCG_MODEL=codegeex4
lcg "хочу извлечь linux-command-gpt.tar.gz"
- Полный ответ от LLM (пример настройки):
LCG_PROMPT='Provide full response' LCG_MODEL=codellama:13b \
lcg 'i need bash script to execute command by ssh on array of hosts'
- Proxy‑провайдер:
export LCG_PROVIDER=proxy
export LCG_HOST=http://localhost:8080
export LCG_MODEL=GigaChat-2
export LCG_JWT_TOKEN=your_jwt_token_here
lcg "I want to extract linux-command-gpt.tar.gz file"
lcg health
lcg config
lcg update-jwt
- Работа с файлами и промптами:
lcg --file ./context.txt "сгенерируй команду jq для выборки поля name"
lcg --prompt-id 2 "удали все *.tmp в текущем каталоге"
lcg --sys 1 "показать размер каталога в человеко‑читаемом виде"
- Диагностика и модели:
lcg health
lcg models
История
lcg history выводит историю текущего процесса (не сохраняется между запусками, максимум 100 записей):
lcg history list
Типичные проблемы
- Нет ответа/таймаут: увеличьте
--timeoutилиLCG_TIMEOUT, проверьтеLCG_HOSTи сетевую доступность. healthпадает: проверьте, что провайдер запущен и URL верный; дляproxy— что JWT валиден (lcg config).- Копирование не работает: установите
xclipилиxsel. - Нет допуска к папке результатов: настройте
LCG_RESULT_FOLDERили права доступа. - Для
ollama/proxyAPI‑ключ не нужен; командыupdate-key/delete-keyпросто уведомят об этом.
JSON‑история запросов
- Путь задаётся
LCG_RESULT_HISTORY(по умолчанию:$(LCG_RESULT_FOLDER)/lcg_history.json). - Формат — массив объектов:
[
{
"index": 1,
"command": "хочу извлечь linux-command-gpt.tar.gz",
"response": "tar -xvzf linux-command-gpt.tar.gz",
"explanation": "... если запрашивалось v/vv/vvv ...",
"system_prompt": "Reply with linux command and nothing else ...",
"timestamp": "2025-10-19T13:05:39.000000000Z"
}
]
- Перед новым запросом, если такой уже встречался, будет предложено вывести сохранённый результат из истории с указанием даты.
- Сохранение в файл истории выполняется автоматически после завершения работы (любое действие, кроме
v|vv|vvv). - При совпадении запроса в истории спрашивается о перезаписи записи.
- Подкоманды истории работают по полю
indexвнутри JSON (а не по позиции массива): используйтеlcg history view <index>иlcg history delete <index>. - При показе из истории запрос к API не выполняется: выводится CAPS‑предупреждение и далее доступно обычное меню действий над командой/объяснением.
Лицензия и исходники
См. README и репозиторий проекта. Предложения и баг‑репорты приветствуются в Issues.