Мультимодальный поиск для LLM

Оговорка: эта статья не пытается реконструировать внутренний retrieval GPT, Claude или Gemini. По публичным материалам виден другой слой: inference runtime и инструменты вокруг модели: web search, file search, grounding, connectors, MCP, visual/PDF understanding, citations и agentic search loops.

Представьте RAG-систему для финансовых отчетов. Пользователь спрашивает:

Почему EBITDA margin снизилась в Q4, и где это подтверждается?

Корпус типичный для enterprise QA: annual report в PDF, investor deck, spreadsheet appendix и earnings call transcript. В отчете есть абзац про EBITDA, таблица с FX adjustment на соседней странице и waterfall chart в презентации. Текстовый retriever находит абзац про EBITDA. OCR не извлекает таблицу с корректными headers. Dense retriever поднимает текст про operating expenses: семантически близко, но причинно недостаточно. Модель отвечает уверенно: margin снизилась из-за роста затрат. Citation есть, но она указывает не на evidence, а на соседний текст по теме.

Ошибка появилась раньше генерации: система выбрала не тот evidence.

Сильная модель не исправит плохой context pack. Она лишь аккуратнее соберет ответ из неправильных или неполных источников. В production LLM-системах ошибка часто возникает не на decoding stage, а на retrieval stage: что нашли, что отфильтровали, что переупорядочили, что выбросили из-за бюджета и что в итоге положили в context window.

Главный конфликт

Для документов, PDF, скриншотов и таблиц три привычных упрощения ломаются быстро.

Dense-only retrieval недостаточен. Dense similarity хорошо ловит смысловые переформулировки, но хуже работает с exact IDs, кодами ошибок, числами, ticker-like identifiers, датами, row/column labels и source authority.

OCR-only retrieval недостаточен. OCR-only ломается не только когда OCR ошибся. Даже идеальный OCR может разрушить spatial relation: какая стрелка к чему относится, какая footnote применима к строке, какой цвет на графике соответствует серии, где заголовок колонки, а где значение.

Agentic retrieval дорогой. Agentic search полезен, когда стратегия поиска неизвестна заранее. Если источник и задача понятны, например найти evidence в отчете, договоре или policy, агентность часто добавляет стоимость и недетерминизм вместо качества. Anthropic показывает, что multi-agent research может давать большой uplift на breadth-first задачах, но также пишет про кратный рост token usage в агентных режимах.

Правильная production-рамка:

high-recall retrieval
  -> utility-aware reranking
  -> source-aware context packing
  -> citation-bound generation
  -> eval / telemetry / security checks
Reference architecture for multimodal retrieval around LLMs

Reference architecture: retrieval здесь не один vector search, а управляемый слой выбора evidence с routing, специализированными индексами, reranking, context packing, citations и eval/security loop.

Сквозной кейс: EBITDA margin и FX table

Плохой pipeline:

query
  -> dense vector search over OCR chunks
  -> top-5 text chunks
  -> prompt concat
  -> answer with citation

Что ломается:

  • запрос “почему margin снизилась” требует не просто similarity, а causal evidence;
  • таблица с FX impact хранится как broken OCR text;
  • waterfall chart найден не был, потому что visual page index отсутствует;
  • цитата ведет на страницу с общим текстом, но не на таблицу или chart;
  • модель отвечает правдоподобно, но неполно.

Лучший pipeline:

query
  -> query understanding: financial report, numeric explanation, source citation required
  -> BM25: EBITDA margin, Q4, FX, adjustment
  -> dense retrieval: related management discussion chunks
  -> visual page retrieval: pages with charts/tables
  -> table extraction: FX impact rows, units, footnotes
  -> fusion + reranking
  -> context packing: text + normalized table + page crop
  -> answer with page/table citations
Bad OCR-only pipeline versus multimodal retrieval pipeline

На одном и том же вопросе слабый OCR-only pipeline выглядит “grounded”, но теряет причинный evidence. Мультимодальный pipeline отдельно поднимает text chunks, visual pages, таблицу, footnotes и page/table citations.

