Compiled from
raw/architecture-docs/app-README.md
Lexery - U4 Retrieval
Роль у Pipeline
U4 — головний retrieval engine Brain: перетворює виконувальні кроки з U3 SearchPlan на реальні vector-hits із Qdrant, memory, та інших джерел. Це найскладніша і найконфігурабельніша стадія pipeline: десятки env-змінних, кілька retrieval modes, query rewrite, multi-goal fusion, planner routing, OOD guard, reference expansion — і все це до того, як U5 Gate вирішить, чи достатньо знайденого.
Результат — retrieval_trace і raw_hits у RunContext, які споживаються U5 (gate), U7 (evidence assembly), і далі U9/U10 (writer).
Code Surfaces
apps/brain/retrieval/consumer.ts—handleU4Event: оркестрація етапів retrieval, persist, enqueue U5apps/brain/retrieval/queryRewrite.ts— query rewrite phase: перефразування запиту для vector searchapps/brain/retrieval/planRules.ts— маппінг SearchStep → retrieval strategyapps/brain/retrieval/fusion.ts— multi-query RRF (Reciprocal Rank Fusion) для об’єднання результатівapps/brain/retrieval/referenceExpansion.ts— reference expansion: доповнення hits пов’язаними статтямиapps/brain/retrieval/articleBackfill.ts— article backfill для direct citation gapsapps/brain/retrieval/oodGuard.ts— Out-of-Domain guard: відсікання запитів поза юрисдикцієюapps/brain/retrieval/helpers/*— finalization clusters, hit dedup, scoring normalization
Конфігурація (найбільша серед усіх stages)
Qdrant / Vector:
| Ключ | Призначення |
|---|---|
QDRANT_URL | URL Qdrant vector DB instance |
QDRANT_API_KEY | API key для Qdrant auth |
LLDBI_TOP_K | Кількість top-k hits з vector search |
Feature Flags і Caps:
| Ключ | Призначення |
|---|---|
MIXED_MODE_LAW_CAPS | Ліміти law hits для mixed-mode (memory + law) |
MULTI_GOAL_FUSION_ENABLED | Увімкнення multi-goal RRF fusion |
QUERY_REWRITE_ENABLED | Дозвіл LLM query rewrite перед vector search |
MULTI_QUERY_RRF_ENABLED | Дозвіл multi-query Reciprocal Rank Fusion |
REFERENCE_EXPANSION_ENABLED | Розширення hits пов’язаними article references |
ARTICLE_BACKFILL_ENABLED | Доповнення прямих citation gaps |
OOD_GUARD_ENABLED | Out-of-Domain guard filter |
PLANNER_ACT_PLANNER_ENABLED | Act-level planner routing |
Більшість feature flags мають парні *_MODEL та *_TIMEOUT_MS для LLM-driven фаз (query rewrite, OOD guard).
Runtime Behavior
Input: SearchStep[] з U3a, query_profile з U2, RunContext.
Етапи виконання:
- Query Rewrite — LLM перефразовує оригінальний query у vector-friendly форму; зберігає оригінал для fallback.
- Vector Search — parallel запити до Qdrant за кожним
SearchStep(chunks, acts, memory);LLDBI_TOP_Kвизначає глибину. - Multi-Query RRF — якщо є кілька варіантів query (rewrite + original), результати об’єднуються через Reciprocal Rank Fusion з configurable weights.
- Multi-Goal Fusion — для запитів з кількома legal goals (наприклад, «чи можна звільнити + які виплати»), окремі sub-goal hits зливаються у єдиний ranked list.
- Reference Expansion — hits доповнюються пов’язаними статтями (наприклад, стаття 232 КЗпП → стаття 233 з процедурними деталями).
- Article Backfill — якщо
query_profileміститьarticle_refа прямий hit відсутній, backfill шукає конкретну статтю. - OOD Guard — відсікає запити, де найкращі hits не перетинають поріг релевантності (Out-of-Domain).
- Finalization — dedup, scoring normalization, coverage-gap derivation, trace shaping.
Output: retrieval_trace (meta: coverage_gap, timing, hit stats) і raw_hits у RunContext; enqueue U5.
Test Coverage
| Тест | Фокус |
|---|---|
test_plan_rules_units.ts | Маппінг SearchStep → retrieval strategy |
test_query_rewrite_phase_units.ts | Query rewrite LLM phase |
test_rag_golden_eval_units.ts | Golden evaluation: precision/recall на reference queries |
test_rag_units.ts | Core retrieval pipeline end-to-end |
test_retrieval_consumer_units.ts | Consumer orchestration, error handling |
test_u4_memory_propagation_units.ts | Memory items propagation через retrieval |
test_verify_retrieval_real_dev_units.ts | Real-dev verification з живим Qdrant |
| 4 stress tests | Concurrency, large result sets, timeout resilience |
Failure Modes
- Qdrant timeout / unreachable: retrieval degraded;
retrieval_trace.meta.degraded_lldbi = true; U5 бачитьDEGRADED_LLDBIreason code. - Query rewrite hallucination: rewrite phase може змінити семантику запиту; fallback на оригінал зменшує ризик.
- Post-U4 tail latency: відома проблема з архітектурних docs — multi-query RRF + reference expansion + Qdrant round-trips складають основну частину pipeline latency.
- Mixed-mode caps: занадто агресивні
MIXED_MODE_LAW_CAPS→ memory-heavy запити втрачають law context і навпаки.
Взаємодія з іншими стадіями
Від U3: executable SearchStep[] + thresholds. Від U2: query_profile (entities, intent, ambiguity, routing_flags). До U5: retrieval_trace, raw_hits. Зворотний цикл через U6: при expand gate U6 може повернути run до U4 (RUN_U4) з оновленими cues для повторного retrieval.
Історична еволюція
Почалося як legacy CacheRAG з простим vector search. Гілка codex/legal-rag-foundation додала helper clustering, soft-query honesty, multi-goal coverage. Поточна legal-agent-brain-dev продовжує з query rewrite і recovery optimization. Runtime docs визнають, що U4 мав найсильніший інтелект у системі ще до ORCH upgrade.
Current Risk / Opportunity
- Сильний на direct / hard references (конкретна стаття конкретного акту).
- Слабший на soft multi-goal natural legal requests (абстрактні питання з кількома правовими аспектами).
- Tail latency залишається ключовим bottleneck для загального часу відповіді.
See Also
- Lexery - Retrieval, LLDBI, DocList
- Lexery - U5 Gate
- Lexery - Corpus Evolution
- Lexery - LLDBI Surface
- Lexery - Provider Topology
- Lexery - Run Lifecycle
- Lexery - Retry and Recovery
- Lexery - Coverage Gap Honesty
- Lexery - U3 Planning
- Lexery - U6 Recovery
- Lexery - ORCH and Clarification
- Lexery - Brain Architecture
- Lexery - U7 Evidence Assembly
- Lexery - Import Proposal Loop
- Lexery - U8 Legal Reasoning
- Lexery - U10 Writer
- Lexery - U11 Verify