Галоўная / Артыкулы

Выбірайце RAG-рамкі па характэрэ задання, а не па популярнасці LangChain.

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

Выдавец: REACTAPP.TOP5 хв чытання1200 слоў

Крыніцы: LangChain Alternatives: The Principle for Choosing a RAG Framework by Workload, Not Hype

Проблема ў кантэксце

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

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

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

Прынцып

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

Адны продукт можа скрыць две завадзі пад аднай маркой. Прыклады: семантны пошук у корпоратыўных дакументах і швыракі адпаведнення дакументаў да запітоў у аплодаваных PDF-файлах. Ніякі з гэтых рашэнняў не ёсць агентам. Плаціць два разы полныя косты оркестрацыі за два спецыяльныя завадзі — гэта явна непатрэбна трата.

Практычныя карточкі з інструментамі для выкарыстання ў працы выглядаюць інакша, калі адмастыравацца маркетынгавыя пазначкі. Haystack ад Deepset лепей падходзіць для працэсаў адзысквання дадзеных, якія легка можна поясніць. LlamaIndex падходзіць для шыранага пераканальнага аналізу прыватных дасяглінакоў, калі трэба быстра перайсці ад файлоў да адпаведных адказаў. Платформы для дыялогу, такія як Rasa, падходзяць для сцэнарыёў падтрымкі, дзе важліва аналіза намероў корыстувальніка. Botpress чыста Dialogflow падходзяць для стварэння ботаў для кліентаў з мінімумам коду. Hugging Face Transformers падходзяць для команд, якім трэба прымітны кантроль над мадэлямі чыста ўпорадкуванне іх параметраў. CrewAI, AutoGen чыста DSPy падходзяць для експерыментаў з коордынацыяй калькуляцый колькіх агентаў.

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

Компрасы

Семантычныя пошукавыя сістэмы для корпаратываў — патрабуець адказныя, тэставаныя, масштабавальныя, можлівыя да самастойнага размешчэння канструкцыі → Haystack (больша колькасць элементаў; запускаецца вектарны база дадзэнняў).

Перакантрольванне дакументаў у фармаце PDF — патрабуець быстрага налажвання, нізкай затрымкі, мінімальных вычысленняў → LlamaIndex (спецыяльна створаны для спецыфічных задач; не ўключае функцыю керавання).

Праўdziвы мультыінструментовы агент — патрабуець інструменты, памяць, шаблонавання → LangChain / CrewAI (затрымкі і залежнасці вплываюць на ключовыя кантэксты).

Haystack спрамованы на модульныя пайплайны з чыста выражанымі функцыямі адзысквання, направлення і стварэння кантэксту, працюе з рэальнымі бэкендамі (Elasticsearch, OpenSearch, Weaviate) і можа быць самастойна размешчаны для захавання прыватнасці. Этапы пайплайну застаюцца чытабельнымі:

from haystack.document_stores import InMemoryDocumentStore
from haystack.nodes import DensePassageRetriever, FARMReader
from haystack.pipelines import ExtractiveQAPipeline
document_store = InMemoryDocumentStore()
retriever = DensePassageRetriever(document_store=document_store)
reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2")pipeline = ExtractiveQAPipeline(reader=reader, retriever=retriever)
response = pipeline.run(query="What is Haystack used for?")

Retriever скачоўвае дакументы; чытальнік адпавядае на найболей прыдатны кандыдаты. Калі ўсё йдэ повольна або ёсць проблемы, пераглянуце відпаведны вузол. Заменіце InMemoryDocumentStore на OpenSearch без перапісвання рэшты коду.

LlamaIndex спаўнае LLM-і з локальнымі дадзеннямі — ўваходжэнне, індэксаванне, запіты — і за сваім дзяленнем застаецца простышым, чым LangChain:

from llama_index import SimpleDirectoryReader, GPTTreeIndex
documents = SimpleDirectoryReader("<directory_path>").load_data()
index = GPTTreeIndex(documents)
response = index.query("What is the purpose of this document?")

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

Пораўняўшы з монолітным рашэннем LangChain, структура Haystack + LlamaIndex даўае меншы показнік p95, прыблізна напалову менша колькасць залежнасцей у парадку RAG, яснасць у разыходах на рэвэле вузлаў, менша колькасць інцыдэнаў з змянамі фрэймворка, лепшую адпаведнасць для самастойнага хоставання, а таксама час на інтэграцыю у гадзіны, а не дні.

Як адмацаваць

Утрымайцеся ад масовага перапісвання. Выконуйце етапава адмацаванне і стварайце показнікі:

  1. Рэжым тэні — адныя ж запіты да старых і новых шляхоў; разлік у адпаведзях і часе адпаведзення без паўтарэння вплыву на корыстніка.
  2. Пераход на функцыйны флаг — перакрыцчэнне трафіку ў процэнтных частках, калі якосьць адпаведзенняяў падабнае чы і лепша за нынешняе.
  3. Адсакрэўчанне незалежных завантажэнняў — міграцыя толькі PDF QA, калі ён не выкарыстоўвае спольную інфармацыю з пашукам.
  4. Адчыненне старага — адзьменэнне старай залежнасці толькі пасля таго, калі оба шляхы застаюцца працэсныя ў часе выпуску.

