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

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

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

1200 слоў

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

Стварэнне сторынкі о 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 гадзіны ночы.