В этом pipeline LLM отвечает уже не “по похожему тексту”, а по evidence pack: primary report page, table range, visual crop chart и transcript quote. Это и есть практический смысл мультимодального retrieval вокруг LLM.

В этой статье

Чтобы не путать уровни:

  • search - инфраструктура поиска: BM25, ANN, dense vectors, metadata filters, web/enterprise search, SQL, graph traversal;
  • retrieval - выбор evidence под конкретный запрос;
  • RAG - генерация с выбранным внешним контекстом;
  • grounding - проверяемая привязка claims к источникам;
  • memory - persistent state о пользователе или задаче, не runtime retrieval;
  • context packing - упаковка найденного evidence в ограниченный context window;
  • citations - не украшение ответа, а traceability contract.

Фокус статьи - documents, PDF, screenshots и tables. Видео, аудио и product image search остаются периферией: для них применимы те же идеи, но другие retrieval units и другая cost model.

Как выбирать retrieval strategy

В production полезнее сначала выбрать retrieval strategy, а уже потом рисовать архитектуру. Ошибка routing обычно дороже, чем ошибка в параметре top_k.

if query has exact ID / error code / API name / invoice number:
  use BM25/exact index + metadata filters
  add dense retrieval only as secondary signal

if query targets PDF with tables/charts:
  use text/OCR index + visual page index + table extraction
  rerank with source authority and numeric overlap

if query includes screenshot or UI state:
  first parse visible UI state
  then search docs/tickets/logs by extracted labels/errors

if query is open-ended research:
  use agentic retrieval with explicit budgets
  require citations and source diversity

if corpus is small and single-use:
  consider long context
  still keep page/source references

if freshness or ACL matters:
  retrieval is mandatory
  apply permissions before candidate generation

Ключевой вывод: retrieval strategy выбирается на уровне routing. Это не настройка top_k в vector database.

Минимальный production baseline

LevelЧто входитКогда достаточно
MVPBM25 + dense text embeddings + metadata/ACL filters + citationsPlain text corpus, known sources, low visual complexity
MVP+ for PDFMVP + page rendering + visual page embeddings + table cropsReports, decks, scanned PDFs, screenshots, tables
AdvancedMulti-vector late interaction + cross-encoder/VLM reranking + context packing ablationsHigh-value enterprise QA, finance, legal, industrial docs
Research-gradeHuman-labeled evidence, retrieval ablations, security harness, agentic router benchmarkBefore changing production retrieval architecture at scale

В enterprise document RAG я бы начинал не с agentic framework, а с такого baseline:

ingestion:
  native text + OCR
  page images
  table/chart/figure crops
  metadata + ACL + versioning

indexes:
  BM25 over normalized text
  dense text vectors
  visual page vectors
  optional region/table vectors

retrieval:
  ACL before retrieval
  parallel text + dense + visual search
  RRF or score fusion
  cross-encoder rerank top 50-200
  VLM rerank only for top visual candidates

generation:
  context pack with source/page/bbox IDs
  claim-level citations
  unsupported-claim checks

Multimodal indexing for PDF, screenshots and tables

В text-only RAG retrieval unit обычно chunk. В multimodal retrieval retrieval unit уже неочевиден: это может быть страница PDF, crop таблицы, screenshot региона, keyframe видео, строка таблицы, chart legend или transcript segment.

Минимальная схема индексов:

Index A: text/OCR chunks
  - BM25/exact matching
  - dense text embeddings
  - doc_id, page_id, section, heading_path
  - ACL, timestamp, version

Index B: visual pages / regions
  - page screenshots
  - table/chart/figure crops
  - visual embeddings
  - bbox, page_id, source_id

Index C: structured tables
  - normalized cells
  - row/column headers
  - units, periods, footnotes
  - source page + bbox

Для EBITDA-кейса один индекс почти гарантированно проиграет. Text/OCR index хранит management discussion, transcript passages и exact terms: EBITDA, Q4, FX, margin. Visual page/region index хранит page image отчета, waterfall chart slide и crop таблицы FX adjustment. Structured table index хранит normalized cells, row/column headers, units, footnotes и page/bbox citation.

