Агент для создания стихов на базе LLM
Интерактивный агент для сочинения стихотворений на Русском языке с помощью большой языковой модели (LLM). Агент реализует многофазовый алгоритм:
- сбор фактов
- согласование сюжета
- итеративное написание строф с проверкой размера и рифмы
- и финальное сохранение
Пример работы
Баллада о Плюсах
Завёл я раз массив в плюсах,
Он десяток вмещает частей.
Но шагнул за границу — и ах!
Злой сегфолт прилетел без затей.
Я сам за память отвечал,
Набрал легко — не удалил.
Ресурс утёк — и я пропал,
Всё место мусором забил!
Что за нрав у программы — беда!
Словно призрак в коде, всегда.
Притаился, не дрогнет, молчит.
А потом, что захочет, — творит!
Написал я простейший шаблон,
Компилятор взбесился — и вон:
Сто страниц сообщений подряд,
Словно демона вызвать — обряд!
Пусть сегфолты грозят — не беда,
И шаблоны грызут, не щадя.
Я на плюсах останусь, друзья!
Это путь, отступать мне нельзя.
Архитектура
main.py — точка входа, цикл взаимодействия с LLM
├── tools_manager.py — регистрация и диспетчеризация инструментов
├── context_manager.py — управление историей сообщений (токен-лимит, сжатие)
├── creativity_manager.py — управление температурой LLM
├── user_input.py — обработка команд пользователя
├── system.md — системный промпт: роль, правила, алгоритм
├── user.md — начальный запрос пользователя
└── tools/
├── accents.py — расстановка ударений (ruaccent)
├── file.py — чтение/запись/замена в файлах
├── web_search.py — поиск в интернете (DuckDuckGo)
└── memory.py — векторная долговременная память (ChromaDB + bge-m3)
Как это работает
Алгоритм создания стихотворения
- Фаза 0 — Понимание запроса. Агент выясняет тему, если она не указана.
- Фаза 1 — Исследование. Поиск фактов в интернете, сохранение в векторную память.
- Фаза 2 — Согласование сюжета. Агент показывает план (разбивку на строфы) и ждёт одобрения пользователя.
- Фаза 3 — Написание строф. Для каждой строфы: генерация сюжета → подбор размера → цикл строк с проверкой ударений → показ пользователю → исправления по обратной связи.
- Фаза 4 — Завершение. Финальная запись в файл.
Инструменты LLM
| Инструмент | Описание |
|---|---|
get_accents |
Расставляет ударения в русском тексте (проверка ритма) |
read_file / write_file / search_replace |
Операции с файлами |
web_search |
Поиск в интернете через DuckDuckGo |
add_fact / search_facts / delete_facts |
Долговременная векторная память |
set_temperature |
Управление креативностью модели (0.0–2.0) |
Управление температурой
Модель автоматически переключает температуру в зависимости от фазы работы:
- 0.1–0.4 — точный анализ (проверка размера, грамматики)
- 0.5–0.8 — стандартные операции (файлы, поиск, диалог)
- 0.9–1.5 — творческий режим (генерация сюжета, строк, рифм)
- 1.2–1.5 — «прорыв» при застревании
Команды пользователя
/stop — завершить генерацию
/show — показать текущий текст
/save [файл] — сохранить в файл
/redo — отменить последний ответ модели
/текст — дать инструкцию для продолжения
[Enter] — продолжить автоматически
Управление контекстом
Контекстное окно (32K токенов) управляется автоматически:
- Длинные ответы инструментов обрезаются (начало + конец).
- При приближении к лимиту удаляются старые сообщения (с сохранением краткого содержания).
- В критической ситуации внедряется сжатая сводка вместо первого непрограммного сообщения.
- После цикла инструментов очищаются все tool-сообщения.
Требования
- Python 3.10+
- OpenAI-совместимый API-ключ (endpoint:
https://polza.ai/api/v1)
Установка
pip install openai httpx chromadb sentence-transformers ruaccent beautifulsoup4 ddgs requests huggingface-hub torch
Настройка
-
Укажите ваш API-токен в
main.py:LM_API_TOKEN = "ваш_токен" - При необходимости измените модель или endpoint.
- Отредактируйте
user.md— начальный запрос к модели.
Запуск
python main.py
Агент начнёт диалог, следуя алгоритму из system.md. После каждой строфы он запрашивает подтверждение пользователя.
Примечания
- Все операции с файлами ограничены текущей рабочей директорией.
- Поиск в интернете использует DuckDuckGo (без API-ключа) с фильтрацией нежелательных доменов.
- Векторная память использует
BAAI/bge-m3для эмбеддингов и ChromaDB для хранения. - Модель ударений —
ruaccent(размер turbo3.1). - При первом запуске модель эмбеддингов скачивается из HuggingFace Hub (кэшируется локально).