Галоўная / Артыкулы / Чаму вызов LLM — гэта не дапрацоўка: якое месца займае LangChain у паракету RAG.

Чаму вызов LLM — гэта не дапрацоўка: якое месца займае LangChain у паракету RAG.

Дакледзіце, калі саме функцыонуе LangChain, студуючы працэю дапрацоўкі для адпаведзення на запытанні ў дасяглівых дакументах, ад заваносу PDF да практычнага адпаведзення, і выявіце, калі іншая парадыгма будзе болей падходячая.

2551 слоў

Званне да большам мовным модэлю ўсё проста: надасіце запит, а праз тое — текст. Але стварыць чагось корыстнага на адной лініі з гэтым званнем — не так проста. Рэальныя прыклады застосоўванняя мусяць прыймаць дакументы, знаходзіць важлівыя часткі, стежыць за размовам, складаць запиты і адображаць усё гэта через інтарфейс, пры чым модэль ёсць толькі аднай з эўрэх частак. У гэтым артыкуле пояснюецца, што такое LangChain, практычна паказываючы всю гэтую супакоўку, на прыкладзе асистента для чытання дакументаў. Пасля гэтага вы зможыце описаць кожны этап процесу адзысквання інформаціі, сказаць, якія задачы фрэймворк урочыста LangChain бере з вас, і адначасова вырашыць, чы рэальна ён чы які-небудзь іншы варыянт падходзіць вашаму проекту.

Што такое LangChain, у аднам параграфе

LangChain — это фрэймворк адзёвайтанага кода для стварэння прыкладакоў на аднойчых мовных моделях. У зменшыце да таго, каб дастаць вам модель, ён дае модульныя елементы для будавання і інструменты для всіх частак, якія супакоўваюць модель: шаблоны запитаў, парсеры выходных дадзеных, чытальнікі дакументаў, прыстроі для пошуку інфармацыі, «памяць», інструменты і саспэкты, якія ўсе гэта з’ѐеднаюць. Ён працуе з вядомымі прадавцамі модэляў, інтегруецца з вялікім каталогам інструментаў трэціх сторон, є бесплатным для выкарыстоўвання і находзіцца пад актываючым развіццем. Серед типовых прыкладакоў, якія ствараюць команды з его аднойчых мовных моделяў, — чатботы, системы на адпаведзенне на запытанні, тэхнологія RAG і автонамныя агенты.

Ключовая зміна парадыгмы — гэта тое, што LangChain не ёсць сам LLM. Це слой, які дазволяе LLM працаваць са вашымі дадзеннямі, запитамі та корыстувальнікамі. Якщо вы аднойчы надасце толькі один запит і распісвеце адказ, яго не трэба. У той момент, калі ваша прыкладка складаецца з калькоў крокаў, вы пачынаеце ствараць тыя механізмы, якія вона вже з’ядруе.

Карта тэрыторіі

Дапамагае паглядзець на весь ландшафт прычымоў, перш чым збліжваць. Вучэнне LangChain зазвычай дзеліцца на тры сферы, кожная з якіх будуе на пакой.

Фундаменты