Почему не один индекс? Разные failure modes требуют разных сигналов. BM25 ловит точные имена и числа. Dense retrieval ловит semantic match. Visual retrieval ловит layout, диаграммы, формы, подписи и соседство элементов. Structured table index нужен, когда ответ зависит от row/column semantics.

Рабочая модель evidence unit:

evidence_unit:
  id: ev_fx_margin_impact_q4
  source_id: annual_report_2026
  modality: table_cell_range
  page: 117
  bbox: [82, 190, 1420, 890]
  text: "FX impact reduced EBITDA margin by 1.2 percentage points"
  table:
    table_id: tbl_2026_q4_fx_impact
    row_range: ["Europe", "APAC"]
    column_range: ["FX impact", "EBITDA margin impact"]
    units: ["USD millions", "percentage points"]
    footnotes: ["Excludes one-time restructuring costs"]
  retrieval_scores:
    bm25: 12.4
    dense: 0.73
    visual: 0.81
    rerank: 0.92
  acl_scope: ["finance-team"]
  version: "2026-04-18"

Исследовательская линия это подтверждает. ColPali строит retrieval поверх изображений страниц и multi-vector late interaction. VisRAG показывает, что direct document-image retrieval может давать 25-39% end-to-end gain относительно text-based RAG. ViDoRe V3 специально сделан под enterprise document retrieval: 26,000 pages, 3,099 queries, 6 languages, human-verified page relevance and bounding boxes.

Таблицы как отдельный evidence type

Таблицы нельзя считать просто “текстом с переносами строк”. Для финансовых, юридических, медицинских и операционных документов таблица часто является главным evidence. Markdown table удобна для LLM, но она не заменяет structured representation: cell без row/column headers, units и footnotes почти бесполезен.

Хранить таблицу стоит в нескольких формах:

  • как visual crop для проверки layout и footnotes;
  • как normalized cells для numeric lookup;
  • как markdown/CSV для передачи в LLM;
  • как structured record для фильтров и агрегаций;
  • как source-linked evidence с page, bbox and table_id.

Для EBITDA-кейса таблица должна отвечать не только “где встречается FX”. Она должна сохранять связь между segment, period, unit, margin impact and footnote. Иначе модель увидит число, но не поймет, к какой строке, периоду и оговорке оно относится.

Практичная schema:

table_evidence:
  table_id: tbl_2026_q4_fx_impact
  source_id: annual_report_2026
  doc_id: annual_report_2026_pdf
  page_id: p_117
  bbox: [82, 190, 1420, 890]
  title: "FX impact by segment"
  period: "Q4 2026"
  normalized_cells_ref: s3://tables/tbl_2026_q4_fx_impact.parquet
  row_headers: ["North America", "Europe", "APAC"]
  column_headers: ["Q4 revenue", "FX impact", "EBITDA margin impact"]
  cell_range: "B2:C4"
  units: ["USD millions", "percentage points"]
  footnotes: ["Excludes one-time restructuring costs"]
  visual_crop_ref: s3://crops/tbl_2026_q4_fx_impact.png
  extraction_confidence: 0.93
  extraction_model: layout-vlm-2026-04

Когда таблицу передавать в модель:

  • small table: markdown;
  • wide table: selected rows/columns + units + footnotes;
  • numeric QA: structured extraction + citation to cell/range;
  • low confidence extraction: visual crop + extracted text side by side;
  • compliance/legal: source page and bbox required.

Цитирование таблицы должно работать на уровне row/cell/range, а не только page. Ответ “margin снизилась из-за FX” должен ссылаться на table_id, page, bbox и конкретный range, где одновременно видны metric, segment, period, unit и footnote.

Reranking как cascade, а не один этап

Reranking часто описывают как один шаг: “rerank top-k”. В production это обычно cascade с разной стоимостью.

StageCandidatesМодель / методЦельCost
First-stage retrieval500-2000BM25, dense, visual ANNrecalllow
Fusion / RRF100-500deterministiccombine lexical, dense, visual signalslow
Cross-encoder rerank50-200text rerankerполезность для ответаmedium
VLM rerank10-50VLM over page/cropvisual evidence qualityhigh
LLM evidence judge5-20LLMclaim support, conflict, source qualityhigh

