Мультимодальна 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 вилучає таблицю, суми, підписи.
- Якщо є аудіокоментар (наприклад, «виправити на 2000 рублів») — 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 ефективніший.
Щоб підібрати оптимальне рішення для ваших даних, зв'яжіться з нашим інженером. Отримайте консультацію протягом дня. Пишіть — зробимо мультимодальний пайплайн під вашу задачу.







