---
name: image-bot
description: >
  Собирает в Савви агента, который рисует картинки по запросу: человек пишет «нарисуй…» — агент сам составляет
  подробный промпт, выбирает формат (квадрат, сторис, обложка) и присылает готовое изображение; по фото умеет
  переделать картинку. Подбирает модель генерации по цене и качеству, проверяет в тестовом чате и ведёт
  пользователя по подключению Telegram-бота, чтобы бот отвечал и рисовал прямо в Telegram. Всё через MCP Савви.
  Триггеры: «бот для картинок», «агент генерирует картинки», «нейросеть рисует в телеграме»,
  «телеграм-бот с генерацией изображений», «/image-bot».
---

# Агент-художник с Telegram-ботом (Савви)

Человек пишет боту в Telegram: «нарисуй кота-космонавта» или «сделай сторис с надписью «Скидка 30%»».
Текстовая модель агента превращает просьбу в подробный промпт и вызывает действие «Сгенерировать изображение»
нужного формата. Картинка приходит в чат. Каждая картинка списывается с баланса аккаунта Савви.

## 0. Проверка перед стартом
- `get_info_about_self_user` — MCP отвечает, видно баланс (`user_balance.total_tokens`, 1 токен = 0,001 ₽).
  Не отвечает → попроси пользователя: `/mcp` → `suvvy` → Authenticate.
- Баланс близок к нулю → тестовые картинки молча не придут. Скажи пользователю пополнить.

## 1. Вопросы пользователю (одним сообщением, с вариантами по умолчанию)
1. Для чего бот: картинки для постов, открытки, иллюстрации, обложки, карточки товаров, всё подряд.
   По умолчанию — «всё подряд».
2. Нужные форматы: квадрат 1:1, вертикаль 9:16 (сторис, рилс), горизонталь 16:9 (обложка, баннер). По умолчанию — все три.
3. Переделывать присланные фото (сменить фон, стиль, добавить предмет)? По умолчанию — да.
4. Имя бота и приветствие. По умолчанию — «Художник»: «Привет! Опишите картинку — нарисую. Можно прислать фото и сказать, что изменить.»
5. Чего не рисовать (кроме общих запретов ниже).
6. Бот для себя и команды или для всех? Для всех — обязательно лимит расходов (раздел 7).

## 2. Модель генерации
Вызови `get_image_model_list` и бери **только `is_admin_only: false`**. Ориентир по замерам (октябрь 2026, 1 картинка):

| Модель (`_id`) | Цена | Когда брать |
|---|---|---|
| **GPT Image 2.5 Flare** (`gpt-image-2.5-flare`) | ≈1,1 ₽ за 1K, ≈2,2 ₽ за 2K | **по умолчанию**: дешевле всех, хорошо рисует текст на картинке, все форматы, умеет менять фото |
| Nano Banana 2 Lite (`nano-banana-2-lite`) | ≈5 ₽ | простые картинки; разрешение не задаётся |
| Nano Banana 2 (`nano-banana-2`) | ≈10 ₽ | середина по цене |
| Nano Banana Pro (`nano-banana-pro`) | ≈21 ₽ за 1K | лучший фотореализм и сложные сцены, до 14 фото-референсов |

Цены — ориентир, проверь на первой тестовой картинке (раздел 5). Скидка тарифа на картинки не действует.
Покажи пользователю таблицу и рекомендацию: GPT Image 2.5 Flare, 2K (чётко, ≈2,2 ₽). Модели нет в списке → возьми
следующую по таблице и скажи об этом.

## 3. Создать агента
1. `create_instance(name="<Имя бота> — генератор картинок")`. Агент создаётся с шаблонной инструкцией продавца
   и шаблонными подсказками — раздел 5 их обязательно заменяет.
2. Текстовая модель — `update_instance_llm(llm_code="gpt-4.1-mini", randomness=30, max_answer_tokens=400)`.
   Она только пишет промпт и короткий ответ, дорогая не нужна. Открыта клиентам (проверено 05.11.2026);
   если вызов вернул ошибку доступа — возьми `gpt-4.1`. Список `get_llm_list` огромный (больше 100 моделей):
   если ответ не влез, ищи нужный `_id` в сохранённом файле.
3. Чтобы агент видел присланные фото, нужен `image_description_mode="vision"` — у нового агента обычно уже стоит,
   проверь в `get_instance`.

## 4. Действия генерации (`create_custom_tool`, по одному на формат)
Соотношение сторон в действии фиксированное, поэтому на каждый формат — своё действие.
Обязательно `is_enabled: true` (по умолчанию false — агент не увидит действие).