Что именно оценивает cascade:

ЭтапЧто оценивает
BM25 / exactexact terms, IDs, tickers, числа, даты, API names
Dense retrieversemantic similarity и paraphrase match
Visual retrieverpage/layout/visual similarity, charts, tables, screenshots
Fusion / RRFобъединение сигналов без преждевременной потери recall
Cross-encoderполезность text evidence для конкретного query
VLM rerankerподтверждает ли visual region claim
LLM evidence judgeдостаточно ли evidence для answer/citation, есть ли конфликт
Source authority featuresпервоисточник, свежесть, версия, trust level

Для text-and-table задач свежий benchmark From BM25 to Corrective RAG показывает, что hybrid + neural rerank может доходить до Recall@5 = 0.816 и MRR@3 = 0.605, а глубина candidate pool перед reranking materially matters. Это хороший аргумент против “взяли top-5 из vector DB и ответили”.

Reranking cascade and context packing contract

Reranking в production лучше проектировать как cascade: дешевый high-recall retrieval сначала, дорогой VLM/LLM judge только на узком candidate set, а финальный context pack уже обязан содержать source IDs, page/bbox/offset и основания для citations.

Хороший reranker оценивает не только similarity:

contains_answer?
contains_required_number_or_quote?
is_primary_source?
is_current?
is_allowed_by_acl?
is_specific_enough?
has_required_table_or_chart?
does_visual_region_support_claim?
is_duplicate?
conflicts_with_other_evidence?

Для EBITDA-кейса reranker должен предпочесть не просто chunk про EBITDA. Нужен evidence, где одновременно есть Q4, margin delta, FX impact, primary-source page и table/chart support. Семантически близкий абзац про operating expenses должен проиграть таблице с FX impact, даже если оба фрагмента “про прибыльность”.

Context packing: конкретный алгоритм

Context packing решает, что модель увидит, в каком порядке, с какими IDs и в каком budget. Это отдельный decision layer после retrieval и reranking.

def build_context_pack(query, ranked, budget):
    ranked = filter_acl(ranked)
    ranked = remove_stale_versions(ranked)
    ranked = dedup_by_source_version_and_region(ranked)
    ranked = dedup_by_semantic_hash(ranked)

    primary = select_primary_sources(
        ranked,
        require_direct_answer=True,
        limit=4,
    )

    numeric = select_numeric_evidence(
        ranked,
        require_units=True,
        require_row_and_column_headers=True,
        limit=3,
    )

    visual = select_visual_evidence(
        ranked,
        max_pages=2,
        max_crops=4,
        prefer_regions=True,
        resolution="medium",
    )

    conflicts = detect_conflicts(ranked)

    pack = []
    pack += compress_text(primary, target_tokens=budget.text)
    pack += render_tables(numeric, max_rows=30, include_units=True)
    pack += attach_visual_crops(visual, max_media_tokens=budget.media)
    pack += summarize_conflicts(conflicts, max_tokens=budget.conflicts)

    return order_for_generation(pack)

Для EBITDA-кейса context pack должен положить не весь annual report. Нужен один абзац management discussion, normalized FX table, crop waterfall chart и transcript quote. Если packer выбросил table crop из-за budget, final answer уже работает с неполной реальностью.

Порядок важен. Модель часто сильнее опирается на ранний context. Поэтому pack должен начинаться с primary evidence, а не с случайного top-1 dense result.

Минимальный contract evidence unit:

type EvidenceUnit = {
  evidence_id: string
  source_id: string
  source_uri?: string
  doc_id?: string
  page?: number
  section?: string
  bbox?: [number, number, number, number]
  timestamp?: string
  modality: "text" | "pdf_page" | "image_crop" | "table" | "video_frame" | "audio"
  acl_scope: string[]
  retrieved_score: number
  rerank_score?: number
  content_ref: string
  checksum: string
}

Citation contract должен быть жестким:

def validate_citations(answer, packed_evidence):
    allowed = {ev.evidence_id for ev in packed_evidence}

    for claim in answer.claims:
        if not claim.evidence_ids:
            raise CitationViolation("claim has no evidence")
        if any(eid not in allowed for eid in claim.evidence_ids):
            raise CitationViolation("claim cites evidence outside packed context")

    return True

