ИИ видит игру
Когда шаблон и распознавание текста не справляются: распознавать состояния локальной моделью, ветвиться и считывать несколько значений одним вызовом.
Иногда не работает ни то, ни другое: шаблон ничего не находит, потому что картинка каждый раз другая, — а распознавание текста выдаёт чепуху, потому что текста там нет или фон слишком пёстрый. Именно для этого и есть модули ИИ. Они оценивают изображение, а не сравнивают его.
Сразу о главном, чтобы ожидания были верными: ИИ медленнее поиска по шаблону и не предназначен для каждого щелчка. Он оправдывает себя в тех немногих местах, где нужно понимание, — «идёт бой или я в меню?».
Для этих задач достаточно локальной модели на своём компьютере. Ни провайдера, ни банковской карты, и ни один пиксель не покидает машину.
Шаг 1 — Настроить локальную модель
Установить Ollama и запустить её.
Скачать модель, умеющую читать изображения. В терминале:
ollama pull qwen2.5vl:7bВ FlowBotCommander: Инструменты → Профили провайдеров, затем нажать «Найти локальные модели».
Это не обязательно Ollama. Поиск точно так же опрашивает llama.cpp (порт 8080) и LM Studio
(порт 1234) — все три отвечают на один и тот же вызов, и приложение говорит со всеми одинаково.
А вот что действительно важно — это модель: чисто текстовая модель не видит изображений. В llama.cpp
это значит, что рядом с файлом модели должен быть загружен файл mmproj — без него сервер всё равно
запустится, но возьмёт только текстовую часть, и ИИ ответит на любое изображение общими фразами. Выглядит
как ошибка распознавания, но ею не является.
llama-server -m qwen2.5-vl-7b-q4_k_m.gguf --mmproj mmproj-qwen2.5-vl-7b-f16.gguf --port 8080
Поиск опрашивает обычные адреса (Ollama, llama.cpp, LM Studio), создаёт готовый профиль для каждой находки и заранее выбирает модель, умеющую читать изображения. Затем Сохранить — вот и вся настройка.
Если поиск ничего не находит, почти всегда сервер просто не запущен. Это не догадка, а самый частый случай — поэтому сообщение прямо об этом и говорит.
Шаг 2 — Самая быстрая проверка: вопрос «да/нет»
Возьми Спросить по изображению (ИИ), инструментом области очерти узкую область вокруг главного и задай вопрос с двумя возможными ответами:
Есть ли на изображении диалог ошибки? Ответь только «да» или «нет».
Модуль выдаёт ответ в трёх видах: как текст (answer), как число (zahl) и как да/нет (jaNein). Для ветвления
подключи jaNein к модулю Если/Тогда.
Шаг 3 — Ветвление через «ИИ решает»
Как только случаев больше двух, нужный модуль — «ИИ решает». Варианты пишутся по одному в строке:
бой
меню
экран загрузки
После этого у модуля появляются выходы wahl1, wahl2, wahl3 — а также unklar (неясно) и fehler (ошибка).
Две детали здесь важнее, чем кажется:
- «unklar» вписывать не нужно. Модуль сам добавляет этот вариант к вопросу. Причина — наблюдение из практики: без такого выхода модель скорее выберет неверно, чем воздержится. В опыте с фрагментом 40×64 пикселя, где вообще ничего не было видно, она уверенно назвала один из вариантов. С выходом «неясно» она ответила верно.
- Ответ сверяется с твоим списком. Если модель придумает своё или ответит двусмысленно («бой или меню»),
поток уйдёт к
unklar. Он никогда не уходит куда-то лишь потому, что слово примерно подходит.
К unklar лучше подключить короткое ожидание и повторную попытку — не то же действие, что к выходу выбора.
«Я не знаю» — полезный ответ, если бот его уважает.
Шаг 4 — Несколько значений одним вызовом
Для чисел и имён возьми Считать значения с изображения. По одному имени поля в строке:
золото
уровень
имя_противника
Каждое поле становится одноимённым выходом данных. Это один вызов для трёх значений — со «Спросить по изображению» их было бы три.
Называй поля так, как сказал бы человеку: «золото» понятно, «значение1» — нет. Модель читает то, что подсказывает имя. Если значение находится в необычном месте, помогает дополнительная подсказка: «Числа в верхней панели. Чат игнорировать.»
Область важнее модели
Самый действенный приём — не более крупная модель, а узкая область. Измерено на реальном игровом скриншоте 3440×1474, тот же вопрос, та же модель:
| Что спрашивали | Результат |
|---|---|
| всё окно, уменьшенное до 1024 px | неверно — значения из другого окна, 4,4 МБ без масштабирования |
| фрагмент вокруг значений (750×385) | верно — 54 КБ, 0,2 с |
Узкая область, таким образом, одновременно дешевле, быстрее и точнее. Потрать полминуты на инструмент области — это даёт больше, чем любая другая настройка.
Сколько это стоит — и сколько длится
| локально | провайдер (Claude, GPT) | |
|---|---|---|
| деньги за вопрос | ничего | по площади изображения и длине текста |
| длительность | 0,2–0,6 с, пока модель в памяти | зависит от связи, обычно 1–3 с |
| первый вызов | около 15 с, модель загружается | как обычно |
| данные | остаются на компьютере | фрагмент уходит провайдеру |
Это время загрузки и объясняет щедрое ограничение времени по умолчанию. А поскольку цикл иначе сделал бы сотню вызовов на один и тот же вопрос, есть «Помнить ответ»: тот же вопрос к тому же изображению — и возвращается запомненный ответ. Любое изменение изображения считается новым вопросом.
Если не получается
| Что видно | В чём обычно дело |
|---|---|
| Подсказка «ИИ ещё не настроен» у модуля | Нет профиля провайдера. Нажми Настроить ИИ…. |
| «Найти локальные модели» ничего не находит | Сервер не запущен. Запусти Ollama и повтори поиск. |
Поток всегда уходит к unklar |
Область показывает слишком много или не то. Сузь её — и проверь, действительно ли варианты подходят к изображению. |
Поток всегда уходит к fehler |
Неверное имя модели или модель не умеет работать с изображениями. Выбери такую, где в имени есть vl, vision или llava. |
| Значения путаются | Область слишком велика — см. выше. Дополнительная подсказка тоже помогает. |
| Ответ обрезан | Увеличь максимальную длину ответа в профиле провайдера. |
| Всё работает медленно | Первый вызов загружает модель. Потом она остаётся в памяти — а «помнить ответ» делает цикл значительно дешевле. |
Что дальше?
- Модули ИИ — все четыре модуля со всеми полями
- Распознавание изображений — если хватает шаблона, это всегда первый выбор
- API управления — поручить сборку и наблюдение за ботом ИИ вроде Claude Code