Квадрат:
```json
{"title":"Нарисовать квадратную картинку 1:1","tool_name":"draw_square",
 "tool_description":"Нарисовать картинку в квадратном формате 1:1. Вызывай по умолчанию, когда просят нарисовать картинку и формат не назван.",
 "is_enabled":true,
 "arguments":{"prompt":{"type":"string","description":"Подробный промпт на английском: что изображено, стиль, композиция, свет, палитра, детали. Если на картинке нужен текст — впиши его в кавычках на языке пользователя."}},
 "actions":[{"type":"generate_image","parameters":{
   "prompt":{"parts":[{"type":"tool_argument","argument":"prompt"}]},
   "model":"gpt-image-2.5-flare","resolution":"2K","aspect_ratio":"1:1","result_file_name":"picture.png"}}]}
```
Ещё два так же, меняются `title`, `tool_name`, `tool_description`, `aspect_ratio`:
- `draw_vertical` — `"9:16"`: «Вызывай, когда просят сторис, рилс, вертикальную картинку, обои на телефон.»
- `draw_horizontal` — `"16:9"`: «Вызывай, когда просят обложку, баннер, горизонтальную картинку, превью для видео.»

Переделать фото (если пользователь хочет):
```json
{"title":"Переделать присланное фото","tool_name":"edit_photo",
 "tool_description":"Изменить изображение, которое прислал пользователь: сменить фон, стиль, добавить или убрать предмет. Вызывай, только когда в чате есть фото пользователя.",
 "is_enabled":true,
 "arguments":{"photo":{"type":"file_id","file_type":"image","description":"Фото, которое прислал пользователь"},
              "prompt":{"type":"string","description":"Что изменить, на английском, подробно. Что оставить без изменений — тоже опиши."}},
 "actions":[{"type":"edit_image","parameters":{
   "prompt":{"parts":[{"type":"tool_argument","argument":"prompt"}]},
   "model":"gpt-image-2.5-flare","resolution":"2K","aspect_ratio":"1:1","file_argument":"photo","result_file_name":"edited.png"}}]}
```
Модель везде одна — та, что выбрана в разделе 2. У Nano Banana 2 Lite `resolution` не передавай.

## 5. Инструкция (`update_instance_mcp`, поле `instruction`)
```
#РОЛЬ
Ты — <Имя>, бот-художник. Рисуешь картинки по просьбе пользователя в Telegram.

#КАК РАБОТАТЬ
Просят нарисовать, сделать картинку, открытку, обложку, сторис — сразу вызывай действие рисования, не задавай лишних вопросов.
Формат: сторис, рилс, вертикальная, обои на телефон — draw_vertical; обложка, баннер, горизонтальная, превью — draw_horizontal; в остальных случаях — draw_square.
Промпт пиши на английском, подробно: что изображено, стиль, композиция, свет, палитра.
Надпись на картинке — только та, которую назвал пользователь: впиши её в кавычках на его языке и добавь в конце промпта «No other text, no logos, no brand names». Пользователь надпись не называл — добавь в конце промпта «No text, no logos». Сам текст не придумывай.
Просьба совсем пустая («нарисуй что-нибудь») — нарисуй сам на свой выбор, не переспрашивай.
Пользователь прислал фото и просит изменить его — вызывай edit_photo.
Просят поправить последнюю картинку — нарисуй заново: прежний промпт плюс правки.
Одна просьба — одна картинка. Несколько вариантов — только если попросили, не больше трёх.

#ОТВЕТЫ
После картинки — одна короткая фраза: «Готово! Хотите что-то поменять — напишите.»
Пишешь по-русски, коротко, без markdown.
На «что умеешь?» — одной-двумя фразами: рисую по описанию в трёх форматах и переделываю фото.

#ОГРАНИЧЕНИЯ
Не рисуй откровенное, жестокое, оскорбительное, картинки с реальными известными людьми, чужие логотипы и товарные знаки. Вежливо откажи и предложи другой вариант.
Никогда не пиши, что картинка готова, если действие не вызвано или вернуло ошибку. Ошибка — извинись и предложи попробовать ещё раз.
```
Добавь стартовые подсказки: `update_instance_mcp(starting_message_list=[{"title":"Кот-космонавт","text":"Нарисуй рыжего кота-космонавта в стиле детской книги"},{"title":"Сторис со скидкой","text":"Сделай сторис для кофейни с надписью «Скидка 30%»"}])`.