Ответ с правильным текстом и неправильной citation - production bug.

Cost, storage and latency

Visual retrieval не бесплатен. Если статья говорит “держите visual page index”, она должна признать стоимость.

Что надо считать:

  • page rendering DPI и размер image store;
  • стоимость batch embedding для page images и crops;
  • single-vector vs multi-vector storage blow-up;
  • latency late interaction;
  • re-indexing после OCR/layout model upgrade;
  • cache invalidation для connector/web sources;
  • TTL для fresh data;
  • versioning для PDF updates;
  • media token cost при передаче page/crop в модель.

Google прямо показывает token-cost геометрию для Gemini 3 media resolution: PDF default/medium около 560 tokens/page, image high 1120 tokens, video high 280 tokens/frame, а video low/medium 70 tokens/frame (Google AI docs). Это значит, что visual context надо передавать coarse-to-fine:

page-level retrieval
  -> region crop
  -> high resolution only for selected evidence
  -> generation with page/crop citations

Нельзя отправлять в модель все найденные страницы “на всякий случай”. Это превращает retrieval проблему в token budget проблему.

Security constraints

Retrieval вокруг LLM - это security boundary. В систему попадает недоверенный текст из web pages, PDF, OCR layers, captions, MCP tools, connector results and memory stores.

Разделять надо три группы рисков.

Retrieval security

  • ACL before retrieval, not after;
  • tenant isolation;
  • source trust levels;
  • stale/deleted document handling;
  • audit trail for retrieved, reranked and rejected evidence;
  • no private source in logs/traces without redaction.

Prompt injection

  • untrusted retrieved text;
  • hidden PDF text;
  • malicious OCR layer;
  • webpage instructions;
  • citation spoofing;
  • tool result injection.

Agent security

  • tool-call allowlist;
  • argument validation;
  • public-web/private-connector separation;
  • no write tools without explicit approval;
  • rate limits and cost limits;
  • exfiltration constraints.

Security test pack:

HTML/PDF injection:
  hidden instructions in footer/OCR layer
  expected: no unsafe tool call, no exfiltration

Cross-tenant retrieval:
  forbidden doc exists in index
  expected: no hit before rerank

Citation mismatch:
  answer cites source not in packed context
  expected: hard failure

Memory poisoning:
  untrusted web content tries to persist instruction
  expected: read-only or approval gate blocks it

Tool schema smuggling:
  payload hidden in tool args
  expected: schema and allowlist reject it

Что публично видно у OpenAI, Anthropic и Google

Публичные docs не доказывают internal retriever topology. Они показывают surface вокруг модели.

VendorЧто видно публичноКак это трактовать
OpenAIResponses API, web search, file search, deep research, code interpreter, computer use, remote MCPUnified agentic runtime с tools и retrieval surfaces вокруг модели
AnthropicContextual Retrieval, advanced tool use, web search, tool search, citations, multi-agent researchСильная публичная рамка context engineering, tool ergonomics and budgeted research
Google / GeminiGrounding with Google Search / Vertex AI Search, RAG Engine, Gemini Embedding 2, media resolutionЛучше других документирован grounding stack и multimodal embedding/search surface

Что можно утверждать:

  • у всех трех публично видны search/grounding/citation/tool surfaces;
  • retrieval находится на runtime/tooling layer;
  • citations - часть system contract, но не доказательство отсутствия hallucination;
  • visual/PDF understanding становится production primitive.

Что нельзя утверждать:

  • что GPT/Claude/Gemini внутри используют конкретный retriever;
  • что у каждого vendor есть единый скрытый multimodal index;
  • что web/file search встроен в weights;
  • что public API полностью описывает internal inference stack.

Когда не нужен multimodal или agentic retrieval

Сильная архитектура говорит не только “когда использовать”, но и “когда не использовать”.

Visual retrieval обычно не нужен, если:

  • корпус plain text;
  • нет таблиц, диаграмм, forms, layout semantics;
  • queries mostly exact lookup;
  • PDF имеет качественный native text и reliable table extraction;
  • latency/cost важнее visual recall;
  • visual evidence не используется в citations или eval.

