Мультимодальный поиск для 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: 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
На одном и том же вопросе слабый 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 | Что входит | Когда достаточно |
|---|---|---|
| MVP | BM25 + dense text embeddings + metadata/ACL filters + citations | Plain text corpus, known sources, low visual complexity |
| MVP+ for PDF | MVP + page rendering + visual page embeddings + table crops | Reports, decks, scanned PDFs, screenshots, tables |
| Advanced | Multi-vector late interaction + cross-encoder/VLM reranking + context packing ablations | High-value enterprise QA, finance, legal, industrial docs |
| Research-grade | Human-labeled evidence, retrieval ablations, security harness, agentic router benchmark | Before 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 с разной стоимостью.
| Stage | Candidates | Модель / метод | Цель | Cost |
|---|---|---|---|---|
| First-stage retrieval | 500-2000 | BM25, dense, visual ANN | recall | low |
| Fusion / RRF | 100-500 | deterministic | combine lexical, dense, visual signals | low |
| Cross-encoder rerank | 50-200 | text reranker | полезность для ответа | medium |
| VLM rerank | 10-50 | VLM over page/crop | visual evidence quality | high |
| LLM evidence judge | 5-20 | LLM | claim support, conflict, source quality | high |
Что именно оценивает cascade:
| Этап | Что оценивает |
|---|---|
| BM25 / exact | exact terms, IDs, tickers, числа, даты, API names |
| Dense retriever | semantic similarity и paraphrase match |
| Visual retriever | page/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 в 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 | Что видно публично | Как это трактовать |
|---|---|---|
| OpenAI | Responses API, web search, file search, deep research, code interpreter, computer use, remote MCP | Unified agentic runtime с tools и retrieval surfaces вокруг модели |
| Anthropic | Contextual Retrieval, advanced tool use, web search, tool search, citations, multi-agent research | Сильная публичная рамка context engineering, tool ergonomics and budgeted research |
| Google / Gemini | Grounding 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: числовые ориентиры
Эти числа не являются универсальными константами, но хорошо задают инженерную геометрию: retrieval quality улучшается каскадом, tool surfaces надо загружать по требованию, visual media имеют токенную цену, а agentic search требует budget controller.
| Источник | Число | Что доказывает |
|---|---|---|
| Anthropic Contextual Retrieval | top-20 retrieval failure rate 5.7% -> 3.7% with contextual embeddings; 2.9% with contextual BM25; 1.9% with reranking | Contextual chunks, BM25 and reranking реально двигают retrieval quality. |
| Anthropic Advanced Tool Use | 58 tools from 5 MCP servers около 55K tokens; Tool Search около 8.7K tokens and 85% reduction | Tool search нужен, когда tool definitions начинают съедать context. |
| Anthropic Multi-Agent Research | multi-agent systems около 15x tokens относительно chat; single agent около 4x | Agentic retrieval должен быть budgeted. |
| Gemini media resolution | Gemini 3 PDF medium 560 tokens/page; image high 1120; video high 280/frame | Visual context has real token geometry. |
| VisRAG | 25-39% end-to-end gain над text-based RAG | Parsing/OCR loss measurable. |
| ViDoRe V3 | 26,000 pages, 3,099 queries, 6 languages | Enterprise document retrieval нужен оценивать на page-level evidence, not only chunks. |
| MMDocIR | VLM-text примерно 1.5x OCR-text for tables and 3.8x for figures | OCR loses multimodal signal before retrieval. |
| From BM25 to Corrective RAG | hybrid + neural rerank: Recall@5 = 0.816, MRR@3 = 0.605 | Mixed text/table QA needs hybrid and reranking. |
Приложение B: vendor surfaces
| Surface | OpenAI | Anthropic | Google / Gemini |
|---|---|---|---|
| Web retrieval | Web search, deep research | Web search with filtering | Google Search grounding |
| Private retrieval | File search over vector stores | Files API, search result blocks, citations | Vertex AI Search, File Search API preview, RAG Engine |
| Tool retrieval | Tool search, MCP | Tool Search Tool, deferred loading | Function calling and platform tool surfaces |
| Citations | URL and file citations | Search result blocks, document/page/character citations | Grounding metadata and source links |
| Multimodal docs | Text/images, file/image analysis, cookbook patterns | PDFs/images/files plus citations | Native PDF/document understanding, media resolution |
| Agentic research | Deep research, background mode, MCP search/fetch | Multi-agent research system | Deep 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
| Priority | Experiment | Минимальный протокол |
|---|---|---|
| P0 | Page-image vs OCR-text vs VLM-text vs hybrid | ViDoRe V3 + MMDocIR + internal PDFs; Recall@K, nDCG@10, evidence-page recall, latency, storage |
| P0 | Hybrid + reranker ablation | BM25, dense, hybrid RRF, hybrid + cross-encoder; MRR@3, Recall@5, nDCG@10, cost |
| P0 | Context packing ablation | naive concat vs dedup/diversity/source-order/page-crops; correctness, faithfulness, citation precision |
| P0 | Agentic vs non-agentic routing | simple facts, targeted QA, open-ended research; tool calls, tokens, wall-clock, timeout |
| P0 | Security harness | prompt injection, ACL leakage, stale source handling, citation mismatch, tool result injection |
| P1 | Long context vs retrieval routing | full-document, retrieved, hybrid; cost, latency, faithfulness |
| P1 | Visual reranker vs textual reranker | same candidate pool, compare text reranker and VLM reranker |
Без этих ablations статья остается strong engineering synthesis. С ними она превращается в архитектурную записку, по которой можно менять production pipeline.
Приложение D: failure modes
| Failure mode | Симптом | Митигировать |
|---|---|---|
| OCR потерял важный сигнал | Модель не видит table/legend/caption | visual page index, region crops, VLM rerank |
| Visual retriever нашел похожую страницу, но не тот смысл | Похожий chart, другой entity/date | metadata filters, text+visual fusion |
| Dense retriever пропустил exact ID | Error code/order ID не найден | BM25/exact index |
| Reranker выбрал вторичный источник | Blog/SEO page выше official doc | source authority features |
| Context packing выкинул главный evidence | correct doc retrieved, wrong answer generated | packing eval, evidence ablation |
| Citation mismatch | claim cites source outside context | citation contract hard failure |
| Stale index | ответ по старой версии | versioning, freshness routing |
| ACL leakage | evidence из чужого tenant | pre-retrieval ACL filtering |
| Prompt injection from source | модель следует instructions из PDF/web page | source sandboxing, tool-call validation |
| Agentic loop burns budget | много search/fetch без новых facts | budget controller, early stopping |
Приложение E: источники
OpenAI
- Migrate to the Responses API
- Web search
- File search
- Deep research
- Image Understanding with RAG
- Tool search
Anthropic
- How we built our multi-agent research system
- Contextual Retrieval
- Introducing advanced tool use
- Web search tool
- Tool search tool
- Writing effective tools for AI agents
- Effective context engineering for AI agents
- Files API
- Citations
Google / Gemini
- Grounding overview
- Grounding with Vertex AI Search
- Gemini Embedding 2
- Gemini 3 Developer Guide
- Gemini media resolution
- Document understanding
- Use Vertex AI RAG Engine in Gemini Live API
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.