Чаму адказы RAG выглядаюць цэлымі, калі пошук у Azure DevOps паказвае, што яны такімі не ўсё?
Закрыцья прасоў у цэласці системы Azure DevOps RAG, апарацыйнаея на графах: дэтэрміністычныя перакрыцця тагоў, праходжэнне па графе, ліміты контексту і інструменты запытання толькі для чытання.
Система, яка завантажае історыю Azure DevOps у базу дадзеных у формате графа, можа адказваць на запытанні пра проекты, ўладу над імі та завершаную работу, выклікаючы чытальны тэкст і можлівасць клікаць па цитатах. Некалькі часоў гэта здавалася дастатнім — пакуль адказы не сталаць пераглядаць за простай базой: чыстым запытам у Azure DevOps. Разлік межаў між апрацаваным адказам і выключным спісам — гэта тое месца, дзе „полны“ адлік тыхняўно не выходзіць. Ён задавалася патрэбай дэтерміністычных крокаў, стандартызаваных тэстаў і некалькіх практыкаў, якія самыя стваралі новыя проблэмы.
Запытанне, якое адкрыло гэты разлік
У першыя часы запитоў былі атрыманы чыстыя, падкрэпленыя джерагамі адказы без значных варыяцый. Шырэй запит — «Якія роботы з AI адбываюцца ў гэтай організацыі?» — таксама выглядаў нормальна: колькае параграфаў, калькі цытатаў, нічога явна некоректнага. Той жа запит, паданы через az boards query — простаю пошуковую функцыю без інтелігентнага ранжавання — аддаў дзесяткі рэзультатаў, якіх не было ў адкусаным адказе. Кластэры, прызначанныя для ацэнкі дапаможных програмістаў, паравання вартасцей модэляў чы выкарыстання спецыяльных інструментаў для адлучэння бягаў, не з’явіліся, таму што ў іх была мала спадзячаснасць з запитам, і яны ніколі не патраплялі ў верхнюю частку ранжавання семантычнага пошуку.
Такі спосаб абвалення лёгка працягнуць: адказ з высокім ранжаванням не є тым самым, што і цэлісны адказ, а система не дае жадных сигналаў, якія б паведамілі вас, каторы з іх вы атрымалі.
Запит, які толькі часам дапамагаў
Першым падзецем было прабава паказаць модэлю, каб той быў абераглівейшы — па шырокіх запытаннях, перад адпаведзеннем пераглядаць тэгі катэгарыяў, а не пакладацца толькі на пошук. Це часам дапамагала. Аднак аднойчы тое ж сама формулаванне прыводзіла да разныя дзеяння ў разных запусках: іноды модэль пераглядаў тэгі, а іноды іх праігнараваў. У запытанні нічога не змянілася — толькі тое, чыі быў выкананы паказанне ў тым конкрэтным разе.
Паказанне для мовнага модэля — это проста падказка, а не гарантія. Калі важна ўсестороннасць, яе нельзя пакладаць на тое, што модэль у кожны момент сама будзе адлічваць, чы хочаць дакладна працаваць.
Стварэнне детерміністычнага шляху
Наступныя змены паставілі канець запыткам. Код завжды пераглядае тэгі па кожным шырокаму запытку, незалежна ад таго, чы робот сачувае, што гэта неабходна. Лячынай гэтага кластер абсалютных правдзів перайшыў з працоўна паловыя аднадзесят элементаў да працоўна сямі з шанзесят чатырох — гэта лепей, але яшчэ не завершана. Дальнейшыя крокі выйшлі з конкрэтных прасоў, знайдзеных пад час тэставання, а не з спекуляцый:
Адным з крокаў ёсць перагляд рэзультатаў пошуку па тэгамі на предмет павтараючыся імен і фраз, якія з’являюцца два чы тры разы, пасля чаго гэтыя імены шукаюцца безпосередна — такім чынам назва продукту стае видным, нават калі ніхто яго не запытаў працоўна, як толькі маленькі кластер, які яго мае, вже ўвімкнуты.
Этап, які вырахоўвае адносы межа графамі, а не толькі слоўнае выражэнне, таму што элементы, якія ўзаўме належаць да однай групы, можу мясцавіцца пад адним керуючым элементам, не маючы ніякіх спакойных заголовкаў. Элемент з заглавлём, падобным да заглавка прыкладнага репазітарыя для тэставаў з практычнымі завданнямі на програмаванне, можа не мятчыць нічога пра ШІ у своём тексте і вырахоўвацца толькі через іерархію.
Этап для репазітарыяў, якія не маюць тых сабе падобных катагорыяў, якія ўжо існуюць у элементах працы, і якія інакш засталіся бы невиднымі для шляхоў, базаваных на тагах.
Этап для людзей, пасля таго, як запытанні на кшталт «Як часта два саавтары працавалі разам?» давалі абяцкія некоректныя адпаведзі.
Кожны з этапаў закрыў адпаведную прасоўку. У канцэ наіскладнейшы случай з шысьцюма элементамі быў вырашаны цэлком — не часткова, а ўсё.
Больш выкарыстоўванага контэксту падгатавіў гorsыя адпаведзі
У протыяворнасці, калі якасць выкарыстоўвання інформацыі паднялася настаткі, што колькасць элементаў у базе модэлі зросла з кальколька сотак да паўтарох тысяч, адпаведныя адказы сталі корачэй і менш повнамасштабныя. Модэль не зламалася; яна проста пісала менш, нават калі ў ее распаняжэнні была большая колькасць правдападобных дакументаў. Перасічыўшы певны порог колькасці, якасць адказаў не зростае ў прычыну большага кантэксту — наадварот, яна паслабляецца. Паракметры выкарыстоўвання інформацыі падняліся, тады як паракметры готовых адказоў знізіліся ў тым жа тэсте. Рашэнням не было «дадаць больш», а выявленне максімальнага ліміту і яго дазволенне.
Рашэння проблемы працяйнасці, якое спрычыніла занадто дакладная адпаведь на вузкія запытанні
Калі модэль стварала аптаты замест таго, каб назваць рэальны матэрыял, новы раздзіл з адказамі паказваў элементы, якія былі знайдзены, але не названы, таму нічога не зникало безследна. Першая версія давала болейш чым тысячу слаба супакоўзаных элементаў у адказах на спецыфічныя запитанні, адтак што генератор спіса не мог зрабіць разліку межу точных падпарадоў і звычайнага шуму. Шырока катэгорія збирала ўсё, што было хоць часткова супакоўзана, і спрыяла ўваходжэнню гэтага матэрыялу на першы план.
Стойкі раўнавага быў не толькі числовы ліміт. Це было раздзеленне двух відаў „знайдзеных, але не названых“: маленькага комплекту точных падпарадоў, якія завжды павінны быць паказаны, і вялікага кола слаба тагаваног шуму, якім патрэбны чысты ліміт плюс прыемлівая адзначка пра тое, што існуе ўсё больш такога матэрыялу. Гэта раззьяўленне мела большое значэнне, чым сам ліміт.
Надаўчы модэлі інструменты — з заходамі
Корыстныя запитанні зумоўлі да працы над рэшэнням іншых праблем: чаму чалавек можа адпаведзець на запитанні, якіх не можа адпаведзець система, калі якія ўбачаюць тыя ж данні? Чалавекі можуць напісаць новы запит, калі стандартныя інструменты не падходзяць, і яны перакантролююць адпаведзі, якія здаюцца сумневнымі. Модель не мела ніякіх такіх можлівасцей. Яна отрымала інструмент для стварэння савой запита да базы дадзеных з правамі толькі на чытанне — працаваў яны пад контролем базы дадзеных, меў часовыя обмежэння і ліміт па розмаху рэзультатаў.
Патрэбныя былі ўсьмо тыпы. Калі моделью было запитана, як часта саўместна працавалі два адзначаныя імены, яна спачатку выйшла з гадкі, што у іх адна працоўная фамілія, але не знайшла нічога, і тады запэўнялася на адной з несувязаных каментараў, узамініўшы гэта на перапытку ў зв’язку з пустым рэзультатам. Правілам стала такая практыка: спачатку перакантролюваць кожнае імя на яго точны запис, а пусты самапыт спрацавляць як доказ таго, што запит некоректны, а не таго, што колькасць таких прыкладаў доравнае нулю.
У наступной спробе был рашыты прыблэмы обох адміністрацый, быў выканан правы запит, атрымана 25 спільных элементаў — пры тым часу цяжка было паказаць гэтыя цифры, калі ўсе фактычныя тверджэння выклікалі патрэбу ў ідэнтыфікаторе цытаты, а вырахаваная колькасць такога ідэнтыфікатора не мела. Следуячы букве правіла цытатаў, справядліва адпаведь была адхоўнутая. Патрэбна была явная аднаковасць: вырахаваную колькасць можна было проста паказаць без ідэнтыфікатора адказу.
Ніякая з гэтых невыконанасцей не была парадоксам; обе являліся правым выпаленнем інструкцый, якія не пакрывалі гэтую ситуацыю. Гэта разлік мае большое значэнне, чым можа здавацца на першы погляд.
Як тэставанне заставалася чыстым
Абсалютная правда не была простым перакантовкам настроення. Для самага складнага кластэра спачатку было перыявлена шанцзнац вядомых элементаў з аб’ёмнага запытку, а пасля кожных зменэў у рэзультатах адбывалася ўцёнка: сколькі з іх было прынятыя ў фінальны адпаведзь, сколькі было цытавана, сколькі было тыхо адмовлена. Самэ гэта показнік даў значэнне фразам «семь з шанцзнац» і пазней «шанцзнац з шанцзнац». Без зовнішняга, аб’ёмнага списку фраза «выглядае завершаным» ёсць толькі эстэтычным пытаннем.
Аранжаванне процесу без перазлівання модэлю
Дэтэрміністычныя крокі все ж такі трэбуюць паводловасці. Спачатку розгортанне тагоў расшырвае сябро кандыдатаў; пасля таго аналіз імен прыглубляе яго; праходжэнне па графе дадае структурных суседзяў; крокі, звязаныя з рэпазітарыем і людзьмі, заполняюць прасоўкі ў спосабах адпаведзення. Лячына, толькі пасля таго, калі створены такі скарбнік, встановлівае верхнюя межу за размерам, якая обмежвае тое, што прайшоў у запит. Адворачэнне гэтай паводловасці — калі просім модэль быць рэтельным да таго, калі скарбнік ўжо створыўся — вяртае нас да проблемы недастатку дакладнасці. Работа над цэлыснасцю — это проектаванне практычнага каналу обробкі, а не вжытак лепшых аднарадков у запитаў для модэля.
Цітаты проты вырахаваных фактов
Правіла апеляцыі да кожнай твэрджэбе захоўваюць ад вымыслу, калі модель цитуе элементы роботы. Яны стаюць шкадлівымі, калі модель выкарыстоўвае арыфметычныя расчыткі чыста на базе рэзультатаў інструментаў. Раздзелэнне «цітаванай твэрджэбы» і «рачунаванага сумару» у інструкціях вярнуло лік 25 саўместных проектаў, не паслабляючы дисцыпліны ў апеляцыях да наратывных твэрджэбаў. Сістэмы RAG, якія выкарыстоўваюць інструменты, патрабуюць абоўвах правілаў, якія павінны быць часткам ясна зазначаных інструкцый.
Стан роботы
Чысты запит да базы дадзенаў ў сваій структуре є вялікі: немагчыма працэсаваць рядкі, якія не падходзяць. Ён таксама не можа поясніць, групаваць чы нарабляць сэнс — ён вяртае толькі спіс, а не адпаведны адказ. Сістэма тепер паўтарае гэты прынцып целесообразнасі запита ў складных кейсах, якія былі знайдзены і працэсаваны, адночасна пояснюючы рэзультаты прозай з пераверымымі джэрамі. Гэты рэзультат мерыцца, а не прыймаецца як аксіум.
Это не задача, якая была рашаная. Кожны з вышэўказанных спосабаў рашэння існуе таму, што падчас пераканальвання адпаведзяў з усіма можлівымі данымі з’яўлялася конкрэтная працоўнасць. Такі метод выявляе прасочыні; ён не дазволяе ствердзіць, што іх больш няма. Пасля вышэўказанных змян з’явілася новая разлік типу: калі трэба было падтрымаць тверджэнне пра аднаго чалавека, была выкарыстоўвана цітата з іншага джерэлы, якое нічога пра таго чалавека не пісала — гэта было выявлена, але на момент напісання ўжо не было рашана. Такі патэрн продаважваецца: пераканальваюць тое, што выглядае як ўсё, і з’яўляецца што-нова.
Чыстая адказка — не «Прынцыпова цэласнасць RAG рашаная». Это тое, што кожны конкрэтны прыем, які можна было знайсці і перапрацаваць, быў закрыты, з паказаннем цифр да і пасля. Не можна обяцваць, што больш няма прыемаў, і жадная такая система не должна даўаць такога адчування. Фраза «Модель зазвычай правільна» не ўтварае аднойчыну для надзяйнасці — самэ ўжо «зазвычай» являе сабой тое, што не працуе ў ключовым пытанні.