Усі уроки · 44
Шлях 3 · Дорожня карта AI-інженера·Урок 26 з 33

Мультимодальний ШІ: зображення, звук і відео

Моделі, які бачать, чують і малюють. Як працюють розуміння та генерація зображень, розпізнавання мовлення, синтез мовлення й розуміння відео — і які API обирати.

РівеньНовачокЧас~15 хв

Одна модель — багато органів чуттів

Донедавна ШІ означав «текст на вході, текст на виході». Мультимодальність — мудровите слово для простої ідеї: більше ніж одна модальність. Модальність — це просто вид вхідних або вихідних даних: текст, зображення, звук, відео. Мультимодальна модель упорається з кількома з них одразу: вона може «прочитати» фотографію, розшифрувати подкаст, описати відео чи намалювати картинку за одним реченням.

Ви напевно вже стикалися з цим, самі того не помічаючи:

  • Сфотографуйте паперовий чек — і звіт про витрати заповниться сам.
  • Запишіть голосову нотатку під час прогулянки з собакою — і вона прийде охайним текстом, без «еее» та «ну».
  • Наведіть камеру на меню мовою, якої ви не знаєте, — і читайте його своєю.
  • Завантажте скриншот незрозумілого повідомлення про помилку й запитайте, що воно означає.
  • Отримайте автоматичний опис фотографії, щоб незрячий колега міг його прочитати.

Для вас як для інженера це змінює те, що можна збудувати: бот підтримки, який читає скриншоти; застосунок для зустрічей, який сам пише нотатки; каталог, який розставляє теги товарам за фотографіями.

В основі лежить простий прийом: зображення, звук і відео перетворюються на токени — на такі самі одиниці, які модель і так обробляє у вигляді тексту. Зображення стає сіткою маленьких фрагментів, звук — послідовністю звукових відрізків. Коли все стало токенами, одна модель може міркувати відразу про все.

Як зображення стає вхідними даними

Розберімо з нуля: фраза «надіслати зображення моделі» звучить загадковіше, ніж те, що за нею стоїть.

У звичайному текстовому запиті одна частина: ваше повідомлення. У мультимодальному запиті кілька частин в одному повідомленні: фрагмент тексту та фрагмент зображення. У цьому вся різниця. Ви не завантажуєте файл на особливу «адресу для зображень» і не отримуєте особливої відповіді у вигляді зображення: ви робите той самий виклик, що й завжди, тільки з ще одним елементом.

Саме зображення передається одним із двох способів: як URL, який провайдер моделі може завантажити, або як base64 — байти файлу, закодовані довгим рядком зі звичайних символів, який ви вставляєте прямо в JSON. Зображення коштує токенів так само, як і текст: зазвичай від кількох сотень до пари тисяч, залежно від розміру. Зі звуком усе схоже: ви надсилаєте файл на ендпоінт розшифрування й отримуєте у відповідь текст.

Ось справжній запит із картинкою всередині:

один виклик, два види вмісту
1from openai import OpenAI
2import base64
3 
4client = OpenAI()
5 
6# Зображення кодується в base64: байти файлу записуються
7# звичайними символами, щоб їх можна було передати всередині JSON.
8with open(#98c379">"checkout.png", "rb") as f:
9 image_b64 = base64.b64encode(f.read()).decode()
10 
11response = client.chat.completions.create(
12 model=#98c379">"gpt-4o-mini",
13 messages=[
14 {
15 #98c379">"role": "user",
16 # content — це СПИСОК частин: текст плюс зображення.
17 # Увесь фокус у цьому списку.
18 #98c379">"content": [
19 {
20 #98c379">"type": "text",
21 #98c379">"text": "This is my checkout page. Why might users drop off?",
22 },
23 {
24 #98c379">"type": "image_url",
25 #98c379">"image_url": {
26 # підійде і data: URL, і звичайне посилання https://
27 #98c379">"url": f"data:image/png;base64,{image_b64}"
28 },
29 },
30 ],
31 }
32 ],
33)
34 
35print(response.choices[0].message.content)

