Retrieval-Augmented Generation изглежда просто на диаграма и е коварно в продукция. Преминаваме през седемте най-чести причини за грешни отговори и конкретните мерки срещу тях.
Демото винаги работи
Всеки RAG прототип впечатлява. Проблемите се появяват на третия месец, когато базата има 200 000 документа вместо 200, а потребителите задават въпроси, които никой не е предвидил.
1. Разделянето на парчета (chunking)
Разделяне по фиксиран брой символи къса изречения и таблици. По-добър подход е разделяне по структура — заглавия, параграфи, клетки — с припокриване от 10–15%.
def chunk_by_structure(doc: Document, target: int = 800) -> list[Chunk]:
chunks, buffer = [], []
for block in doc.blocks:
if sum(len(b.text) for b in buffer) + len(block.text) > target:
chunks.append(Chunk(blocks=buffer, heading_path=block.heading_path))
buffer = buffer[-1:] # припокриване
buffer.append(block)
return chunks
2. Липса на метаданни
Парче текст без източник, дата и раздел е безполезно за филтриране. Минималният набор метаданни:
source_idиsource_titleupdated_at— за да отсеете остаряло съдържаниеheading_path— контекстът, в който се намира парчетоaccess_level— кой има право да го вижда
3. Само семантично търсене
Векторното търсене се проваля при точни идентификатори, номера на артикули и редки термини. Хибридното търсене (BM25 + вектори) с последващо преподреждане е почти винаги по-добро.
4. Липса на преподреждане (reranking)
Първите 20 резултата от векторното търсене рядко са подредени правилно. Cross-encoder преподреждач върху top-50 обикновено вдига точността с 15–25 пункта.
5. Прекалено голям контекст
Подаването на 30 парчета „за всеки случай" влошава резултата. Моделът се разсейва, а разходът расте линейно. Пет до осем добре подбрани парчета почти винаги бият тридесет случайни.
6. Липса на позоваване
Ако отговорът не сочи към конкретен източник, потребителят няма как да го провери — и с право няма да му вярва.
7. Нулево наблюдение на качеството
Нужен е постоянен набор от контролни въпроси с известни отговори, който се изпълнява при всяко обновяване на индекса.
| Метрика | Какво измерва | Целева стойност |
|---|---|---|
| Recall@10 | Има ли верният документ в първите 10 | > 0.90 |
| Точност на позоваването | Сочи ли отговорът верния източник | > 0.95 |
| Дял на отказите | Кога системата казва „не знам" | 5–15% |
Заключение
RAG не е архитектура, а дисциплина. Печелят екипите, които мерят.
