LLM (үлкен тілдік модель) жүйелері бір уақытта мәтіннің шектеулі көлемін ғана «көре» алады (бұл — мәнмәтін терезесі). Бұл шағын тапсырмаларға жарайды, бірақ білім базасы мыңдаған беттен тұрса, тиімділігін жоғалтады. Мәнмәтін терезесі жеткілікті болса да, «шөп арасынан ине іздеу» мәселесіне байланысты өнімділік төмендеуі мүмкін.
RAG («іздеу арқылы толықтырылған генерация») кең таралған тәсілге айналды: білім базасын (құжаттар, уикилер, саясаттар, транскрипттер және т.б.) жүргізесіз, пайдаланушы сұрауы бойынша семантикалық іздеу жасап, ендірулер арқылы ең сәйкес үзінділерді табасыз да, сол бөліктерді сұрақпен бірге LLM (үлкен тілдік модель) жүйесіне бересіз. Бұл модель мәнмәтінін шектейді және дұрыс орындалса, жауап сапасын жақсартып, галлюцинацияларды азайта алады.
pgai — сенімді ашық бастапқы кодты PostgreSQL дерекқоры негізінде «ЖИ арқылы іздеу» жұмыс процестерін құруға көмектесетін Postgres кеңейтімі және оған ілеспе құралдар жинағы.
Негізгі идея — дерекқорды ендірулерге арналған «жай ғана қойма» ретінде пайдаланбай, стандартты RAG конвейерінің көбірек бөлігін дерекқор деңгейіне көшіру (қабылдау → бөліктерге бөлу → ендіру → ендірулерді синхрондау).
Алғашқы әсеріміз бойынша, жоба үмітті болғанымен, RAG конвейері сәл күрделенсе-ақ (әсіресе бөліктерге бөлу тәсілдері), ол жарамсыз болып қалады. Дегенмен бұл жобаны мұқият бақылап отырамыз.
RAG құрудың көптеген жолы бар. Әртүрлі RAG тәсілдері туралы толығырақ білу үшін «Теңшелген RAG шешімдерінің практикалық мысалдары» мақаласын оқыңыз. Сапаға мән бере бастағанда, жобалау нұсқалары күтпеген жерден күрделене түседі. Кең таралған «әдепкі» тәсіл әдетте мынадай:
Құжаттар жиынтығын алыңыз.
Оларды бөліктерге бөліңіз. Мұны орындаудың көптеген әдісі бар (мысалы, абзацтар немесе семантикалық топтар бойынша).
Әр бөлікті ендіруге түрлендіріңіз.
Ендірулерді векторлық дерекқорда (Pinecone, Milvus және т.б.) немесе pgvector арқылы Postgres ішінде сақтаңыз.
Сұрау кезінде ең жақын бөліктерді іздеп, `оларды LLM (үлкен тілдік модель) жүйесіне беріңіз (мұны да орындаудың көптеген жолы бар).
Көптеген технологиялық стекте (1)–(3) қадамдар дерекқордан тыс, қолданба кодында немесе деректер конвейерінде орындалады, ал дерекқор негізінен мыналар үшін пайдаланылады:
ендірулерді сақтау
ендірулерді іздеу
pgai — осы арадағы шекараны жоюға тырысатын Postgres кеңейтімі (ашық бастапқы кодты, Timescale әзірлеген).
pgai ендірулерді қолданба қолмен басқаратын нәрсе емес, дерекқордың мүмкіндігіне айналдырады:
Қай кестені немесе құжаттарды ендіру керектігін белгілейсіз.
Ендіру моделін және бөліктерге бөлу стратегиясын көрсетесіз.
Қалғанын pgai басқарады, соның ішінде бастапқы деректер өзгерген сайын ендірулерді жаңартып отырады.
Ұсынатын мүмкіндіктері тартымды:
Сүйемелдеуді қажет ететін арнайы байланыстырушы код азаяды.
Негізгі бастапқы құжаттар өзгерген сайын ендірулерді «жаңа» күйінде ұстау оңайырақ болуы тиіс.
Қайта әрекеттенуді, жиілік шектеулерін, сәтсіз тапсырмаларды және т.б. Postgres/pgai басқарады.
Оқырманға ескерту: pgai құрамына pgvector (Postgres-ке арналған тағы бір өте танымал RAG кеңейтімі) кіреді. pgvector Postgres жүйесіне векторларды сақтау мен ұқсастық бойынша іздеуді қосады, ал pgai осының негізінде бөліктерге бөлу, ендіру және ендірулерді жаңартып отыру сияқты RAG конвейері қадамдарын автоматтандырады.
1) Іске қосу оңай.
Қалыпты сценарий айтарлықтай қарапайым:
Timescale Docker образдарын (дерекқор + жұмыс процесі) жүктеп алыңыз.
Ендіру провайдерінің API кілтін беріңіз.
Векторлағышты анықтау үшін аз ғана SQL орындаңыз (негізінен: нені ендіру, оны қалай бөлу және қай модельді пайдалану керек).
Содан кейін pgai векторлағыштың жұмыс процесін бөлек процесс ретінде іске қосып, ендірулерді асинхронды түрде жасайды (мысалы, әр 5 минут сайын немесе өзіңіз қалаған жиілікпен).
2) Бүкіл конвейерді дерекқорға «жақын» орындау ыңғайлы.
pgai кестелердегі мазмұнды қабылдай алады, сондай-ақ S3 сияқты орындардан құжаттарды жүктеп, оларды талдап, бөліктерге бөліп, ендіре алады. Ол PDF, Markdown және т.б. мәтіндік құжат пішімдерін де өңдей алады.
1) Бақылаудың көп бөлігін жоғалтасыз (ал RAG үшін кейде бақылау қажет).
Жауап сапасымен өлшегенде өнімділігі жоғары RAG жүйелеріне көбіне арнайы конвейерлер қажет, мысалы:
бөліктерге бөлудің арнайы ережелері (тақырып, бет, сөйлеуші кезегі және т.б. бойынша)
метадеректерді ескеретін бөліктерге бөлу (бөлім атауларын, уақыт белгілерін, авторларды, құжат түрін сақтау)
әр құжат түріне арналған әртүрлі ендіру стратегиялары
Жоғарыда аталған мүмкіндіктер бойынша pgai икемділігі төмен.
Қазір бөліктерге бөлудің екі негізгі стратегиясы бар: мәтінді таңбалар бойынша бөлгіш пен рекурсивті таңбалық мәтін бөлгіш, сондай-ақ мүлде бөлмеу мүмкіндігі. Бұл кейбір қолдану сценарийлеріне жеткілікті болуы мүмкін, бірақ өндірістік RAG жүйелерінің көбіне кеңірек теңшеу қажет.
Timescale компаниясы Chonkie сияқты кітапханалардағы күрделі бөліктерге бөлу стратегияларын енгізіп, Anthropic компаниясының мәнмәтіндік іздеуі секілді жетілдірілген тәсілдерді қолдаса, тамаша болар еді.
2) Мультимодальды емес, мәтінге басымдық береді.
Көптеген қызықты RAG міндеттері енді тек мәтінмен шектелмейді:
диаграммалары бар PDF файлдары
скриншоттар / кескіндер
аудиожазбалар
бейнеүзінділер
Бұл дереккөздерден «мәтінді шығарып алу» мүмкін болғанымен, ол шынайы мультимодальды ендіру конвейеріне тең емес.
Егер pgai ақырында мультимодальды модельдерді толығымен қолдаса (S3 ішінде сақталған үлкен кескіндерді, аудио мен бейнені жүктеу → бөлу → ендіру және сенімді синхрондау), бұл өте тартымды болар еді. Бірақ қазір ол — мәтінді ендіру жұмыс процесі.
3) Тек ендірулер қажет болса, pgai керек болмауы мүмкін.
Деректерді қабылдау конвейеріңіз арнайы жасалған болса (немесе солай жасалуы керек болса), «мәтін бөліктерін ендіру» — RAG ішіндегі ең қиын жұмыс емес. Мұндай жағдайда pgai мәселенің ең оңай бөлігін ғана шешеді.
Сонымен қатар білім базаңыз сирек жаңартылса, ендірулерді автоматты синхрондаудың құндылығы да төмендейді.
pgai-ды пайдаланудың ерекше тиімді жолдарының бірі — дерекқорларыңыздың үстінен мәтіннен SQL-ге түрлендіретін интерфейс орналастыру. Мұны pgai ұсынатын semantic_catalog модулі арқылы оңай іске асыруға болады. Мынадай етіп баптаңыз:
Bash
содан кейін pgai semantic-catalog create пәрмені арқылы семантикалық каталогқа деректер сөздіктерін жинауды тапсырыңыз. Бұл деректер қоймасынан шамамен мынадай мәнмәтін жасайды:
Plain Text
Енді бұл мәнмәтін pgai жүйесіне бірнеше жолмен қолжетімді;
Семантикалық іздеу арқылы:
Бұл сұрау табиғи тілдегі сұрауыңызға сәйкес болуы мүмкін кестелерді, функцияларды және басқа нысандарды қайтарады:
Bash
Өңделмеген мәнмәтінді алу:
Бұл табиғи тілдегі сұрауыңызға қатысты өңделмеген YAML мәнмәтінін көрсетеді:
Bash
SQL жасау:
Немесе сұрауыңызға жауап беруге қажетті өңделмеген SQL кодын тікелей жасай аласыз. Алдыңғы қадамдағы мәнмәтін LLM (үлкен тілдік модель) жүйесіне жіберіліп, жауап жасалады:
Bash
Салыстырмалы түрде қарапайым RAG жүйесін құрып жатсаңыз, мына мүмкіндіктер қажет болғанда pgai-ды қолданып көруге болады:
Postgres негізгі есеп жүйесі ретінде,
ең аз байланыстырушы код,
автоматты түрде синхрондалып тұратын ендірулер,
дерекқорларға мәтіннен SQL-ге түрлендіруді жылдам қолдану,
жаңа RAG құралдары мен Postgres кеңейтімдерін тәжірибеден өткізу.
RAG конвейеріңізге төмендегілердің бірі қажет болса, pgai-ды қолдануға асықпаған жөн:
күрделі арнайы қабылдау немесе бөліктерге бөлу логикасы
талдау талаптары әртүрлі көптеген құжат түрі
мультимодальды ендірулер
Соңында, pgvector кеңінен қабылданғаны анық болғанымен, pgai дәл сондай қызығушылық пен қолдауға ие бола ма, белгісіз (оның пайда болғанына небәрі 18 айдай болғанын ескерсек те).


pgai — қолданба кодын жеңілдету үшін дерекқорларға күнделікті операциялық жұмыстың көбірек бөлігін орындататын қызықты RAG тәсілі.
Қазіргі уақытта ол:
қарапайым RAG конфигурацияларында қолдануға жарамды әрі шынымен ыңғайлы
арнайы конвейерлерге, әсіресе мультимодальды түрлеріне, жеткілікті икемді емес
Жобаның болашағы бар, сондықтан оның қалай дамитынын бақылауға тұрарлық.