Зауважте, чого ви не робили: жодної бібліотеки OCR, жодної попередньої обробки зображення, жодного окремого «API зору». Один виклик, один список частин.

Зображення: два напрямки

Робота із зображеннями буває двох видів, і корисно тримати їх окремо:

  • Розуміння (зображення на вході, текст на виході). Ви надсилаєте зображення із запитанням, і модель відповідає — так, ніби ви показали фотографію другові й спитали, що він бачить. Повсякденні застосування: зчитати підсумкову суму з фотографії чека, пояснити скриншот помилки, перелічити склад за етикеткою, описати фотографію товару для інтернет-каталогу, перевірити, що інтерфейс відповідає макету. Найпростіше почати з можливості OpenAI Vision (вона доступна через chat API з доданим зображенням).
  • Генерація (текст на вході, зображення на виході). Ви описуєте, що хочете, і отримуєте картинку: DALL-E, Midjourney, Stable Diffusion, Flux. Застосування: листівка до дня народження, якої не продають у жодній крамниці, ілюстрація до допису в блозі, макет продукту, якого ще не існує, нова аватарка. Нові моделі вміють і редагування: завантажте фотографію вітальні й запитайте, як вона виглядала б з іншим диваном, або приберіть стороннього із заднього плану.

Практичний прийом — поєднувати обидва напрямки: згенерувати зображення, а потім надіслати його назад на «розуміння», щоб перевірити, чи відповідає воно запиту.

Розуміння зображень у ділі

Ось як виглядає обмін запитаннями й відповідями про картинку:

Запитання моделі про скриншот
press the button below to send the first message
sent to the modelnothing yet — every message is sent in full

Жодної бібліотеки OCR, жодного пайплайна обрізання — один виклик API із доданим зображенням. У цьому вся привабливість. І зверніть увагу на другу відповідь: модель не перечитувала зображення з бази даних, ці токени просто досі були в розмові — саме тому зберігати зображення в контексті дорого.

Звук: слухати й говорити

Звук поділяється на два завдання, і абревіатури варто запам’ятати, бо вони трапляються всюди:

  • Розпізнавання мовлення (speech-to-text, STT) — перетворення чиєїсь мови на написані слова. Робоча конячка тут — Whisper (з відкритим кодом, від OpenAI): запустіть його локально чи через API, і він розшифрує десятки мов із часовими мітками. Типові застосування: нотатки зі зустрічі, на якій ви не змогли бути, текстові субтитри до відео, диктування повідомлення замість набору на телефоні.
  • Синтез мовлення (text-to-speech, TTS) — зворотний напрямок: написані слова озвучуються природним голосом. Моделі на кшталт ElevenLabs чи OpenAI TTS лежать в основі голосових асистентів, виробництва аудіокниг і прослуховування статті, поки ви готуєте їжу.

Класичний пайплайн з’єднує їх у ланцюжок: записати зустріч, розшифрувати її за допомогою Whisper, передати розшифровку мовній моделі для стислого переказу, а потім озвучити переказ через TTS. Три виклики API — і готовий корисний продукт.

Відео

Розуміння відео — наймолодша галузь. Більшість нинішніх підходів роблять очевидне: витягують із відео статичні кадри й дивляться на них як на зображення або слухають звукову доріжку й міркують за нею. Застосування: знайти в двогодинному записі момент, де згадувалася тема, нарізати найкращі моменти трансляції, згенерувати назви розділів, модерувати завантаження. Є й «рідні» моделі для відео, але практичний прийом на сьогодні — як і раніше, кадри плюс звук.

Де мультимодальність підводить

