Галоўная / Артыкулы / Што такое RAG: як запобiec там, каб чатботы стваралі некальканыя факты пра компанію

Што такое RAG: як запобiec там, каб чатботы стваралі некальканыя факты пра компанію

Практычныя вядомасці пра праграмнай схеме RAG — чытальнікі дадзей, разбіўка на часткі, эмбеддынгі, храненне вектараў, практыка перыяранавання, гібрыдны пошук і RRF — а таксама калі вообща не трэба выкарыстоўваць функцыю пошуку.

1837 слоў

Звычныя завданні для чат-ботаў на пачатковым этапе выглядаюць так: адпаведзаць на запытанні з корпаратыўных дасяглінаў. Швыдкі пратэтап часта здаецца вывераным — але стварае неправдзівыя факты. Ён можа стверджваць «падтрымка 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: Найлепшыя практыкі, выучаныя на скасце

  1. Раздзеляйце тэкст розумна, а не на мінімальныя часткі. Мінімальныя фрагменты втрачаюць контэкст; вялікія фрагменты — тачнасць. Лепш выкарыстоўваць перакрыцце.
  2. Выкарыстоўвайце аднаго эмбедера для файлаў і запытанняў. Сумешчанне модэляў значыць вимераванне ў сумешанных единіцах.
  • Дадзіце можласць параджангу, калі важлівая точнасць. Мінімальны час адпаведзення зарады значных падынь у якосці.
  • Атрыбутавайце метаданы з першага дня. Будучыя фільтры будуць гэта патрабаваць.
  • Адначасова ацэніце. Следзіце за Recall@k / Precision@k а таксама за правдазнасцю/рэлевантнасцю генеравання. Атмасфера не ўваходзіць у метрыкі.
  • Зберагаеце у кэшы дорогія, стабільныя расчытанні; апдэйтуеце тое, што змянілася. Не застойвайце шыбкая змінюючыся інфармацыю; не пераскладвайце статычныя расчытанні.
  • Дзержыце правілы. Модэрацыя, цитаты і перакананні ў абсурдзе запобегаюць самавпэўненым каламуткам у дэманах.
  • Команды, які розглядаюць процэс выкарыстоўвання інформацыі як дадатковы элемент, зазвычай знову сталкаюцца з тымі ж проблемамі: тыхае зменшэння структуры дадзеных у прыстроях загрузкі, межы частак, якія паўдзеляюць заперчання, несувярэннасці модэляў у процэсе індексавання па афлайн-методам і запыткаў у режыме онлайн, а таксама панелі керування, якія вимерваюць толькі „час адпаведзення“, ігнаруючы якосьць рэсультатаў. Эфектывае практыкаванне RAG розглядае кожны этап працы як окремую частку продукту, для якой є відпаведальныя адносабы, тэсты і планы на випадак збою — особліва калі асистэнт працуе з кліентамі чыста ў рамках регулююцыхся процэсаў.

    Пры ацэнке змян лепш выкарыстоўваць парныя експерыменты: той самы набор запыткаў, тая ж крэтыранія для оцэнкі, паўтарнае вылічэнне показначыкаў Recall@k і ступеня адпаведнасці да фактамаў пры змяні способу часткавання дадзеных чыста ў рамках рэнкіраў. Незначныя праграсы ў процэсе выкарыстоўвання інформацыі часта є кращымі за большыя змены, якія выкарыстоўваюць толькі запыткі, адтакоўваючы, што генератор не можа цітаваць тое, чаго няма ў вікні контексту.

    Мантра RAG

    Точная інфармацыя → Тачны контэкст → Тачны запрос → Тачна адказ.

    RAG — это тэхніка, а не магія. Чысты запоўнення даных, разумны выкарыстанне інформацыі, чыстая адбудова адказу і чытка формуліравання запросу ператвараюць занадто самавярогодзілаго чалавека на кваліфікованага спецыяліста, які спачатку прачытае файл, і такім чынам запобегаюць выдумванню ідеі 24/7 глобальной падтрымкі, якой неймае.