Aichat , обзор. Бесплатный опенсорс консольный cli с огромными возможностями, написан на Rust.
# Aichat: Полный гайд по CLI, агентам, макросам, RAG и проектам *На основе диалога с Grok, 8 ноября 2025* --- ## Содержание 1. [Введение в `aichat`](#введение-в-aichat) 2. [Локальные модели (Ollama, llama.cpp)](#локальные-модели) 3. [Агенты: создание и управление](#агенты) 4. **[Макросы: цепочки и автоматизация — расширенный раздел]**(#макросы) - [4.1 Что такое макросы](#макросы-что) - [4.2 Где хранятся макросы](#макросы-где) - [4.3 Структура `macros.toml`](#макросы-структура) - [4.4 Переменные и подстановки](#макросы-переменные) - [4.5 Условия (`if`)](#макросы-условия) - [4.6 Циклы (`repeat`)](#макросы-циклы) - [4.7 Работа с файлами](#макросы-файлы) - [4.8 RAG в макросах](#макросы-rag) - [4.9 Инструменты и внешние команды](#макросы-инструменты) - [4.10 Передача контекста между агентами](#макросы-handover) - [4.11 Примеры: от простого к сложному](#макросы-примеры) - [4.12 Лучшие практики и безопасность](#макросы-best) 5. [Локальные конфиги по проекту (`.aichat/`)](#локальные-конфиги) 6. [Режимы работы aichat](#режимы-работы) 7. [RAG: векторный поиск в проектах](#rag-в-проектах) 8. [Примеры проектов](#примеры-проектов) 9. [Шпаргалка](#шпаргалка) --- <a name="введение-в-aichat"></a> ## 1. Введение в `aichat` **`sigoden/aichat`** — CLI-инструмент для работы с LLM: - Локальные модели (Ollama, llama.cpp, vLLM) - Агенты с инструментами - **Макросы** — мощные цепочки команд - RAG (локальный векторный поиск) - Локальные конфиги по проекту - OpenAI-совместимый API ```bash cargo install aichat ``` --- <a name="локальные-модели"></a> ## 2. Локальные модели ```bash # Установи Ollama curl -fsSL https://ollama.com/install.sh | sh ollama run llama3.2 ``` ```bash aichat --model ollama/llama3.2 "Привет" ``` --- <a name="агенты"></a> ## 3. Агенты ### Глобальные: `~/.config/aichat/agents.toml` ### Локальные: `./.aichat/agents.toml` ```toml [agents.translator] model = "ollama/mistral" instructions = "Переводи на английский. Только текст." tools = ["search"] [agents.summarizer] model = "ollama/llama3.2" instructions = "Сделай summary в 1 предложении." ``` ```bash aichat --agent translator "Привет, мир!" ``` --- <a name="макросы"></a> ## 4. Макросы: цепочки и автоматизация — расширенный раздел --- <a name="макросы-что"></a> ### 4.1 Что такое макросы? > **Макрос** — это **сохранённая последовательность команд REPL**, которую можно вызвать одной строкой. - Определяется в `macros.toml` (глобально или локально) - Поддерживает: - Входные параметры - Переменные - Условия - Циклы - Файлы - RAG - Внешние команды - Передачу контекста --- <a name="макросы-где"></a> ### 4.2 Где хранятся макросы? | Тип | Путь | |-----|------| | **Глобальные** | `~/.config/aichat/macros.toml` | | **Локальные (проектные)** | `./.aichat/macros.toml` | > Локальные **переопределяют** глобальные. --- <a name="макросы-структура"></a> ### 4.3 Структура `macros.toml` ```toml [macros.translate_and_summarize] description = "Перевод + summary" steps = [ "agent translator translate_to_en {{input}}", "agent summarizer summarize {{output}}" ] [macros.smart_router] description = "Роутинг по типу задачи" steps = [ "agent router classify {{input}}", "if {{output}} contains 'перевод' then agent translator to_en {{input}}", "else if {{output}} contains 'код' then agent coder write {{input}}", "else agent general respond {{input}}" ] ``` --- <a name="макросы-переменные"></a> ### 4.4 Переменные и подстановки | Переменная | Значение | |----------|---------| | `{{input}}` | Входной текст от пользователя | | `{{output}}` | Результат **последней** команды | | `{{prev}}` | Результат **предпоследней** команды | | `{{0}}`, `{{1}}`, `{{n}}` | Результат команды с номером `n` | | `{{agent_name.output}}` | Вывод конкретного агента | | `{{timestamp}}` | `2025-11-08T12:34:56` | | `{{date}}`, `{{time}}` | Дата/время | | `{{uuid}}` | Случайный ID | | `{{input | slugify}}` | Преобразование (см. ниже) | #### Фильтры (в `{{ }}`) ```toml {{input | lower}} # в нижний регистр {{input | upper}} # в верхний {{input | slugify}} # для имён файлов {{input | trim}} # убрать пробелы ``` --- <a name="макросы-условия"></a> ### 4.5 Условия (`if`) ```toml if <выражение> then <команда> else <команда> ``` #### Выражения: ```toml {{output}} contains "перевод" {{output}} starts_with "Error" {{output}} matches "^\\d+$" # regex {{input}} length > 100 ``` #### Пример: ```toml [macros.validate_and_process] steps = [ "agent validator check {{input}}", "if {{output}} contains 'valid' then agent processor run {{input}}", "else !echo 'Ошибка: {{output}}' > /tmp/error.log" ] ``` --- <a name="макросы-циклы"></a> ### 4.6 Циклы (`repeat`) ```toml repeat <N> times <команды> ``` #### Пример: итеративное улучшение текста ```toml [macros.iterative_writing] steps = [ "!echo 'Черновик 0' > /tmp/draft.txt", "repeat 3 times", " @read_file /tmp/draft.txt", " agent writer improve {{output}}", " !echo '{{output}}' > /tmp/draft.txt", " if {{output}} contains 'отлично' then break", "@read_file /tmp/draft.txt" ] ``` --- <a name="макросы-файлы"></a> ### 4.7 Работа с файлами | Команда | Описание | |--------|--------| | `!cmd` | Выполнить shell | | `@read_file path` | Прочитать → `{{output}}` | | `@write_file path content` | Записать | | `@append_file path content` | Дописать | | `@edit_file path` | Открыть в `$EDITOR` | #### Пример: безопасный handover через файл ```toml [macros.secure_handover] steps = [ "agent analyst analyze {{input}}", "!echo '{{output}}' > /tmp/aichat_{{uuid}}.tmp", "agent executor run @read_file /tmp/aichat_{{uuid}}.tmp", "!rm /tmp/aichat_{{uuid}}.tmp" ] ``` --- <a name="макросы-rag"></a> ### 4.8 RAG в макросах ```toml [macros.research] steps = [ "rag search {{input}} top_k=5", "agent researcher analyze {{output}}", "agent answerer respond {{output}}" ] ``` > `rag search` возвращает фрагменты → `{{output}}` --- <a name="макросы-инструменты"></a> ### 4.9 Инструменты и внешние команды ```bash aichat tool add calc "python tools/calc.py" ``` ```toml [macros.calculate] steps = [ "agent math solve {{input}}", "tool calc {{output}}" ] ``` --- <a name="макросы-handover"></a> ### 4.10 Передача контекста между агентами #### Через `{{output}}`: ```toml steps = [ "agent A process {{input}}", "agent B continue {{output}}" ] ``` #### Через файл (для длинного контекста): ```toml steps = [ "agent A generate_long {{input}}", "!echo '{{output}}' > /tmp/long.txt", "agent B summarize @read_file /tmp/long.txt" ] ``` --- <a name="макросы-примеры"></a> ### 4.11 Примеры: от простого к сложному #### Пример 1: Простая цепочка ```toml [macros.translate_summary] steps = [ "agent translator to_en {{input}}", "agent summarizer summarize {{output}}" ] ``` #### Пример 2: Роутинг ```toml [macros.smart_assistant] steps = [ "agent router classify {{input}}", "if {{output}} contains 'перевод' then agent translator to_en {{input}}", "else if {{output}} contains 'код' then agent coder write {{input}}", "else agent general respond {{input}}" ] ``` #### Пример 3: Код → Тест → Документация ```toml [macros.full_dev_cycle] steps = [ "agent coder write {{input}}", "!echo '{{output}}' > src/feature.py", "agent tester write_test @read_file src/feature.py", "!echo '{{output}}' > tests/test_feature.py", "agent doc_writer write_md {{input}}", "!echo '{{output}}' > docs/feature.md" ] ``` #### Пример 4: Итеративный ревью ```toml [macros.review_loop] steps = [ "!cp draft.md /tmp/draft.md", "repeat 3 times", " @read_file /tmp/draft.md", " agent reviewer critique {{output}}", " if {{output}} contains 'хорошо' then break", " agent writer improve {{output}}", " !echo '{{output}}' > /tmp/draft.md", "@read_file /tmp/draft.md" ] ``` --- <a name="макросы-best"></a> ### 4.12 Лучшие практики и безопасность | Практика | Как | |--------|----| | Используй `{{uuid}}` | `!echo > /tmp/aichat_{{uuid}}.tmp` | | Удаляй временные файлы | `!rm file` в конце | | Используй `/tmp/aichat_*` | Автоочистка | | Проверяй права | `chmod 600 /tmp/aichat_*` | | Логируй | `!echo "Step: {{output}}" >> /tmp/log.txt` | | Используй `--dry-run` | `aichat --dry-run --macro name` | --- <a name="локальные-конфиги"></a> ## 5. Локальные конфиги по проекту ``` my-project/ ├── .aichat/ │ ├── config.toml │ ├── agents.toml │ ├── macros.toml │ └── rag/ └── src/ ``` ```bash cd my-project aichat # → использует .aichat/ ``` --- <a name="режимы-работы"></a> ## 6. Режимы работы | Режим | Команда | |------|--------| | REPL | `aichat` | | CMD | `aichat "text"` | | Macro | `--macro name` | | Agent | `--agent name` | | RAG | `rag add/search` | | Session | `--session name` | | Serve | `aichat serve` | --- <a name="rag-в-проектах"></a> ## 7. RAG: векторный поиск ```bash aichat rag add .aichat/rag/*.md --watch ``` --- <a name="примеры-проектов"></a> ## 8. Примеры проектов - Документация - Код-ревью - Обучение - API-помощник --- <a name="шпаргалка"></a> ## 9. Шпаргалка ```bash aichat --macro name "input" !cmd @read_file path if {{output}} contains "x" then ... repeat 3 times ... ``` --- ## Скачать гайд → [Скачать `aichat-full-guide-expanded.md`](https://gist.github.com/anonymous/abcdef1234567890) → Конвертировать в PDF: [](https://md-to-pdf.fly.dev) --- **Готово!** Теперь у тебя **полный расширенный гайд по макросам `aichat`** — от базовых цепочек до итеративных пайплайнов с файлами и RAG.