Мультимодальні демонстрації знімають в ідеальних умовах. Справжні вхідні дані ідеальними не бувають, і дешевше дізнатися про види збоїв зараз, ніж після випуску:

  • Дрібний або щільний текст — місце, де зір ламається першим. Заголовок на скриншоті розпізнати легко; а ось повідомлення про помилку у 9 пікселів, серійний номер чи щільна таблиця — те, де моделі впевнено плутають цифри. Для точного зчитування тексту спеціалізована бібліотека OCR досі краща за універсальну модель зору: модель використовуйте для змісту, а дослівне переписування тексту доручайте OCR.
  • Підрахунок і точні вимірювання ненадійні. «Скільки людей на цій фотографії?» і «якої ширини цей проміжок у пікселях?» — класичні провали. Моделі добре оцінюють і погано рахують.
  • Моделі домислюють правдоподібно, а отже, вигадують. Якщо спитати про розмиту етикетку, модель видасть упевнену здогадку й не скаже «я не можу цього прочитати». Просіть указати ступінь упевненості, просіть процитувати те, що видно на зображенні, і перевіряйте все, що важливо.
  • Зі звуком реальність усе псує. Акценти, фоновий шум, мовці, що перебивають одне одного, і жаргон — усе це підвищує частку помилок. Whisper сильний, але не чарівний: вимірюйте частку помилкових слів (word error rate) на вашому звуці, а не на демонстраційному ролику.
  • Моделі генерації погано справляються з текстом і з точністю. Літери виходять із помилками, у рук неправильна кількість пальців, а прохання «постав логотип на те саме місце» вони виконують ненадійно. Для ілюстрацій і пошуку ідей генерація годиться; готові матеріали з текстом чи точною відповідністю макету їй краще не доручати.
  • Відео модель бачить вибірково. Вона бачила лише жменю кадрів, тож швидкі дії, причиново-наслідкові зв’язки й «що сталося раніше» даються їй погано. Якщо важливий порядок подій, розшифруйте запис і працюйте з розшифровкою.

Мультимодальною функцією можна користуватися й із такими обмеженнями, але оцінювати її потрібно, як і будь-який інший виклик моделі.

Вибір відповідної модальності

Більшість мультимодальних невдач — це помилки планування: хтось узяв модель для зображень, а завдання було про звук. Пройдіть цей вибір за кроками:

вибір модальності для вашого завдання
→→→→→
1. Почніть із завдання

Запишіть, що надходить на вхід і що має вийти на виході. Модальність випливає з цього, і лише потім має сенс обирати модель.

«Користувачі завантажують голосові нотатки; співробітникам підтримки потрібно, щоб їх можна було прочитати.»

out› формулювання завдання
1/6

API та відкритий код

Короткий огляд:

  • OpenAI Vision — розуміння зображень через chat API; зображення додаються прямо до повідомлення.
  • DALL-E та компанія — генерація зображень. DALL-E, Midjourney, Flux і Stable Diffusion закривають більшість потреб — від хмарного API до самостійного хостингу.
  • Whisper — розпізнавання мовлення з відкритим кодом; його можна запускати безкоштовно, і він добре справляється з багатьма мовами.
  • Hugging Face — «полиця» з відкритим кодом: тисячі мультимодальних моделей (підписи до зображень, OCR, TTS на кшталт Coqui, моделі зору на кшталт LLaVA), які можна завантажити й запустити самому, коли важливі приватність даних чи вартість.

Практичне правило: прототип робіть на хмарному API за півдня; переходьте на моделі з відкритим кодом, коли цього вимагають обсяг, приватність або затримка.

Зображення коштують дорожче за текст

Одне зображення може «важити» сотні чи тисячі токенів. Якщо додавати до кожного повідомлення по десять скриншотів, ваше контекстне вікно й ваш рахунок швидко ростуть. Надсилайте обрізані ділянки, коли це дозволяє завдання, і зменшуйте зображення: повна роздільна здатність моделям потрібна рідко.

Перевірте себе

Перевірте себе

Що означає «мультимодальний»?

У вас є запис зустрічі, і ви хочете отримати письмовий переказ. Що це за напрямок?

Чому погано додавати до кожного повідомлення по десять скриншотів?

Куди йти далі

Тепер ви знаєте, як дати програмам очі й вуха: розуміти зображення, генерувати їх, розшифровувати й синтезувати мовлення та обирати відповідну модальність для завдання. Далі на дорожній карті — Оцінка якості LLM, зокрема те, як виміряти, чи працює мультимодальна функція, і спостережуваність LLM — щоб стежити за нею в реальній експлуатації.