Інструмент ацэнкі (фіксаваныя запіты з вядомымі правільнымі адпаведзямі) ператварае пытанне «Чы новы шлях хорашы?» у цячку. Рэжым тэні часта паказвае сумешаныя рэзультаты — лепшыя адпаведзення на дзеякіх запітах, скрацаныя дугія адпаведзення на іншых — таму дугія адпаведзення трэба направляць у генератыўны чытальнік, а для точных пошукоў застаўляць экстрактываўны метод. Змена фрэймворку без мераванняяў — гэта азартнае рашэнне.

Асасны прынцып: не ствараць культуры аднальнага выкарыстоўвання гэтага конкрэтнага падзелу (боты-падтрымкі можаць патрабаваць Rasa; праця з неапранутымі мадэлямі можа патрабаваць Transformers). Не забараняйце LangChain назаўсёды — заставайце я для таго дня, калі з’явіцца справжній багатофункцыональны агент.

Куды праця будзе рухацца далей

Блізкай перспектывы задачы застаюцца адмеркаванымі: пераранжаванне ў Haystack, генератывныя чытальнікі для дзейнаўдзевых адказаў, можа, эксперымент з намерамі Rasa — кожы раз інструмент падбіраецца па характару задачы. Фрэймворкі знову будуць зменяцца (CrewAI, AutoGen, DSPy, RAGFlow, Flowise, …). Команды, якія выбіраюць на адвалорэ хайпу, ў кожны сезон занова обгаворваюць усю структуру. Команды, якія называюць задачы і выбіраюць толькі па ўсіх яе аспектах, пераглядаюць толькі тыя часткі, якія зменіліся. Калі LangChain стварае вражанне, што ён супершчыць практычнае выкарыстоўвання, рашэннем часта ёсць падбіранне правільнага фрэймворка для конкрэтной задачы — а не ўжо больш LangChain.

Якія змены ў організацыйных працэсах вынікаюць пад час прыорытэтавання задач

Адміністрацыя архітэктуры перастае запытацца: «Чы гэта стандартызавана на LangChain?» і пачынае запытацца: «Якія існуют заданні, і які інструмент падходзіць для кожнага з яных?» Гэта можа здавацца бюрократычным, але самэй гэтым команды ухіляюцца ад стварэння ўсё таго ж незрозумелага моноліта. Запісайце всі заданні: адзначыце іх у корпоратывным вікі, пераканайцеся ў якасці аплодаваных PDF, падумайце пра мнагапрапрамовыя агентаў на будучыню, можа, пра бота для адпаведзення на запыткі падтрымкі. Праказайце адпаведных адпаведальнікаў і паказнікі якосці для кожнага задання. Выбор фрэймворку стае дэталлю рэалізацыі пад кожным з яных.

Адзначыцца таксама, што адзначэнне закупкаў і пытанняя безпекі таксама становіцца простым. Самастойна розмешчанны Хейстак з OpenSearch — гэта іншая сітуацыя ў паводзе з дадзеннямі, чым стварэнне бота на мадэлях SaaS. LlamaIndex на тымчасовых сховішчах аплодаванняў — гэта ўсё інша справа. Адзначэнне всіх трох у адной заявцы «платформа AI» маскіруе гэтыя разлікі.

У інструкцыях для працы у рэжыме нарадчыка павінны быць названыя вузлы, а не фрэймворкі. Фраза «Высокая затрымка падчытання даных» ўможліва да дзеяння, тады як фраза «LangChain працюе повольна» — ні. Пасля перакантролювання сторонніх элементаў старыя старонкі перакierаваліся на показчыкі часу запыту да OpenSearch або на ступень насыцэння GPU чытальніка, замест таго каб аналізаваць прычыны залежнасцяў.

Зменілася таксама падготовка новых інжынероў. У змену недзелі на вівучэння тэорыі LangChain, працэс адкультуравання можа выглядаць так: хтоце тут дыяграма пайплайна Haystack; хтоце тут трывалкі скрыпт LlamaIndex у трох крокаў; хтоце тут набор для ацэнкі; хтоце тут інструкцыі па запуску рэжыму shadow mode. Час ад першага корыстнага внеску зменшыўся, таму што канцэнтрычны маршрут стаў корачым.

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

Продовжайце вімірування. Продовжайце прызначаць назвы заданням. Зберагайце «гарачыя» шляхі достатньма довжыной, каб вялікі інжынер, які працуе па вызовах, мог усё равно іх поясніць о 2 гадзіны ночы.