Agentic retrieval обычно не нужен, если:

  • задача deterministic;
  • источники известны заранее;
  • нужен low-latency response;
  • есть хороший hybrid index;
  • вопрос не требует exploration;
  • tool calls не дают нового evidence.

Long context может быть достаточно, если:

  • corpus меньше примерно 200k tokens;
  • документ один и его надо читать целиком;
  • нет сложных ACL/freshness constraints;
  • стоимость и latency приемлемы;
  • нужны synthesis и cross-section reasoning.

Но long context не заменяет retrieval для больших, динамических и permissioned corpora. Retrieval нужен для selection, freshness, permissions, citations, observability and cost control.

Практический вывод

Мультимодальный retrieval нужен не для “поддержки картинок”. Он нужен потому, что в реальных документах evidence часто лежит в таблице, диаграмме, layout-е, скриншоте или соседстве элементов - там, где text-only retriever слепой.

Хорошая LLM-система не просто вызывает сильную модель. Она строит evidence pipeline:

find the right evidence
  -> rank it for answer utility
  -> pack it with source IDs
  -> generate with citations
  -> verify claims
  -> log retrieval path

Если retrieval ошибся, prompt не спасет. Если context packing выбросил главный table crop, model reasoning уже работает не с той реальностью. Если citations не проверяются как contract, “grounded answer” остается интерфейсной иллюзией.

Приложение A: числовые ориентиры

Engineering numbers for multimodal retrieval

Эти числа не являются универсальными константами, но хорошо задают инженерную геометрию: retrieval quality улучшается каскадом, tool surfaces надо загружать по требованию, visual media имеют токенную цену, а agentic search требует budget controller.

ИсточникЧислоЧто доказывает
Anthropic Contextual Retrievaltop-20 retrieval failure rate 5.7% -> 3.7% with contextual embeddings; 2.9% with contextual BM25; 1.9% with rerankingContextual chunks, BM25 and reranking реально двигают retrieval quality.
Anthropic Advanced Tool Use58 tools from 5 MCP servers около 55K tokens; Tool Search около 8.7K tokens and 85% reductionTool search нужен, когда tool definitions начинают съедать context.
Anthropic Multi-Agent Researchmulti-agent systems около 15x tokens относительно chat; single agent около 4xAgentic retrieval должен быть budgeted.
Gemini media resolutionGemini 3 PDF medium 560 tokens/page; image high 1120; video high 280/frameVisual context has real token geometry.
VisRAG25-39% end-to-end gain над text-based RAGParsing/OCR loss measurable.
ViDoRe V326,000 pages, 3,099 queries, 6 languagesEnterprise document retrieval нужен оценивать на page-level evidence, not only chunks.
MMDocIRVLM-text примерно 1.5x OCR-text for tables and 3.8x for figuresOCR loses multimodal signal before retrieval.
From BM25 to Corrective RAGhybrid + neural rerank: Recall@5 = 0.816, MRR@3 = 0.605Mixed text/table QA needs hybrid and reranking.

Приложение B: vendor surfaces

SurfaceOpenAIAnthropicGoogle / Gemini
Web retrievalWeb search, deep researchWeb search with filteringGoogle Search grounding
Private retrievalFile search over vector storesFiles API, search result blocks, citationsVertex AI Search, File Search API preview, RAG Engine
Tool retrievalTool search, MCPTool Search Tool, deferred loadingFunction calling and platform tool surfaces
CitationsURL and file citationsSearch result blocks, document/page/character citationsGrounding metadata and source links
Multimodal docsText/images, file/image analysis, cookbook patternsPDFs/images/files plus citationsNative PDF/document understanding, media resolution
Agentic researchDeep research, background mode, MCP search/fetchMulti-agent research systemDeep Research Agent / grounding surfaces

Писать надо асимметрично. У Google публично сильнее раскрыт multimodal embedding/grounding layer. У Anthropic сильнее раскрыты context engineering и tool ergonomics. У OpenAI сильнее упакован unified agentic runtime через Responses/deep research surfaces.

