Што такое RAG: як запобiec там, каб чатботы стваралі некальканыя факты пра компанію
Практычныя вядомасці пра праграмнай схеме RAG — чытальнікі дадзей, разбіўка на часткі, эмбеддынгі, храненне вектараў, практыка перыяранавання, гібрыдны пошук і RRF — а таксама калі вообща не трэба выкарыстоўваць функцыю пошуку.
Звычныя завданні для чат-ботаў на пачатковым этапе выглядаюць так: адпаведзаць на запытанні з корпаратыўных дасяглінаў. Швыдкі пратэтап часта здаецца вывераным — але стварае неправдзівыя факты. Ён можа стверджваць «падтрымка 24/7 у 12 краінах», калі на самай працэ ёсьць падтрымка толькі в аднай краўні, толькі па рабочы час і толькі калі є адпаведны спецыяліст па IT.
Самэ гэтае недастаткі ёсьць сэрцая метаю RAG (Retrieval-Augmented Generation): модель, якая можа даць адпаведзенне, не тая ж самая, як модель, якая мае рэальныя даны організацыі. Без асновы ў форматах з вялікай колькасцю слоў яны паводзяцца як упэўненыя роднікі, якія на свадзьбе выдумваюць історію сям’і — працоўна ў 40 процэтаў правільна, але на 100 процэтаў упэўнена.
Частка 1: Што такое RAG на самай працэ?
RAG значыць Retrieval-Augmented Generation. Ідея простая.
У заместо таго, каб прабавіцца заставіць модель адпавядаць толькі на базе памяці, выучанай час трэнавання, система спачатку запрашоўвае актуальны матэрыял, а пасля — адпаведь, якая мусіць быць створаная на аснове гэтага матэрыялу.
Спрэчываюцца з моделью тексту як з агрэсіўным, занадта самавярлівым стажэрам: выдатным у пісьменнай роботе, але слабым у запамятовванні правіл кадровай політыкі 2023 года. Заведаменне RAG — это тое, што дае стажэру правыя дакументы до таго, як ён пачне адпавядаць.
Без RAG: адпаведзі паслужаюцца памяцю (старой, універсальной або неактуальной для конкрэтнай компаніі). З RAG: адпаведзі паслужаюцца памяцю плюс дакументы, запрашоўваныя для адпаведзі на гэты запит.
Короткая формула, якая застаецца актуальной:
Правыя меркаванні × Правы контэкст × Правы запит = Правая адпаведь
Частка 2: Процес RAG
Расшырэнне памяці за дапамою запрашоўвання дакументаў — это не адна магічная дзеянне. Это багатоэтапны процес: якщо хоць адна з стадзій не выйдзе, адпаведзі будуць запазджаць або быць некоректнымі.
Стоп-пункт 1 — Джерелы знання
Дзе знаходзіцца матэрыял? PDF-файлы, файлы Word, сторанкі Notion, табелі SQL, экспорты з Slack і забутыя электронныя табліцы — усе гэта ўваходзіць у кантэкст джерел знання.
Стоп-пункт 2 — Завантажувачы дакументаў (прыем даных)
Процес прыема ператварае PDF/HTML/CSV і т. п. у чыстую, аднородную форму — часта ў такі выгляд:
Document(
page_content="The quick brown fox...",
metadata={"source": "annual_report.pdf", "page": 12, "author": "Finance Team"}
)
Ігнораванне астаточнага завантажэння і проста вставкі неапдоробленых байтов PDF у поток часта прыводзіць да таго, што загалавкі і падзагаловкі стаюць «фактамі» («За данымі сторанкі 47 з 92…»). Ніхто не прасіў про дэталі сторанкі.
Урок: нечысты прыем даўае нечыстыя результаты пошуку і некоректныя адпаведзі. Неабходна чыстасць з самага пачатку.
Стоп-пункт 3 — Разбіўка на часткі
PDF з 200 сторанакамі нельга проста вставіць у запит. Вікна контэксту маюць пярэдзелы, і переплыванне моделі цэлай кнігай прыпэксаў, калі была запраслена толькі адна рэцептура, паграждае тачнасцю.
Таму дакументы дзеляцца на сегменты.
Паўзлівыя стратэгіі:
- Раздзелэнне на фіксаваныя часткі — розрываецца кожныя N токанаў. Шырока, але выконваюцца розрывы ў середзіне запэўднення.
- Раздзелэнне на фіксаваныя часткі з перакрыццем — тыя ж розрывы, але з невеликім перакрыццем, каб захаваўся контекст межы. Частая стандартная настройка.
- Хіерархічнае/рэкурсыўнае раздзелэнне — спачатку выважваюцца разделы і параграфы, а потым — розрывы.
- Семантычнае раздзелэнне — аб’еднаваюцься запэўднення з адной тэмай за дапамогою імбедінгаў. Болей розумнае, але трэба больш вычыслаўных ресурсоў.
- Раздзелэнне на адной лінгвістычнай машыне / Агентнае раздзелэнне — модель вядома, дзе трэба робіць розрывы. Дорога, але корисна для юрыдычных/медыцынскіх текстаў.
Практычная правіла пасля таго, як бачыліся, як у дакуменце з контрактам слова “shall NOT be liable” раздзеляюцца пасля “shall”: пачынайце з фіксаванага размеру частакаў з перакрыццем; дадзейце большую складнась толькі тады, калі якасць выкарыстоўвання інфармацыі справа ўжо падлегла.
Стоп-пункт 4 — Эмбеддынгі (ператварэнне слоў у GPS-координаты)
Эмбеддынг ператварае рэчанку ў спіс цячэнняў, які фіксуе значэнне, а не правапіс. Рэчанкі з падобным значэннем знаходзяцца рыжыя, нават якшо у іх няма жадных спаканых слоў.
Фразы «Як можна перазначыць пароль?» і «Кранты для заходу забыты» практычна не маюць спаканых элементаў, але значэнне іх майже адна і тая ж. Пошук па ключавым словам не бачыць гэтага зв’язку; эмбеддынг фіксуе яго па прыняццю значэння.
Історыя развіцця праходзіла ад методу «Кошачка слоў» (які лічыць толькі) → TF-IDF → Word2Vec → BERT → сучасных API для эмбеддынга і адкрытых модэляў (OpenAI, Cohere, BGE, E5 і іншыя), якія уважаюць контэкст.
Аналагія: «Кошачка слоў» — цэна машынны пераклад слоў за слоўма. Сучасныя эмбеддынгі больш супамінаюць чалавека, які жыў у обох культурах і розумее намер.
Стоп-пункт 5 — Хранілішча вектараў (бібліятэкі, дзе зберагаюцца всі гэтыя спісы цячэнняў)
Калі сегменты стаюць вектарамі, ім патрэбна быстрая збероžка та пошук: Pinecone, Qdrant, Weaviate, Milvus, ChromaDB, FAISS і падобныя системы.
Пры наявнасці запиту неабходна вярнуць топ-K сегментоў, чыія вектары знаходзяцца найбліжэй да вектара запиту. Варыянты індексавання включаюць:
- Brute force — парабяляваць усё. Точны, але медленны праз вялікія об’ёмы дадзеных.
- ANN (Approximate Nearest Neighbor) — адносна менш точны, але значна шырэй. Стандартны выбор.
- IVF — спачатку ствараць кластэры; шукать толькі перспективныя з іх.
- HNSW — шырэй праходзіць па графе суседзей. Часта викорыстоўваецца у практычных рашэннях RAG.
Іспытанне мільйонав вектараў методам Brute force «для абсалютнай точнасці» можа ператворыць запиты, якія займаюць калісэкунды, на задзейнення трываючыя час перапынкі. Выбірайце спосаб індексавання па розмеру дадзеных, а не па гордасці.
Этап 6 — Адзысканне (Пошук падобнасці)
Калі прыходзіць запит, яго трэба адключыць за дапамою таго ж модэля, які викорыстоўваецца для файлаў — сумешчанне модэляў ёсць класычныяй працою, — пасля чаго запрашваюцца Топ-К сэгментаў, якія ўзаемна супадаюць.
Косінейская супадзімасць — гэта стандартны показнік: насколькі два вектары супадаюць па направленні, не адзіраючыся ад дужнасці. Гэта стабільны стандарт для розных дужнасцей текста.
Этап 7 — Адгэнераванне (падача правильнага файлу інтэрну)
Запрашаныя сэгменты дадаюцца ў запрошэнне разам з запитам пользователя. Гэта і є «этап адгэнеравання»:
System: You are a helpful assistant. Only answer using the context below.
Context: [retrieved chunk 1] [retrieved chunk 2] [retrieved chunk 3]
Question: What is our refund policy?
Этап 8 — Генераванне (LLM нарэшце выказваецца)
Лячына толькі тады модэль пішае заканчоўны адказ — апаруч з запрашаным контэкстам, а не на адчутках.
Частка 3: Тое, што розлічвае «гэта працуе» ад «гэта працуе добра»
У навучальных матэрыялах часта зупіняюцца на базовым прайску. Для якосці жывых систем зазвычай трэба больш.
Перыякораванне — таму што парад першых рэзультатаў пошуку не завжды ёсць найкращыя рэзультаты
Метод бі-енкодэраў ёсць быстрым, але грубым: запит і дакумент кодуюцца окалічна, а пасля порৱнююцца. Ён чырплівы для скарычэння мільйонава элементаў да ~50 кандыдатаў.
«Быстрая і прыблізна правильная» адпаведь не завжды ёсць «праўдзівая», таму медленнейшы крос-енкодэр для перыякоравання оцінюе запит і дакумент разам, фіксуючы нюансы, запароджэння і контекст. Ён працуе толькі з скорачаным списакам і выдвайае справжнія найкращыя рэзультаты.
Аналагія: бі-енкодэры працуюць над резюме, каб стварыць скорачаны список; крос-енкодэры адбываюць спрабу.
У боте з частаючымі запитаннямі ў медыцынскай сфере без пераранжавання запит пра взаімадзейсць з алкаголем можа выявіць іншы прыёмны прыбор, які толькі мае аднаковую лексыку. Крос-кодэр для пераранжавання часта негайна выправляе гэта. Калі важліва точнасць (у правовых, медычных чы або фінансавых кантэкстах), пераранжавання ўмовна, а не факультатыўна.
Гібрыдны пошук — таму што як лексычны, так і векторны пошук самі па сабе ў меры слепы
Векторны пошук фіксуе значэнне, але можа працягнуцься праз точныя токены — коды SKU, ідэнтыфікаторы абоеракцый, власныя імены. Лексычны пошук BM25 точна знаходзіць строкі, але не бачыць сінонімав.
Гібрыдны пошук спалюе BM25 і векторную методыку аднароўнавання: тачная пашуковая ключоўка плюс семантычнае вярнаванне. Калі няма ўпевненасці, гібрыдны варыянт — адлучны выбор: рэдкасцю гіршы, а часта лепшы.
Фюзыя RAG — аб’еднанне калькіляўванняя думак, як у груповым проекте (але гэты раз цяпер справдзіцца)
Разныя методы адзьвечання на запиты (густыя, на ключавыя словы, спецыфічныя для домэна) ствараюць калькольнікі з рангаванням. RAG Fusion спаўнае іх за дапамою Reciprocal Rank Fusion (RRF).
Ідея простая, нават якщо формула выглядае формальна: дакумент, які займае высокую пазіцыю за дапамою калькольнікаў, створаных разнымі методамі, верагатываўна є рэлевантным. RRF адзначае значэнне цэласносці межы калькольнікаў, а не сухих балоў, якія немагчыма пораўняваць между разнымі методамі адзьвечання.
RRF(d) = Σ 1 / (k + rank_i(d))
Часта значэнне k становіць 60 — гэта прыемство ў індастрыі, а не выведзена константа.
Метаданы — атрыбуты, якія пазней выважаюцься важлівымі
Метаданы — это даны пра даны: заглавле, авар, дата, адказчык, рэжым доступу. Яны здаюцца беззначнымі, пакуль не з’яўляецца правило доступу — «ніколы не паказваць внутршнія документы кадровага апарату зовнішнім корыстнікам» — і тады атрыбуты access_level: internal стаюць важлівымі.
Метаданыя дазваляюць выкорыстоўваць фільтры, падвышэнне рангу, контроль доступу і адлучэння бягаў (“чаму дакумент 2019 года адпаведзеў на запыт 2026 года?” → нехватка фільтраў па дате).
Памяць і кэшаванне — таму што ніхто не хоча платіць за адны і той жа вычысленні два разы
Две ідэі, якія часта плутаюцца:
- Памяць = давялегае запам’ятовванне прыязнасцей, пакульніх дзеянняў, стойкіх фактам.
- Кэшаванне = кароткатрывалое паўтарны выкарыстоўванне дорогіх рэзультатаў (адпаведзей моделі, рэзультатаў пошуку) для паўтарных запытаў.
Памяць робіць асистэнтов стабільнымі. Кэшаванне робіць іх быстрымі і дышэўнымі. Їх сумешчанне — напрыклад, “кэшаванне” прыязнасцей з таймаўмем 10 хвілін — можа выцераты імя пользователя падчас чата. Храніце цяперышнія панявы окрема.
Частка 4: Калі не трэба выкорыстоўваць RAG?
Расшырэнне чераз адзыскванне дадзенняў — гэта не універсальны інструмент.
Адкладзіце RAG, калі:
- Этажэнне ўскладненая, але яна вже знаходзіцца ў межах загальных знанняў, якімі распаляецца модель (“століця Францыі” не патрабуе вектарнага індэкса).
- Факты постоянна зміняюцца (цены, рэзультаты гэманаў) — лепш выкарыстоўваць API.
- Задача ўсё адно чыста творчая (паэзія, брейнштармінг) — адзыскванне інфармацыі рэдка калі дапамагае.
- Корпус дастаткова маленькі, ўсё можна практычна падаць у запит.
- Ультракороткі час адпаведзення не дазволяе додатковых крокаў адзысквання інфармацыі.
Інодзе рашэнне крыўціцца ў праверанні запыту або тонкай наладзе, а не ў цэлым вектарным прайсепты. Выберыце інструмент прычаму до таго, як працаваць з системай.
Частка 5: Найлепшыя практыкі, выучаныя на скасце
- Раздзеляйце тэкст розумна, а не на мінімальныя часткі. Мінімальныя фрагменты втрачаюць контэкст; вялікія фрагменты — тачнасць. Лепш выкарыстоўваць перакрыцце.
- Выкарыстоўвайце аднаго эмбедера для файлаў і запытанняў. Сумешчанне модэляў значыць вимераванне ў сумешанных единіцах.
Команды, які розглядаюць процэс выкарыстоўвання інформацыі як дадатковы элемент, зазвычай знову сталкаюцца з тымі ж проблемамі: тыхае зменшэння структуры дадзеных у прыстроях загрузкі, межы частак, якія паўдзеляюць заперчання, несувярэннасці модэляў у процэсе індексавання па афлайн-методам і запыткаў у режыме онлайн, а таксама панелі керування, якія вимерваюць толькі „час адпаведзення“, ігнаруючы якосьць рэсультатаў. Эфектывае практыкаванне RAG розглядае кожны этап працы як окремую частку продукту, для якой є відпаведальныя адносабы, тэсты і планы на випадак збою — особліва калі асистэнт працуе з кліентамі чыста ў рамках регулююцыхся процэсаў.
Пры ацэнке змян лепш выкарыстоўваць парныя експерыменты: той самы набор запыткаў, тая ж крэтыранія для оцэнкі, паўтарнае вылічэнне показначыкаў Recall@k і ступеня адпаведнасці да фактамаў пры змяні способу часткавання дадзеных чыста ў рамках рэнкіраў. Незначныя праграсы ў процэсе выкарыстоўвання інформацыі часта є кращымі за большыя змены, якія выкарыстоўваюць толькі запыткі, адтакоўваючы, што генератор не можа цітаваць тое, чаго няма ў вікні контексту.
Мантра RAG
Точная інфармацыя → Тачны контэкст → Тачны запрос → Тачна адказ.
RAG — это тэхніка, а не магія. Чысты запоўнення даных, разумны выкарыстанне інформацыі, чыстая адбудова адказу і чытка формуліравання запросу ператвараюць занадто самавярогодзілаго чалавека на кваліфікованага спецыяліста, які спачатку прачытае файл, і такім чынам запобегаюць выдумванню ідеі 24/7 глобальной падтрымкі, якой неймае.