Чаму RAG ламаецца на рэальных дакументах: разбіўка, гібрыдны пошук, пераранжаванне і ацэнкі
Чаму RAG ламаецца на рэальных дакументах і якія патэрны гэта выпраўляюць: двухфазны дызайн, выбар разбіўкі, гібрыдны пошук, пераранжаванне і асобная ацэнка пошуку.
Крыніцы: Production-Ready RAG Architecture: Core Patterns Explained
Чаму дэмы не працуюц з рэальнымі дадзеннямі
Туторыі па RAG зазвычай працуюц з аднім апранутым PDF-файлам або выкарыстоўваюць даны з Вікіпедыі, чыяя ўмовы не адпавядаюць рэальным. Неабходна прыкласта той жа тэхналогічны план да справжніх корпоратыўных матэрыялаў з неравнамерным фарматаваннем, запытамі падтрымкі і вялікімі внутранімі вікі, і тады адпаведзенні часта будуць непূранымі, выдуманымі або абсалютна некорэктнымі. Две ідэі можна выясніць прычыны практычна ўсіх неудач у працэсе выкарыстоўвання такіх сістэм.
- RAG спачатку ёсць сістэма адшукання і толькі пасля таго — сістэма генеравання. Калі адшуканне дае некарэктны кантэкст, у мадэлі практычна няма шансаў даць правільнае адпаведзенне, незалежна ад яе здольнасцей.
- Абсалютная якосць залежыць ад слабейшага этапу, а не ад сярэдньага. Нават супернагая мадэль абмесцавання не можа вывяліць сітуацыю, калі інструмент для разбівання тэксту роздзяліў рэчэ на два часткі.
Две фазы
Кожная сістэма RAG складаецца з фазы стварэння індэкса паўтарна і фазы адпаведзення на запыты ў рэальны час:
Indexing (offline): documents → chunks → embeddings → vector store
Query (online): question → embedding → retrieval → context assembly → LLM
Установкі класычнага вырабаткі дадаюць можлівасць кэшавання, пераранжавання, захоўнікаў, манітарынгу і логікі альтэрнатыўных рашэнняў паўстаноўкі навакол гэтага ядра, але гэта ядро застаецца базай для усяго іншага, і жадныя інструменты пазнейшага етапу не можу парадражыць слабую базу.
Часткаванне прыносіць наібольшыя выгоды
Большасць сістэм не справляецца з часткаваннем, і гэтыя проблемы застаюцца непазначальнымі пакуль вы не будзеце дэбагаваць некорэктнае рашэння на трох вялікіх этапах пазней. Гэта мае значэнне, таму што мадэлі з вбудоўваннем працуюць найкрашча з кохерэнтнымі фрагментамі, вікна кантэксту ёсць скончанымі, занадта вялікія часткі прыносяць шум, а занадта маленькія пазбавляюць рашэння неабходных фактов.
Часткаванне фіксаванага размеру дзеляе кожныя N токенав з 10 да 20 процэнтамі перакрыцця. Гэта проста і прыемна, але гэта падход не бачыць меж звесьцоў і параграфаў, таму можа разлучыць вызначэнне без усведамлення. Гэта распашчатая точка для працы, але рэдкая раз крашчая.
Рэкурсыўны або іерархічны спосаб разбівання спачатку прыменяе еўлічныя паузы, двойныя новыя радкі, потым адныя новыя радкі, далей рэчы, а потым словы, і прыбегае да іншых методаў толькі тады, калі частка дакумента застаецца занадта вялікай. Большасць сучасных фрэймворкаў выбірае самэ гэта рашэнне, і гэта явна лепша альтэрнатыва чыстаму фіксаванаму разбіванню.
Разбіванне, якое узгадвае структуру дакумента, следуе за ўласным яго макетам: заголовкамі, раздэламі, блакамі коду і табліцамі. Для тэхнічных дакументаў і markdown-тэкстаў гэты спосаб часта выканаўшы лепшыя рэзультаты. Зберагаюце звязкі межу бацькімі і дзецінскімі часткамі, каб можна было падбіраць маленькія, точныя фрагменты, а потым расшырваць іх да цэлага бацькага раздэлу, калі патрэбны большыя кантэксты.
Семантычнае разбіванне выкарыстоўвае мадэль умяшчэння або LLM, каб знайсці месца, дзе тэма практычна змініцца, і разбіць дакумент там. Гэты спосаб дае найболей цягучыя фрагменты, але за цэну додатковых затрат, адтолькі калі кожна рашэнне пра межу выклікае працю мадэлі; таму яго зазвычай выкарыстоўваюць у корпусах дакументаў, дзе якасць адзысквання інфармацыі практычна вярнюе вартасць такіх затрат.
Разумныя стандартныя настройкі:
- Пачніце з рэкурзійнага або адпрацоўвання структуры документа, а ўжо пасля — з розбівкі фіксаванага размеру.
- Стараюцеся ствараць часткі па 300–800 токенав, а пасля налаштавайце ўсё на адповіднасць вашаму сэту ацэнкі, а не якомусь паказніку з блога.
- Зберагаюце метаданы для кожнай часткі: назву вучэльнага документа, заголовак раздзела, а таксама номер стороні чыя-то абзаца. Для фільтрацыі і цітатаў гэта будзе неабходна пазней.
- Склекчыце невялікі сэт рэальных запытанняў і пераканайцеся, што саме вытрымліваецца пад час пошуку, прычым перш чым прыступаць да вікорыстоўвання модэлю эмбедынга. Некалькаспрэчная розбівка документа таямна паспяшае парадоксальныя рэзультаты, таму паспецьце яе выправіць прычым налаштаваць іншыя элементы.
Эмбедынгі і хранілішчы вектараў
Модэлі для імбеддынгу размешчаюць тэкст у высака-вымяронай прасторы, дзе сэмантычная блізкасць стае геаметрычная блізкасцю, якая зазвычай ацэнюецца за дапамою косай схожасці або скалярнага добутку. Модэль мае значэнне, але якасць дадзэнняў і ўпакоўкі тэкста зазвычай маюць большое значэнне, чым тое, якая модэль выкарыстоўваецца. Главныя групы такіх модэляў — універсальныя відкрытыя модэлі, модэлі для спецыфічных сфер, такіх як право, медыцына або код, а таксама прыналежныя конкрэтным компаніям API. Выбірайце на аднойчынку з лексыканам вашай сферы, а не толькі за рангам у табелі лідэраў.
Асалівая задача хранілні вектараў — быстрая апрыксіматычная пашуканне найбліжэйшага суседа, таму што точная пораўнання методам брутальной сілы не працюе эфектыва для вялікіх калекцыяў. Большасць хранілняў выкарыстоўвае індэксы на аднойчынных структурах, такія як HNSW, або індэксы на кластэрах, такія як IVF, тады пашукавае запіт не патрабуе пораўнання з кожным вектаром. Цэным пакупкам являецца невялікая, налаштавальная верагатыба прахавання справжньага найбліжэйшага суседа зарады падлінейнага часу адпаведзення на запіт. Часта гэта налаштаванне не выканалі з самага пачатку, але адчуванне яго наявнасці дапамагае, калі трэба з’ясавіць, чаму не быў атрыманы явна правільны рэзультат.
Выбіраючы хранілню, запытайцеся, чы робіць яна фільтрацыю па метаданых, чы яна падтрымляе гібрыдны пашук вектараў і ключоўых слоў (BM25) адразу, насколькі проста ёй працаваць локальна прымаўна да кераванай версіі, і як выглядае стойкасць, рэплікацыя і масштабаванне для вашага об’ёму дадзеных. Серэд популярных варыянтаў — Qdrant, Weaviate, Pinecone, Chroma, pgvector і OpenSearch k-NN.
Спачатку для маркі в магазіне мае меньшое значэнне чым чатыры іншыя фактары: адраджаныя даны, чыстая структура, правільныя метаданы і можлівасць сумешання пошуку на адпаведнасць вектарам і ключоўым словам. Гібрыдны пошук вікорыстоўваецца практычна ў кожнай серйозной сістэме, адколі чысты пошук на адпаведнасць вектарам не можа знайсці такія літэральныя элементы, як коды каштоўкаў, SKU-ы і ID-ы продуктав, якія лёгка аднаходзяцца за дапамогою пошуку на ключоўыя словы. Спалучэнне ўжоўтучаных і розрозненых рэйтынгаў зазвычай кантролюецца аднам вагам, таму адна запытка можа быць спрамованая на значэнне або на точныя тэрміны залежна ад сцэнарыю вікорыстоўвання. Канцэптуальны гібрыдны падход выглядае так, хоча точны API разніцяцца ў залежнасці ад магазіна:
# Conceptual shape of a hybrid query — exact API varies by vector store
results = vector_store.hybrid_search(
query=user_question,
alpha=0.5, # weight between dense (1.0) and keyword (0.0) search
filters={"doc_type": "runbook", "product": "checkout-service"},
top_k=25,
)
За межамі схожасця top-k
Выбір k найбліжэйшых фрагментаў — гэта толькі пачатак працэсу адналёгчэння інфармацыі, а не канец. Рэальныя умовы продавалі продовжваюць выяўляць тыя ж проблемы: найбліжэйшы фрагмент не завжды ёсць найболей корыстным, факты ў адказе распадаюцца між кількома фрагментамі, мадэлі занадто мало зважаюць на матэрыял у серэдзіне дзяўолага кантэкста, нават калі ён там ёсць (эфект „загублення ў серэдзіне“), а мадэль укладання можа не розумець слоўнік вашай галіні.
Тэхнікі, якія варта дадаць, прыблізна за кантэкстам аддачы ад зусіль:
- Перыякораванне. За дапамою дэшавога вектарнага пошуку выбіраецца вялікі набор кандыдатаў — напрыклад, 20–50, а іноды і 100 элементаў, пасля чаго іх практычна перыякораваныя з дапамою крос-кодэра або малага LLM, прычым пасля гэтага выбіраецца тое, што будзе включанае ў запіт. Гэта адна з найэфектывнейшых дапамог у працэсе апрацоўкі даных. Крос-кодэр оцінюе запіт і дакумент адночасова, што ў дзесяткі разоў точней, чым порэваньне двух окрэма вырачаных вектараў, але яго трэба запускаць для кожнага кандыдата, і ён не можа обработаць весь набор. Пошук за дапамою бі-кодэра ёсць дэшавым, але прыбліжным і скарочвае колькасць кандыдатаў, тады як крос-кодэр ёсць дорогім, але точным і пераглядае толькі тыя кандыдаты, якія засталіся.
- Гібрыдны пошук, які спалучае ўжоцісныя вектары з рэдкім пошукам за ключавымі словамі, такім чынам не залішаючы точных токенав на вялікай вольнасці.
Ацэнка эфектывнасці адналажэння сама па сабе
Набор для адміністрацыі працюе лепшая за інтуіцыю. Запісайце 20–50 рэалістычных запытанняў, зазначыце, якія фрагменты трэба выкарыстоўваць для кожнага з іх, і безпасэчна пераканайцеся, чы роўна тыя фрагменты патрапляюць у топ-5 чы топ-10 (Recall@k). Дадзіце суддзю на базе LLM для ацэнкі рэлевантнасці толькі тады, калі ручная перапрацоўка здобудзе вашу доверлівасць. Калі якасць выкарыстоўвання фрагментаў ніколі не мерыцца окрэмна ад якасці адпаведных адказаў, час вітрачаецца на оптымізацыю няправільнага этапа. Такія інструменты, як Ragas, пакрываюць спецыфічныя паказнікі RAG, таму вам не трэба самім ствараць усю сістэму з нуля.
LlamaIndex чы LangChain, канцэптуальна
LlamaIndex ўсаснаесяцца ў дадзеныях, выкорыстоўваючы ўпорныя абстракцыі для механізмаў індэксавання, выкарыстоўвання дадзэнняў і запытанняі, і ён выглядае прыродным, калі галоўная проблема — гэта маса дакументаў, якія трэба эфектывна выкарыстоўваць. LangChain ўніверсальны, створаны на адной з базаў — ланцоў і агентаў, і мае значна большую экосыстэму інтэграцый. Ён болей гнучкі, але ў той жытак мае большыя вакуумы, калі патрэбна толькі можлівасць выкарыстоўвання дадзэнняў. Ні адна з апцыяў не ёсць чымсь чысцай магічным, адтаколькі обе выкарыстоўваюць тыя ж аднойчыныя прынцыпы. Выберыце адну, добра выучыце яе концэпцыі і не будзіце дагматычнымі, адтаколькі архітэктурныя знанні будуць корыстныя незалежна ад таго, які сінтаксіс вы выкарыстоўвайце.
Падсумак
- Індэксавання і запытання ўтвараюць адзеленыя фазы, таму іх трэба праектаваць незалежна.
- Разбіўка на часткі — гэта важлівы выбор у дызайне, а не стандартна настройка фрэймворку.
- Базы вектарных дадзэння ўтвараюць інфраструктуру, а практычны эфект даходзіць за дапамогою фільтраў і гібрыдных спосабаў пошуку, а не завдзяк самай марке.
- Якасць адзыскання інфармацыі трэба меркаваць окрэма, незалежна ад якосці адказу.
- Фрэймворкі ўсьмо толькі інструменты, а не архітэктура, таму трэба вывучыць ўсі ўзоры ўжыцтва і спрыяць іх замене на іншы інструменты.
Супаўязаныя матэрыялы
- Развітая тэхнологія RAG у працэсе вырабоцтва: архітэктура, інструменты і компромісы — Аналіз працэса вырабоцтва RAG: прыемка дадзеных, ўпорадкуванне, разбіўка на часткі, стварэнне эмбедынгаў, храненне вектараў, гібрыдныя методы адзыскання інфармацыі, пераранжаванне рэзультатаў, ацэнка якосці і меры безпекі, а таксама компромісы, якія ўсё гэта супакоўвае.
- Пашырэнне тэхнологіі RAG: ад базовых прынцыпаў да проблем у працэсе вырабоцтва — Два практычныя падходы, тры этапы і спіс распашчаных проблем: як працюе тэхнологія RAG, дзе ў яе выклікаюцца проблемы і якія способы ўсунуць кожную з іх.