Приложение C: эксперименты перед production rollout

PriorityExperimentМинимальный протокол
P0Page-image vs OCR-text vs VLM-text vs hybridViDoRe V3 + MMDocIR + internal PDFs; Recall@K, nDCG@10, evidence-page recall, latency, storage
P0Hybrid + reranker ablationBM25, dense, hybrid RRF, hybrid + cross-encoder; MRR@3, Recall@5, nDCG@10, cost
P0Context packing ablationnaive concat vs dedup/diversity/source-order/page-crops; correctness, faithfulness, citation precision
P0Agentic vs non-agentic routingsimple facts, targeted QA, open-ended research; tool calls, tokens, wall-clock, timeout
P0Security harnessprompt injection, ACL leakage, stale source handling, citation mismatch, tool result injection
P1Long context vs retrieval routingfull-document, retrieved, hybrid; cost, latency, faithfulness
P1Visual reranker vs textual rerankersame candidate pool, compare text reranker and VLM reranker

Без этих ablations статья остается strong engineering synthesis. С ними она превращается в архитектурную записку, по которой можно менять production pipeline.

Приложение D: failure modes

Failure modeСимптомМитигировать
OCR потерял важный сигналМодель не видит table/legend/captionvisual page index, region crops, VLM rerank
Visual retriever нашел похожую страницу, но не тот смыслПохожий chart, другой entity/datemetadata filters, text+visual fusion
Dense retriever пропустил exact IDError code/order ID не найденBM25/exact index
Reranker выбрал вторичный источникBlog/SEO page выше official docsource authority features
Context packing выкинул главный evidencecorrect doc retrieved, wrong answer generatedpacking eval, evidence ablation
Citation mismatchclaim cites source outside contextcitation contract hard failure
Stale indexответ по старой версииversioning, freshness routing
ACL leakageevidence из чужого tenantpre-retrieval ACL filtering
Prompt injection from sourceмодель следует instructions из PDF/web pagesource sandboxing, tool-call validation
Agentic loop burns budgetмного search/fetch без новых factsbudget controller, early stopping

Приложение E: источники

OpenAI

Anthropic

Google / Gemini

Research

FAQ

Что такое мультимодальный поиск для LLM?

Это слой выбора evidence перед генерацией, который ищет и упаковывает не только текст, но и PDF-страницы, изображения, таблицы, графики, screenshots, video/audio segments и structured records. Его задача - дать модели минимальный, релевантный и проверяемый context pack.

Чем multimodal retrieval отличается от обычного RAG?

Обычный RAG часто сводят к text chunks и vector search. Multimodal retrieval работает с несколькими modalities, несколькими индексами, visual/page embeddings, crops, table structures, keyframes, OCR, metadata, ACL, reranking и context packing.

Почему retrieval не является памятью LLM?

Memory - persistent state. Retrieval - runtime selection external evidence. Модель может иметь memory и одновременно использовать retrieval, но это разные механизмы.

Почему vector search top-k недостаточно?

Dense similarity не гарантирует полезность для ответа. Он плохо ловит exact IDs, numbers, table semantics, source authority, freshness, ACL и visual layout. Production pipeline требует hybrid search, reranking, context packing и eval.

Заменяет ли long context retrieval?

Нет. Long context полезен для synthesis и small corpus, но retrieval нужен для selection, freshness, ACL, cost, latency, citations и observability.

Где нужен visual document retrieval?

В PDF, сканах, презентациях, financial reports, scientific papers, contracts with tables, UI screenshots, diagrams, charts, forms и product images - везде, где смысл лежит в layout или visual structure, а не только в extracted text.

Какие метрики нужны для оценки multimodal retrieval?

Минимум: Recall@K, MRR, nDCG@10, evidence page recall, visual region recall, answer correctness, faithfulness, groundedness, citation precision/recall, unsupported claim rate, latency, token usage, cost и security evals.

Когда нужен agentic retrieval?

Agentic retrieval нужен для open-ended research, multi-hop investigation и breadth-first задач, где стратегия поиска неизвестна заранее. Для simple fact lookup и targeted document QA чаще достаточно hybrid search, reranking и citation-aware context packing.