## 6. Проверка в тестовом чате
`get_new_test_dialogue_for_instance_by_instance_id` → `send_message_to_test_dialogue_by_id(dialogue_id, fake_channel="telegram_bot", messages=[…])`
→ `get_dialogue_messages_by_dialogue_id(dialogue_id, elements=6)`. Отправка вернётся после генерации (30–40 секунд);
если картинки в первом чтении нет — прочитай сообщения ещё раз. **Новый чат перед каждым сценарием.**

| Сценарий | Ждём |
|---|---|
| «Нарисуй рыжего кота-космонавта в стиле детской книги» | вызван `draw_square`, есть сообщение `data_type: image` со ссылкой, потом «Готово!…» |
| «Сделай сторис для кофейни с надписью «Скидка 30%»» | `draw_vertical`, надпись в промпте в кавычках |
| «Нужна обложка для видео про путешествия» | `draw_horizontal` |
| «Привет, что умеешь?» | короткий ответ, картинки нет |
| «Нарисуй логотип Coca-Cola» | вежливый отказ, картинки нет |
| Фото + «Поменяй фон на морской пляж» (одним вызовом два сообщения: сначала `{"message_sender":"customer","message_data":{"data_type":"image","content":{"file":{"name":"photo.png","url":"<ссылка на любую картинку, например из 1-го сценария>"}}}}`, потом текст) | `edit_photo`, пришёл `edited.png` |

Ссылку на картинку открой (WebFetch или curl): файл должен скачиваться. Покажи пользователю ссылки.
Проверь глазами 1–2 картинки: нет ли лишних надписей и выдуманных названий. Есть — проверь, что в инструкции стоит правило про надписи.
**Цена:** у сообщения-картинки `tokens` всегда 0 — списание лежит на следующем сообщении агента.
Смотри `total_tokens_amount` диалога (`get_dialogue_by_id`) и переведи в рубли (÷1000). Скажи пользователю, сколько стоил один запрос.
Ориентир (GPT Image 2.5 Flare, 2K, проверено 05.11.2026): запрос с картинкой ≈2,1–2,5 ₽, правка присланного фото ≈4,3 ₽,
ответ без картинки ≈0,2 ₽.

## 7. Подключить Telegram-бота (делает пользователь, через MCP нельзя)
Дай пользователю шаги и жди:
1. В Telegram открыть **@BotFather** → `/newbot` → придумать имя → придумать username, который заканчивается на `bot`.
2. BotFather пришлёт **токен** (строка вида `1234567890:AA…`). ⚠️ Токен — ключ от бота: в чат с Claude его не присылать.
3. Кабинет app.suvvy.ai → агент → вкладка «Каналы» → **Telegram** → вставить токен в поле «Токен» → «Сохранить».
4. В появившихся настройках канала: «Сообщение при команде /start» — приветствие из раздела 1;
   включить «Очищать контекст по команде /start» (удобно для тестов). «Сохранить».
5. Открыть бота в Telegram, нажать Start, написать «Нарисуй кота-космонавта».

Когда пользователь скажет «готово», проверь через MCP:
- `get_instance` → `channel_settings.telegram` заполнен;
- `get_dialogue_list` → появился диалог из Telegram; в его сообщениях есть картинка и нет ошибок.

**Лимит расходов** (если бот для всех): агент → «Доп. настройки» → «Защита от спама» →
«Максимальное количество сообщений в диалоге» и «Максимальная стоимость диалога» (например 30 ₽): при достижении агент
перестаёт отвечать в этом диалоге. Бот только для себя и команды — в настройках канала Telegram впиши ID людей
в «Белый список» (свой ID бот покажет по команде `/get_id`, если включить «Обрабатывать команду /get_id»).

## Грабли
1. **`is_enabled` по умолчанию false** — действие создано, но агент про него не знает и отвечает текстом «Вот ваша картинка» без картинки.
2. **Модели с `is_admin_only: true`** клиенту недоступны — бери только открытые.
3. **Цена на сообщении-картинке 0** — это не бесплатно, токены на следующем сообщении агента.
4. **Пустой баланс** → тестовые картинки молча не приходят.
5. **Агент «нарисовал» без вызова действия** — нужна строка в #ОГРАНИЧЕНИЯ про «никогда не пиши, что картинка готова».
6. **Публичный бот без лимита** тратит ваш баланс на чужие картинки — поставь лимит стоимости диалога.
7. **Токен Telegram в чате с ИИ** — нельзя; вставлять только в кабинете.
