Зупінка галюцынацый чат-бота: RAG, векторны пошук, роздзеленне на часткі і захоўні механізмы.
Адаптаванне сістэмы для чат-бота падтрымкі, які ствароўвае правілы: RAG, эмбедынгі і пошук за дапамою ANN, розмер частак, запрасы для базавання, ліміты кантэксту і монітарынг.
У чат-бота для падкінання запытаюць пра політку вярнення грошаў компаніі, і ён выдумвае такую. Такойя політка не існуе, але кліент яе дотрымаецца, і компанія змушана яе выпалняць. Гэта ў прыкладзе проблемы галюцінацый у ўсё болей дорогай форме, і гэтая тэма ёсць аблібаемай у спытаннях па праектаванню сістэм, таму што яна спаявае інфраструктуру ШЫ з класычной архітэктурай.
Чаму мадэлі выдумваюць
Большая мовная мадэль — гэта верыятносны генератор тэксту. Яна не знае фактов, а прыбліжае наступны найболей правдападобны токен. Калі адпаведзь не ў яе навучальных даных чы рэчынку, яна стварае ўтрыманне, якое здаецца правым, але такім не ёсць. Якшча навучальны тэкст містыць багато політак вярнення грошаў з іншых компаній, мадэль выдае такую, якая падходзіць па шаблону, нават калі ёна не пасходзіць для данай компаніі.
Гэта не столь відхілення, сколькі наследак таго, як працюе тэхналогія. Толькі дапрацоўка мадэлі таксама не выправляе гэтага, таму што немагчыма уключыць у ўзвешанні всі можлівыя факты. Галоўны спосаб захісту — генераванне з адзысквам кантэкста, або RAG: уместо таго, каб прасіць мадэль адпавядаць на базе своіх параметраў, спачатку адзыскваюцься стосунныя дакументы і падаюць яны ў запіт.
Прыклад прыменення — чат-бот для падтрымкі кляўэнта, які адпавядае на запытанні пра продукты, правілы і способы адладкі. Ён адпавядае з упэўненасцю, пры тым інодзе стварае уяву пра наяўнасць у продукцыі функцый, якіх ёй няма, або вымышляе правілы. Як заставіць яго адпаведзі быць адпаведнымі рэальным дакументам?
Тэмы, якія варта рассмотрзець у хорашай адпаведзі, включаюць:
- чаму мадэлі ствараюць халюцынацыі і чаму дапрацоўка недастатня
- працэс RAG: адзыскванне кантэксту, а потым генераванне
- векторныя базы дадзеных і семантычны пошук на аднойчынных дадзеных
Як RAG зменшае галюцынацыі
За дапамогай RAG сістэма спачатку выкарыстоўвае базу знанняяў, каб запрашаць рэлевантны матэрыял, і вставляе яго ў запытанне як кантэкст. Без гэтага мадэль вырашвае на аднойчынку на адваротаціі своіх параметраў. З гэтым мадэль чытае адпаведзь з паданых дакументаў. Яна все равно стварае токены, але кантэкст яе обмежвае. Калі ў дакументах напісана, што вяртання грошаў немагчыма, мадэль не будзе выдумваць 30-дневны тэрмін вяртання.
Вектарныя базы дакументаў і эмбедынгі
Як сістэма знаходзіць правільныя дакументы? Кожны дакумент ператвараецца ў векторны эмбедынг — высака-выразнае чысловае прэдставленне яго значэння, і запіт таксама практыкуецца такім жа спосабом. База дадзеных з векторамі вяртае дакументы, чыя эмбедынгі знаходзяцца найбліжэй да эмбедынга запіта.
Для выканання задачы вікорыстоўваюцца чатыры складнікі:
- Мадэль эмбедынга. Яна ператварае тэкст у векторы так, каб схожыя тэксты стваралі схожыя векторы. Серэд варыянтаў — мадэль OpenAI text-embedding-3-small з 1536 вымірамі, а таксама модулі з відкрытым кодам, такія як BGE чы E5.
- База дадзеных з векторамі. Яна храніць эмбедынгі і падтрымляе пошук за прыбліжнаю блізайшаю адповеднасцю. Серэд варыянтаў — Pinecone, а таксама Weaviate, Qdrant, pgvector (пашырэнне для PostgreSQL) і Milvus.
Разбіўка на часткі
Дакумент з правіламі дыяграматычнаю 50 сторон не можа быць выкарыстоўваны цэлы, таму яго трэба разбіць на часткі. Размер частакаў вплывае як на точнасць пошуку, так і на тое, насколькі эфкасна выкарыстоўваецца вікно кантэксту.
- Фрагмент, які ўзмаценьшы, тырата кантэкст. Можа выйсці, што будзе прыказана фраза "Айтэмы, парадураннія якіх адбылася пад час транспортавання, не ўваходзяць", а рэшта рэчы будзе ў наступным фрагменце, чыяму мадэль не зможа правільна адпаведзець.
- Фрагмент, які ўзмоцнейшы, разбліжвае корысны сігнал з нерэлевантным тэкстам і запоўняе прастор шумам.
- Перакрыцча заходзіць ад проблем з межамі. Слайдуючы прастор з 10-20 процэнтамі перакрыцча не дазволяе інфармацыі застацца межы фрагментамі.
Хорашы стандарт для дакументацыі — раздзеліць тэкст па заглав’ях роздзелаў, обмежыць фрагменты прыблізна 500-1000 токенамі і зробіць перакрыцча межу фрагментамі на 50-100 токенав. Кожны фрагмент павінен быць самодастатковым, цэлым мыслям.
Дызайн запіта як другая лінія захавання
Нават калі ёсць можласць адгукавання, мадэль можа ігнараваць кантэкст і пры тым стварваць халюцынаціі, таму запітаванне павінна чыстаючы сабой прыяўзнуць яе да паданага матэрыялу. Ключовыя элементы ўключаюць:
- Роля. Фраза на кшталт "Вы являецеся асістэнтом падтрымкі кляўэнта" вызначае персанажа.
- Фіксацыя на кантэксце. Інструкцыя адпавядаць толькі на паданы кантэкст не дазволяе модэлі апісвацца на тое, што яна запамятала.
- Альтэрнатыва пры неяснасці. Праблэма модэлі сказаць, што яна не можа адпавясці, калі ў кантэксце няма адпаведзення, являецца найболей цэнным пунктам. Без яго модэлі проста здагадваецца.
- Цітаты. Трэбаўка наводзіць джэрыя дакументаў змушвае модэлю атрыбутаваць своія тверджэння, што ускладняе стварэнне фальсіфікацый.
- Забарона на знанні з вантажоў. Явная заборона на інфармацыю, якая выходзіць за межы кантэкста, падкрэпляе правіло фіксацыі на ям.
Кантролле ўпорамку кантэксту
Што, як значыцьныя фрагменты не пасвядцаюць, або запіт складаецца з калькі частак, якім трэба многа фрагментоў? Саврэменныя мадэлі маюць большыя упорамкі — напрыклад, 128 К токенаў у GPT-4o і да 1 млн у Gemini, але заполненне іх незначным матэрыялам паслабляе якасць адпаведзення. Дапамагаюць чатыры тактыкі:
- Ранжаваць па значыцьнасці. Адзначыць дзесяць фрагментоў, распарадзіць іх па бале і дадаць іх ад найлепшага да найгоршага, пакуль не заканчыцца бюджэт токенаў, апускаючы спачатку найслабейшыя.
- Разлічваць запіт. Для запіта на кшталт "Расскажыце мне пра політыку вярнення грошаў і часы доставкі" разлічыць яго на падзапыты, адзначыць інфармацыю па кожным і адпаведзець на ўсе ў адной адпаведзі.
- Падсумаваць большыя тэмы. Калі тэма распаўляецца на многа фрагментоў, прабачыць модэлі спачатку падсумаваць іх і выкорыстаць гэты падсумак як кантэкст для фінальнага адпаведзення.
Повна архітэктура
Узагальнюючы, основні рышэння полягаюць у наступному:
- Семантычне падзелу на фрагменты. Падзелу відбуваецца за прыроднімі межамі, такімі як заголовкі і абзацы; кожэн фрагмент містыць блізько 500 токенів з перэкрытцям у 50 токенів і ёсць самодостатнім.
- Двоетапній пошук. Пошук за допомогою ANN дае 20 кандыдатыв, а крос-энкодэр вібірае найкрашчы 3.
- Нізька тэмпература. Значэння блізько 0,2 у масштабі ад 0 до 2 робіць мадэль менш крэатывною і зменшуе ймовірнісць вігадок.
Што трэба сочыць
- Частка галюцынацый. Чыстка адпаведзей, якія маюць інфармацыю, якой няма ў паданым кантэксце; вылучаецца за дапамогою аўтаматызаванай ацэнкі або перагляду людзьмі. Разумны цэль — меней чым 1 адсотак.
Чатыры слоі захавання
Галюцынацыі — гэта не знак таго, што ШЫ не працуе. Гэта проблема праектавання. Мадэль без обмежэнняў завжды выбірае правдападобнасць заместо точнасці, бо так яе і навучалі. Чатыры слоі дапамагаюць рашыць гэту проблему:
- Адзыскванне. Падаюць актуальныя дакументы, каб мадэль адпавядала на ўсі пытанні на іх адлоге, а не на базе сваей памяці.
- Формулюванне запыткаў. Обмежваюць мадэль заданым кантэкстам, прасябяюць яй сказаць, што яна не ведае, і выкарыстоўваюць апісы джэрэл.
- Нормы. Фільтруюць выходныя даны, пераканальваюць апісы джэрэл і вылічаюць рэйтынгі доверлівасці, адхоўляючы все, што не можа быць падтверджана ўзгляду на кантэкст.
Найважлівэйшая правіла: чат-бот, які адкрыта заявляе "Я не ведаю", ў дзiesiąтыя разы лепшы, чым той, які адкрыта выдумвае адказ.