Это элементы, з якімі працуе кожная прыкладка LangChain:

  • загальная модель складовых
  • моделі, тыя бачыцца як абгорткі навакол API для чату та дапрацоўкі тэксту
  • запиты та шаблоны запітоў
  • парсаванне выходных дадзенняў, так што вольнай формы тэкст стае структураванымі дадзеннямі
  • Runnables і мова выражэння LangChain (LCEL) – шар складання
  • ланцюгі, які з’єднують крокі в рамках робочага процесу
  • пам’ять, яка викорыстоўваецца для зберагчэння контексту між крокамі
  • Генераванне з падтрымкам разгледвання дакументаў

    RAG – это спосаб, які дазволяе модэлю адпавядаць на запыткі на базе власных дакументаў. Асновныя компаненты ўключаюць:

    • завантажувачы дакументаў
    • роздзелячыкі тексту
    • эмбеддынгі
    • хранальнікі вектараў
    • засобы для разгледвання дакументаў
    • об’еднанне всіх вышэказанных элементаў у рабочую прыкладку RAG

    Агенты

    Агенты дазволяюць модэлю самаму выбіраць, якія дзеяння выконваць. Ключовыя тэмы:

    • інструменты і наборы інструментаў
    • выкліканне інструментаў
    • стварэнне агента, які іх выкарыстоўвае

    Рэшта статты прасвятлівае першыя два аспекты, адколькі самэ ў іх крыўце лежыць прычына існавання данай платформы.

    Проблема, якую рашае LangChain

    Система LLM для практычнага выкарыстоўвання рэдка калі складаецца з аднаго толькі запиту. Паглядзіце, з чым павінен справляцца нават просты асистэнт:

    • працэўванне з дакументамі
    • ведчыця семантычнага пошуку
    • стварэнне та зберагчыце эмбеддінгаў
    • выкананне генеравання з падтрымкай пошуку
    • карыстоўванне контэксту та стану размовы
    • організаванне аднаго чы розных вызываў LLM
    • функцыонаванне інтерфейса чату

    Кожны з гэтых элементаў можна кераваць окрема. Калі іх ручна з’едыніць, яны ператвараюцца на заплутаны комплекс спецыяльных кодаў, дзе зміна модэлю, хранілні вектараў чы формата запиту значыць неабходнасць праверкі калькоў файлаў. Ценнасць LangChain заключаецца ў тым, што яна дае кожнаму аспекту стандартны інтерфейс та набор перадпрацаваных абстракцый, таму ўсе элементы можна легка з’едыніць у адной паўтаральнай схеме та незалежна заменіць.

    Практычны прыклад: чытальнік кніг на AI

    Разглядзім прыклад аплікацыі, дзе корыстувачы заваносяць кнігі чыраўкі PDF, чытаюць іх у вбудованам чытальніку і ставяць асистэнту запитанні пра тое, што чытаюць. Уявіце падручнік па машыннам навучэнні: студент можа запытацца пра баланс між схылам і дывергенцыяй, як складзецца адпаведная архітектура CNN, што робіць бэкпрапагацыя, як працуюць механізмы атэнцыі чыста які алгорытм оптымаўвання падходзіць для задачы.

    Асистэнт можа правільна адпавесць толькі тады, калі бачыць правильныя сторункі. Гэтае адна-едынственная вакалія выклікае цэлы ланцуг задач: заваношчаць заванесены файл, знаходзіць фрагменты, якія стосуюцца запитання, падтрымліваць цэлеспрямованасць історыі чату, ствараць запрошэнне, якое спалюе запитанне з гэтымі фрагментамі, і адправляць яго модэлю.

    У гэй аплікацыі LangChain будзе адпавядаць за:

    • заваношчанне і аналіз заванесеных дакументаў
    • праеўзначэнне інтарфейсу чату з LLM
  • Каналізацыя шаблонаў запыткаў
  • Зберагчэнне контексту размовы між запыткамі
  • Стварэнне працэсу адбору, які выбірае релевантны текст
  • Это яшчэ адназначная ілюстрацыя таго, чаму сама ЛММ не можа стварыць прыкладнэ рашэнне. Модель забезпечвае мовныя можлівасці; усё, што робіць адказ прыкладным да гэтай конкретнай кнігі, выходзіць з суседняых компанентаў.

    Семантычны пошук: аднаходжэнне тексту па значэнні

    Серцам чытальніка кніг ёсць можлівасць выкарыстоўваць правыя фрагменты з вялікага калекцыі. Пошук па ключовым словам тут неэфектыўны, адтолькі ў запытках студэнта рэдка вжываюцца тыя ж словы, што і ў падручніку. Семантычны пошук рашае гэту проблему за дапамогою імбеддынга: числовых вектароў, якія размешчаюць фрагменты тексту з аднаковым значэннем поблізу ў высокадымензійным прасторе. Пошук тады значыць аднаходжэнне зберажаных вектароў, якія знаходзяцца найбліжэ да вектара запытка.

    Просты ўзэклад

    Падазроўваём, што запыт звучыць так: «Калі ў Францыі століца?» Сэмантычная система пошуку не шукае дакументы, якія проста маюць спанулярныя словы з запытам. Яна шукае той аблакат, значэнне якога ўжо ближэй, тое есть аблакат пра Парыж, а не пра Берлін чы Мадрыд, хоця таму таксама пішана пра століцы Еўропы і таму можа быць вялікі рэйтинг за спанулярныя словы.

    Гэта і ёсць практычная разліка. Система на адной з ключоўых словах ранжуе за спанулярнымі тэрамі; сэмантычная система — за ступенем близкасці значэнняў. У практыцы багатыя системы выкарыстоўваюць аба падходы, таму што точныя тэры, такія як коды продуктав чы паведамленні пра адказкі, яшчэ і так выгадваюць ад паўтарэння ключоўых словаў.

    Чаму гэта важна для прыкладнасцей LLM

    Моделі даюць наблыжэйшыя адказкі, калі ім даецца рэлевантны контекст. Таму хорашы пошук безпосередна вялічае:

    • калькітэт аднаходжання дакументаў
  • болей тачныя адказы
  • расумнейшыя рэкамендаціі
  • асистэнты, якія адказваюць, ведаючы прымеснік корыстувальніка
  • LangChain сама не рэалізуе пошук па векторах. Ён інтегруецца з тымі элементамі, якія для цього неабходны: моделі эмбеддынгу, базы дадзэйна па векторах, прыстроі выкарыстоўвання дадзэйна і алгорытмы пошуку сяроднечы

    Ад запита да адпаведнага адказу за шасць крокаў

    Калі дакументы стаюць доступнымі для пошуку, адказ на запит выконваецца па прыгляднай сэріі крокаў:

    • Корыстувальнік задае запит. Запит прыходзіць на натуральнай мове.
    • Запит перакладаецца у вектар. Ён ператвараецца ў вектор, каб можна было пораўняваць яго па значэнні, а не па точным слоўам.
    • Выкарыстоўваецца прымеснік. Система запрашае тыя фрагменты або сторанкі, чыи вектары ўсё ближэй.
  • Даныя адзінаваюцца. Атрыманыя фрагменты тэксту і первоначальны запит спаўнююцца ў прыказ для модэлі.
  • Модэль іх обрабоцвае. Полны прыказ, уключаючы контэкст і запит, надаецца LLM.
  • Праява адпаведзь выходзіць. Пакалькі модэль аналізуе паданы тэкст, а не толькі памяць, адпаведзь стае болей точной і лёгкай да аднаведэння да ўзорку.
  • Кожныя стрэлкі ў тым списку паказваюць перадачу данных между компанентамі, і самэ гэта якраз і ўтварае сутнасць функцый LangChain. Ён спростоўвае процес выкарыстоўвання дакументаў, з’едынае крокі стварэння запитаў, керуе памяцю, дадае контекст у запиты і організуе вызывы до модэля. Гэты шасцяхадовы процес являецца основой любай системы RAG. Якщо вы хочаце глэбачэйша пазнакоміцца з самым процесам выкарыстоўвання дакументаў, наша статыя пра тое, як RAG выкарыстоўвае свежыя знанні даступная ў болей детальным выясненні.

    Полная архітектура RAG

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

    Падготовка дакументаў для пошуку

    Перш чым хтось зможа запытаць, кожны дакумент павінен быць ператвораны ў тое, што можна будзе адшукаць:

    • З'явіце. PDF-файл зберагаецца у сховішчы, напрыклад, у кантеўцы AWS S3.
    • Зачытайце. Програма для чытання дакумента чытае файл і выкарыстоўвае яго тэкст у працэсе обробкі.
    • Раздзеліце. Програма для раздзелення тэксту дзельніць яго на меньшыя часткі або сторунки. Гэта важна, таму што якшо включыць цэлую кнігу як адны вектар, усе ўжо тэмы зліюцца разам, а таксама таму што у моделях є обмежаныя вікна контэксту.
    • Увключыце. Кожная частка праходзіць через модель увключэння і становіць вектар.
    • Зберагіце. Вектары, а таксама тэкст, якія яны представляюць, зберагаюцца ў базе дадзеных вектароў.

    Пасля завершэння гэтага этапу дакумент стае гатовым да адшуквання. Яго зазвычай обрабоўваюць адна раз на кожную загрузку, а не з кожным запытам.

    Адказ на запыт

    Калі прыходзіць запыт, запускаецца другі практык:

    • Уключыць запыт. Запыт ператвараецца ў вектор за дапамогою таго ж модэлю уключэння, так што ён знаходзіцца ў там жа прасторе, чым схованы фрагменты.
    • Пашук. Пашук сэроднечы надае фрагменты, якія знаходзяцца найбліжэй да запыту.
    • Атрымаць контэкст. Шырокія фрагменты вытягваюцца з базы дадзеных вектораў.
    • Скласіць запрошэнне. Атрыманы текст і запыт пользователя спаўнююцца ў адпаведнае запрошэнне для системы.
    • Апыліць модэль. Готавае запрошэнне адправляецца да API LLM.
    • Адказаць. Модэль вяртае адказ, базаваны на атрыманым матэрыяле.

    Адзін элемент, які паскудзяць новачкам: запит і дакументы должны быць адэмбеджаваныя за дапамою таго ж модэлю. Вектары з двух разных модэляў адэмбеджавання не можна пораўнваць, а ўжыванне іх разам таямна паслабляе якасць адзысквання інфармацыі.

    Што вы бы інакш напісалі самі

    Без фрэймворку команда, якая стварае такую систему, сама б разрабатвала механізмы керавання запитамі, логіку адзысквання, вставкі контэксту, багатоэтапныя ланцюгі, систему памяці, інтеграцыю інструментаў і механізмы ўзаемнай связі ўсіх эўрэнтасей. Нічога з гэтага концэптуальна ня ўскладнена, але ўсё гэта разам ускладняе роботу, і код часта стае супакоўаным з адним модэлем і адной базай дадзенаў. Абстракціі LangChain, якія можна перадаўаць знову і знову для кожнай з гэтых эўрэнтасей, дазволяюць будаваць быстрэй і пазней зменяць компаненты, выконваючы менш перапісвоў.

    Што дае фрэймворк

    Чатыры прынцыповыя пераканання павтараюцца знову і знову.

    Ланцюгі як модэль складання

    Ланцюг з’єднуе такі елементы, як шаблон запиту, виклик моделі та парсер выходных даних, у ўзгальнаны працэс, які можна запускаць, теставаць і перадаўжвае выкорыстоўваць. У ныях версіях гэта реалізуецца за дапамогою Runnables і LCEL, якія дазваляюць з’єднваць компоненты між сабою.

    Код, незалежны ад моделі

    Пакалькі LangChain падтрымляе основных прадаўцоў LLM через аднаковы інтэрфейс, таму ваша прыкладка не прыў’язана да аднаго прадаўцы. Змена моделі становіць сабою толькі зміну налаштавання, а не перапісв, што ўжыткова як для контролю витак, так і для пробавання новых моделей.

    Шырокі экасистема

    Фрамворк поставляецца з великім наборам компонентоў і інтеграцый, або ж дазваляе ўз’єднвацца з імі: чытальнікі для разных типаў файлоў, розныя сховышчы вектараў, прадаўцы інформацыі для вбудоввання та інструменты. Большая частка таго, што вам патрэбна, вероятна вже існуе у виглядзе інтеграцыі.

    Памяць і стан

    Програмы для дыялога павінны пам’ятаць тое, што было сказана раней. LangChain прымоць для карэнтавання контексту дыялога, памяці та стану пад час разных взаімадзеянняў. Рэкамендаваны падход змініўся за час выходу новых версый, прычаму новейшыя інструкцыі рэкамендуют викорыстоўваць LangGraph для роботы зі станамі, таму пераканаўцеся ў актуальной даследчыцкай матэрыяле для вашай версіі.

    Што можна стварыць з яго

    Паўзледовыя типы прымоцоў включаюць:

    • Чат-боты для дыялога, дзе корыстувальнікі размовляюць з ШІ на натуральнай мове.
    • Памочныя прымоцы для інформацыі, якія памагаюць людзям знаходзіць та розумець інформацыю ў своіх дасягледах чы рэпазітарыях знанняў.
    • Агенты ШІ, якія выканаюць багатоэтапныя задачы та выбіраюць, якія інструменты викорыстоўваць пад час ўжывання.
    • Автаматызацыя рабочых процэсаў, дзе LLM ёсць адным з етапаў большога автаматызаванага процэсу.
  • Адаптавальнікі і апараты для даследжэння — гэтыя з’едначаюць матэрыял і спрабуюць падтрымаць процес даследжэння.
  • Калі варта рассмотрзець альтэрнатыўу

    LangChain — адна з кальколька вароў, і кожная альтэрнатыва мае свой акцэнт:

    • LlamaIndex сфокусаваны на з’яўленні звязку между LLM-мі і зовнішнімі дадзеннямі, а таксама на стварэнні прыкладнаў на аднойчыны збору і выкарыстоўванні дадзенняў (RAG).
    • Haystack прызначаны для пошуку, адпаведзення на запытанні, прыкладнаў RAG і агентных рашэнняў.
    • Semantic Kernel — адкрытыя SDK ад Microsoft, якія дазваляюць інтэгрувацыю модэлей AI ў існуючыя програмы і коордынацыю багатаэтапных робочых практык на аднойчыны AI.
    • DSPy спрыяе оптымізацыі систем LLM як програм, а не вымагае ручнай наработкі кожнага запытання.
    • AutoGen створаны для прыкладнаў, дзе кальколька агентаў саавтарску працуюць і размовляюць адзін з другім.
    • CrewAI прызначан для коордынаціі команд агентаў, якія разам выкананяюць задачы.
    • PydanticAI — это фреймворк на Python для прыменняў у працэсе вырабоцтва та агентаў, якія даюць структураваныя, безпечныя па типу выходы.

    Прыблізныя правіла: якщо ваша прымененне большасцю часу займаеся выкарыстоўванням сэрваў з власнымі дадзенням, варта парабаваць LlamaIndex чы Haystack. Якщо для вас найважлівейшыя ўпорядкованыя выходы, пагляньце на PydanticAI. Якщо вы хочаце, каб центральной ідеяю была саўместная праця колькіх агентаў, то AutoGen чы CrewAI падходзяць для гэтага. Сілой LangChain є його шырокае практычнае застосоўванне, што робіць яго разумным стандартам, калі вы ўсё ж не ведаеце, якой будзе формат вашай прымененні. Чытабельныя порэванні двух найпопулярнейшых варыянтав можна знайсці за нашым аналізам LangChain і LlamaIndex.

    Таксама важна інфармацыя пра тое, калі не трэба вжываць жадных фреймворкаў. Функцыя на адну просьбу, або маленькі скрыпт з адным вызывам модэлю і рукапісной просьбай, часта ўсё ясней без шару абстракцыі. Фреймворкі становяцца корыстнымі, калі зростае колькасць крокаў і компонентав, якія можна заменіць.

    Элементы, якія трэба выучыць далей

    Колі вже ёсць загальная картына, наступным логічным крокам яўляюцца адзінкавыя компоненты, з якіх складаецца кожны прыемнік LangChain:

    • Модэлі — інтарфейсы для взаімадзеяўлівання з разнымі AI-модэлямі.
    • Просьбы — тое, што вплывае на тое, як модэль адказвае на свой вхід.
    • Ланцюгі — тое, што з’ѐеднвае компоненты ў рабочія процесы.
    • Індэксы — тое, што з’ѐеднвае прыемнікі з зовнішняй інформацыяй. Новейшая дакументацыя часта описвае гэты аспект праз ладчыкі, базы вектарных даных і прыстроі для ўзяць даныя.
  • Памяць — элемент, який зберагае контекст пад час разных адносінаў.
  • Агенты — элементы, якія спалююць разумаванне з інструментамі для выканання задач.
  • Розумеўшы, за шта адпавядае кожны з эых элементаў, значна лёгка чытаць код LangChain і вяршыць, якія часткі насправды патрэбны вашам прыемлу.

    Ключовыя выводы

    • LLM ўсьмо толькі адна з складовых прыемлу; загрузка дадзенняў, ўзяцець іх, складанне запытаў, памяць і інтэрфейс — гэта ўсё іншае, і самэ гэта імплементавацыя LangChain дапамагае стварыць.
    • Семантычны пошук ранжуе тэксты па значэнні за дапамогою эмбедзінгаў, таму ён і знаходзіць пасунк пра Парыж на запыт пра століцу Францыі.
    • Система RAG складаецца з двух каналаў: афлайн-каналу, який завантажвае, дзельцюе, уключае і зберагае дакументы, і онлайн-каналу, який уключае запит, выкарыстоўвае контэкст, стварае запрас і вызывае модель.
    • Завжды трэба уключаць запиты і дакументы за дапамою той самай модэлі, інакш якасць выкарыстоўвання контэксту падупае.
    • Галоўныя прынтэсы LangChain — граматыка на адной ланцузе, незалежнасць ад прадаўцаў, шырокі экасистем для інтэграцыі і інструменты для керування станам і памяцюю.
    • Альтэрнатывы, такія як LlamaIndex, Haystack, Semantic Kernel, DSPy, AutoGen, CrewAI і PydanticAI, кожная акцэнавае на чымсь іншым, і дужа простая функцыя можа не патрабаваць жаднага фрэймворку.

    Супаўязаныя матэрыялы

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