Мультимодальна AI-система: обробка тексту, зображень та аудіо
Уявіть: потрібно обробити вхідний документ — сканер видав PDF з накладною, лікар надиктував аудіокоментар, а клієнт надіслав фото бракованої деталі. Кожен тип даних потребує свого інструменту, і склеїти їх в один мультимодальний пайплайн — завдання мультимодальної AI-системи. Ми впроваджуємо такі рішення для виробництва, медицини та логістики: це скорочує ручну працю на 60–80% і знижує помилки до 0.5% за даними наших проєктів. В основі зв'язка Vision LLM (наприклад, Claude Sonnet 4.5), Whisper large-v3 для аудіо та кастомна TTS-модель. Типові latency: 2–5 секунд на комплексний запит.
Які проблеми вирішує мультимодальний пайплайн?
Різнорідні формати даних. Клієнт надсилає фотографії, скани, аудіозаписи, відео — все це потрібно об'єднати та проаналізувати в одному контексті. Без мультимодального пайплайну доводиться використовувати різні утиліти, що призводить до втрати контексту та помилок. Відео — вилучаємо ключові кадри, аналізуємо рух та дефекти.
Якість розпізнавання. Старі OCR-системи помиляються на нестандартних шрифтах, Whisper — на акцентах та шумі. Ми підбираємо комбінацію моделей, донавчаємо їх під ваш домен та додаємо постобробку з LLM-валідацією.
Затримки. Послідовна обробка через кілька API дає latency >30 секунд. Ми будуємо паралельні пайплайни з чергами (RabbitMQ/Kafka) та кешуванням embeddings — типовий час відповіді 2–5 секунд.
Як працює злиття модальностей?
Базова архітектура включає чотири кроки:
- Аудіо → текст через Whisper (модель
whisper-1, підтримує 99 мов). - Зображення — кодуються в base64 і передаються в Vision LLM (Claude, GPT-4o). Для великих зображень застосовуємо адаптивний ресайз із збереженням якості.
- Документи — вилучаємо текст через pdfplumber / PyMuPDF, потім об'єднуємо з текстом.
- Злиття — всі модальності збираються в один
content-масив і відправляються в LLM з промптом задачі.
Нижче — приклад коду на Python (asyncio), який ми використовуємо в production:
from anthropic import AsyncAnthropic from openai import AsyncOpenAI import base64 import aiohttp from pathlib import Path from typing import Union from pydantic import BaseModel anthropic_client = AsyncAnthropic() openai_client = AsyncOpenAI() class MultimodalInput(BaseModel): text: str | None = None image_paths: list[str] = [] audio_path: str | None = None document_path: str | None = None class MultimodalPipeline: async def process(self, input_data: MultimodalInput, task: str) -> str: """Обробляє мультимодальний ввід""" content_blocks = [] # 1. Аудіо → текст if input_data.audio_path: transcript = await self.transcribe_audio(input_data.audio_path) content_blocks.append({"type": "text", "text": f"[Аудіо транскрипція]: {transcript}"}) # 2. Зображення for image_path in input_data.image_paths: image_block = await self.prepare_image(image_path) content_blocks.append(image_block) # 3. Документи (PDF) if input_data.document_path: doc_text = await self.extract_document(input_data.document_path) content_blocks.append({"type": "text", "text": f"[Документ]:\n{doc_text}"}) # 4. Текстовий запит if input_data.text: content_blocks.append({"type": "text", "text": input_data.text}) content_blocks.append({"type": "text", "text": f"\nЗадача: {task}"}) response = await anthropic_client.messages.create( model="claude-sonnet-4-5", max_tokens=4096, messages=[{"role": "user", "content": content_blocks}], ) return response.content[0].text async def transcribe_audio(self, audio_path: str) -> str: """Транскрипція аудіо через Whisper""" with open(audio_path, "rb") as f: transcription = await openai_client.audio.transcriptions.create( file=(Path(audio_path).name, f.read()), model="whisper-1", language="ru", ) return transcription.text async def prepare_image(self, image_path: str) -> dict: """Підготовлює зображення для Claude Vision""" if image_path.startswith("http"): async with aiohttp.ClientSession() as session: async with session.get(image_path) as resp: image_data = base64.b64encode(await resp.read()).decode() media_type = resp.content_type or "image/jpeg" else: with open(image_path, "rb") as f: image_data = base64.b64encode(f.read()).decode() ext = Path(image_path).suffix.lower() media_type = {"jpg": "image/jpeg", "jpeg": "image/jpeg", "png": "image/png", "gif": "image/gif", "webp": "image/webp"}.get(ext[1:], "image/jpeg") return { "type": "image", "source": {"type": "base64", "media_type": media_type, "data": image_data} } async def extract_document(self, pdf_path: str) -> str: """Вилучає текст з PDF документу""" import pdfplumber text_parts = [] with pdfplumber.open(pdf_path) as pdf: for page in pdf.pages: text = page.extract_text() if text: text_parts.append(text) return "\n\n".join(text_parts)[:10000] Практичний кейс: обробка накладних
Один з наших клієнтів — логістична компанія — отримував 500+ накладних на день. Ручне введення займало 15 хвилин на документ і давало 8% помилок. Ми розгорнули мультимодальний пайплайн:
- Скан накладної → Claude Vision вилучає таблицю, суми, підписи.
- Якщо є аудіокоментар (наприклад, «виправити на $18–26ів») — Whisper транскрибує, LLM коригує JSON.
- Результат записується в 1С через API.
Результати: час обробки впав з 15 хвилин до 2 секунд, помилки — з 8% до 0.5%. Економія бюджету склала 40%.
Як ми будуємо мультимодальний пайплайн?
- Аудит задачі — ви надсилаєте приклади даних, ми заміряємо baseline і ставимо цілі.
- Проєктування — вибираємо моделі: Claude Sonnet для vision, Whisper large-v3 для аудіо, TTS-1 для синтезу. Оптимізуємо pipeline.
- Реалізація — пишемо код (Python, async), налаштовуємо черги, кеш, моніторинг.
- Тестування — A/B-тест проти старої системи, фіксуємо покращення.
- Деплой — контейнеризуємо, розгортаємо у вашому контурі (on-prem або хмара).
Чому варто довірити мультимодальний пайплайн нам?
У нас за плечима 5+ років досвіду в AI та 50+ впроваджених проєктів. Ми використовуємо production-стеки: PyTorch, Hugging Face, LangChain, vLLM. Гарантуємо якість через моніторинг latency p99 та accuracy на ваших даних. Сертифіковані спеціалісти з Claude, GPT-4 та Whisper. Працюємо з будь-якими моделями: від open-source LLaMA до пропрієтарних API. Для донавчання використовуємо LoRA та QLoRA на ваших даних. Завжди пропонуємо оптимальний баланс швидкості та точності.
Для пошуку по мультимодальних даних використовуємо RAG-архітектуру з векторними БД (ChromaDB, Qdrant). Це дозволяє швидко знаходити релевантну інформацію у великих архівах документів, зображень та аудіозаписів, підвищуючи точність відповідей на запити.
Терміни орієнтовно
| Компонент | Термін |
|---|---|
| Vision-аналіз зображень | 2–3 дні |
| Whisper транскрипція | 1–2 дні |
| Голосовий pipeline (STT+TTS) | 1 тиждень |
| Відеоаналіз (кадровий семплінг) | 1–2 тижні |
| Production-система з чергою | 2–3 тижні |
Вартість розраховується індивідуально — залежить від кількості моделей, необхідності донавчання та інфраструктури. Зв'яжіться з нами для точної оцінки.
Що входить у роботу
- Вихідний код pipeline з документацією.
- Моделі та ваги (якщо використовується fine-tuning).
- Інтеграція з вашими системами (API, черги).
- Дашборд моніторингу (метрики: latency, accuracy, throughput).
- Навчання вашої команди (2 години).
- Підтримка 1 місяць після деплою.
Порівняння моделей для vision-задач
| Модель | Контекстне вікно | Швидкість (latency p50) | Точність на таблицях |
|---|---|---|---|
| Claude Sonnet 4.5 | 200K tokens | 1.5 сек | 98% |
| GPT-4o | 128K tokens | 2.0 сек | 96% |
| Gemini 1.5 Pro | 1M tokens | 2.5 сек | 94% |
За нашими тестами, Claude Sonnet 4.5 на 30% швидший за GPT-4o при парсингу таблиць і дає на 2% менше помилок. Однак для довгих відео з великим контекстом Gemini 1.5 Pro ефективніший.
Щоб підібрати оптимальне рішення для ваших даних, зв'яжіться з нашим інженером. Отримайте консультацію протягом дня. Пишіть — зробимо мультимодальний пайплайн під вашу задачу.







