A promptok tesztelése és összehasonlítása egyre nagyobb szerepet kap a mesterséges intelligenciával kapcsolatos fejlesztések világában. Ezzel a folyamattal a fejlesztők képesek gyorsan tesztelni és finomhangolni a promptokat, hogy azokat a legjobb teljesítményű variációkra cseréljék. A promptfoo nevű eszköz kifejezetten a promptok tesztelésére és értékelésére lett kifejlesztve, és segít az automatizált tesztelésben, valamint a fejlesztők számára biztosítja az egyszerű, gyors iterációs munkát.

A promptfoo egyik alapvető funkciója az automatizált tesztelés, amely lehetővé teszi, hogy a fejlesztők a saját alkalmazásaikhoz szabott értékeléseket futtassanak. A rendszer képes arra, hogy különféle teszteseteket értékeljen és az eredmények alapján optimalizálja a promptokat, hogy azok a legjobb teljesítményt nyújtsák a kívánt feladatokhoz. A fejlesztők saját, testreszabott probe-okat hozhatnak létre, amelyek lehetővé teszik számukra, hogy a promptokat a tesztesetektől függetlenül is teszteljék, így biztosítva a maximális rugalmasságot a különböző alkalmazási lehetőségekhez.

A promptfoo parancssori felülete egy intuitív CLI-t biztosít a fejlesztők számára, amely támogatja az élő újratöltést és a gyorsítótárazást. Ennek köszönhetően a tesztelés gyors és hatékony lehet, ami lehetővé teszi a promptok és modellek gyors iterációját és finomhangolását. Az eszközt könnyen integrálhatjuk más rendszerekkel is, ami tovább növeli a felhasználói élményt.

Fontos, hogy a promptok nem csupán a nyelvi modellek működésének alapját képezik, hanem azok a pontok, ahol a fejlesztők szoros együttműködést folytathatnak a szakterületi szakértőkkel. A promptok optimalizálása nemcsak technikai feladat, hanem az alkalmazásra vonatkozó konkrét igények és elvárások figyelembevételével történik. Egy jól megfogalmazott prompt sokkal többet jelenthet, mint csupán egy kérdés vagy utasítás a modell számára – az a híd, amely összeköti a nyelvi modellt a felhasználói elvárásokkal.

Például egy 10-K-es pénzügyi jelentés összefoglalásának megértése és elemzése során rendkívül fontos, hogy a promptokat a pénzügyi szakértők segítségével tervezzük meg. Kérdések, mint például „Mi a legfontosabb szakasz a 10-K jelentésben?”, vagy „Milyen új információkat szolgáltathat egy LLM a jelentés elemzésében?”, segíthetnek abban, hogy a nyelvi modellek olyan válaszokat adjanak, amelyek valóban hasznosak és értékesek a felhasználók számára.

A promptfoo rendszeres tesztelése segít abban, hogy az egyes modellek teljesítményét mérjük, és ennek alapján döntsünk a legmegfelelőbb modellek és promptok kiválasztásáról. A rendszer lehetővé teszi, hogy különböző LLM modellek, mint például a GPT-4, GPT-3.5-turbo vagy a GPT-4o-mini, különböző tesztkészletek alapján legyenek értékelve. Az értékelés eredményeként különböző metrikákat, például a költséget, a válaszidőt, a tokenhasználatot és az output minőségét elemezhetjük.

A konfigurációs fájl segítségével a fejlesztők meghatározhatják azokat a tesztelési paramétereket, amelyek szükségesek a modellek értékeléséhez. Például egy adott modell teljesítményét a költség (például $0.001 per kérés), a válaszidő (pl. 1000 ms alatti válaszidő), az output hossza (max. 200 karakter) és a minőségi értékelés (pl. „Úgy tűnik, hogy a válasz szakértői elemzők által készült?”) alapján lehet mérni. Ez a részletes értékelés segít abban, hogy megértsük, mely modellek a leghatékonyabbak az adott feladathoz.

A következő lépés az, hogy az egyik legjobb modellt választjuk ki a teszteléshez, és ennek alapján összehasonlítjuk a különböző promptokat, hogy megtaláljuk a legjobban teljesítő verziót. A promptok összehasonlításakor az értékelési kritériumok, mint a részletesség, a stílus, a tömörség és a pontosság mind meghatározó szerepet játszanak. Mivel a promptok tesztelése alapvetően kreatív folyamat, lehetőség van arra is, hogy a fejlesztők különböző típusú promptokat próbáljanak ki, hogy megtudják, melyik adja a legjobb eredményeket a kiválasztott modell számára.

A promptok tesztelése nemcsak az LLM modellek teljesítményének optimalizálásában segít, hanem abban is, hogy jobban megértsük, hogyan reagál egy nyelvi modell az eltérő bemenetekre és feladatokra. Ez a fajta finomhangolás lehetővé teszi, hogy a fejlesztők a lehető legjobb felhasználói élményt biztosítsák, miközben maximalizálják a költséghatékonyságot és a válaszok gyorsaságát.

Mindezek mellett fontos, hogy a tesztelési és értékelési folyamatokat rendszeresen ismételjük, mivel a nyelvi modellek folyamatosan fejlődnek és új verziók jelennek meg. A promptok, amelyek ma még jól működnek, holnap már nem biztos, hogy ugyanúgy teljesítenek. A folyamatos finomhangolás és a szakterületi szakértőkkel való szoros együttműködés kulcsfontosságú a promptok hosszú távú sikeréhez.

Hogyan befolyásolják a promptvariációk a részletes eredmények kinyerését LLM-ekkel?

A promptok szerepe kulcsfontosságú a nyelvi modellek (LLM-ek) teljesítményének értékelésében, mivel a különböző promptok eltérő eredményeket hozhatnak, különösen, ha a kívánt információ részletessége a cél. Az alábbiakban egy konkrét esettanulmányon keresztül mutatjuk be, hogyan tesztelhetjük a promptok hatékonyságát különböző változatai között, és hogyan befolyásolják azok a végső kimenetet.

A promptok tesztelése során három különböző változatot alkalmaztunk, amelyek mindegyike a részletes információk kinyerésére irányult. Az első prompt az egyszerű, alapvető kérés volt: "Generálj egy egysoros összefoglalót a {{section}} szekcióról az SEC bejegyzésében: {{content}}". A második prompt ezt kiegészítette egy szereppel: "Szerep: pénzügyi elemző. Feladat: Generálj egy egysoros összefoglalót a {{section}} szekcióról az SEC bejegyzésében: {{content}}". A harmadik prompt már nemcsak szerepet adott a modelnek, hanem egy konkrét kérést is: "Szerep: pénzügyi elemző. Követelmények: LEGYEN RÉSZLETEZETT. Feladat: Generálj egy egysoros összefoglalót a {{section}} szekcióról az SEC bejegyzésében: {{content}}".

A három különböző prompt eredményeit egy értékelési rendszeren keresztül elemeztük, és a következő eredmények születtek. A harmadik prompt (amely a "részletes" választ kérte) a "Jogi eljárások" szekciók esetében 1.0-ás pontszámot ért el, míg az első és második promptok alacsonyabb pontszámot kaptak (0.1 és 0.5). A "Kockázati tényezők" szekcióban a harmadik prompt 0.5-ös pontszámot kapott, míg az első prompt csupán 0.1-et.

Ez az eredmény azt mutatja, hogy a pontos és részletes kérés (mint a harmadik promptban) nagyobb pontossággal képes kinyerni a szükséges információkat, különösen, ha a tartalom jogi jellegű. A modell számára fontos, hogy ne csupán egy általános kérdést kapjon, hanem konkrét irányelveket és elvárásokat fogalmazzanak meg számára.

A tesztelés eredményei segítenek megérteni, hogyan működnek a különböző promptvariációk a nyelvi modellekkel, és hogyan javítható az eredmények minősége a specifikus irányelvek és szerepek alkalmazásával. Ez nemcsak a fejlesztők számára hasznos, hanem az üzleti felhasználók számára is, akik nem rendelkeznek technikai háttérrel, de interakcióba lépnek a modellekkel. A megfelelő promptok alkalmazása a nem technikai személyek számára is könnyebbé teszi a pontos és részletes kimenet elérését.

Fontos megjegyezni, hogy a promptok nem csupán a tartalom típusától függnek, hanem attól is, hogy milyen konkrét irányelveket adunk a modellnek. A pénzügyi elemző szerepe és a részletesség iránti igény például jelentősen befolyásolhatja a végeredményt. Ez a felfedezés segíthet a LLMBAs (Large Language Model-Based Applications) fejlesztésében, és fontos ahhoz, hogy a modellek a kívánt módon működjenek a felhasználói igényeknek megfelelően.

A tesztelés folytatásához más értékelési eszközöket is bevethetünk, mint például a LightEval, amely egy nyílt forráskódú keretrendszer a modellek teljesítményének mérésére. Ez különösen hasznos lehet az üzleti környezetben, ahol a modellek megbízhatósága és precizitása kulcsfontosságú. Az ilyen eszközök lehetővé teszik, hogy a fejlesztők pontosan mérjék a modellek eredményeit különböző dimenziókban, például pontosságban, érvelésben és biztonságban.

Az LLM-ek alkalmazásának egyik legnagyobb kihívása az, hogy miként tudjuk őket alkalmazni olyan területeken, ahol nem rendelkeznek szakértői tudással, például közgazdasági elemzések végzésében. Ilyen esetekben más benchmarkokat, mint az MMLU (Massive Multitask Language Understanding) alkalmazásával mérhetjük a modellek teljesítményét, amely speciális tesztkészleteket tartalmaz, mint például a közgazdaságtani kérdéseket.

Ezek az eszközök és megközelítések segíthetnek abban, hogy a fejlesztők és a felhasználók jobban megértsék, hogyan kell optimalizálni a promptokat a kívánt kimenet elérése érdekében, és hogyan alkalmazhatóak a modellek a legkülönfélébb üzleti vagy tudományos feladatokban.

Hogyan kezeljük az adatok előfeldolgozását és kinyerést kiegészítő generálást a nyílt forráskódú LLM alkalmazásokban?

A mesterséges intelligenciák, különösen a nagy nyelvi modellek (LLM) és azok kombinációi (LLMBA) napjainkban egyre fontosabb szerepet játszanak az üzleti világban, különösen az adatelemzés és információkinyerés területén. Azonban a hatékony alkalmazásukhoz nem csupán a modellek teljesítményének értékelése szükséges, hanem az adatok megfelelő előkészítése és feldolgozása is elengedhetetlen. Az alábbiakban a nyílt forráskódú keretrendszerek által lehetővé tett adatok előfeldolgozásáról és kinyerést kiegészítő generálásról (RAG) lesz szó, amelyek segítenek az LLM modellek hatékonyabb alkalmazásában.

A LLM-ek jellemzően olyan szöveges válaszokat generálnak, amelyek szándékunk szerint segítenek az új, még nem látott adatok elemzésében. Azonban, ahogyan az előző fejezetekben láttuk, a különböző promptok és modellek teljesítményét nemcsak az output értékelése alapján mérhetjük, hanem azzal is, hogy miként kezeljük a bemeneti adatokat. Ebben a fejezetben az unstructured, azaz struktúrálatlan szöveges adatok előfeldolgozására és azok hatékony kinyerési technikáira összpontosítunk, amelyek kulcsfontosságúak a LLM-ek alkalmazása során.

Az adatok előfeldolgozása két fő részből áll: az első a dokumentumok feldolgozása (parsing) és darabolása (chunking), hogy azok megfelelő formátumban kerülhessenek az LLM-be, a második pedig a kinyerést kiegészítő generálás (RAG), amely lehetővé teszi, hogy a modellek releváns információkat nyerjenek ki a dokumentumból a válaszok generálásához.

A dokumentumok előfeldolgozása kiemelt szerepet játszik abban, hogy a nyelvi modellek megfelelő választ tudjanak adni a felhasználói kérdésekre. Az olyan nyílt forráskódú eszközök, mint a PyPDF2, Docling és MarkItDown, segítenek abban, hogy a különféle adatformátumokat egységes, LLM-kompatibilis formátumba alakítsák. Az előfeldolgozás egyik kulcsfontosságú lépése a chunking, azaz az adatok darabolása, amely megkönnyíti a modellek számára az adatok hatékony feldolgozását. Az adatok darabolása nem csupán a dokumentumok kisebb részekre bontását jelenti, hanem annak is, hogy ezek a részek összefüggő módon legyenek elrendezve, így segítve a modelleket a releváns válaszok generálásában.

A kinyerést kiegészítő generálás (RAG) egy másik alapvető aspektusa az adatok feldolgozásának. Ennek során három lépésben dolgozzuk fel a már előfeldolgozott adatokat: először is sűrített vektoros ábrázolást hozunk létre a chunkokból, majd szemantikai keresést végzünk ezek között a chunkok között, hogy megtaláljuk a legrelevánsabb részeket. A harmadik lépésben a kiválasztott chunkokat továbbítjuk az LLM-nek, amely a legmegfelelőbb választ generálja. Az RAG alkalmazása különösen fontos az olyan üzleti környezetekben, ahol a dokumentumok gyakran hatalmas mennyiségű információt tartalmaznak, és szükség van egy gyors, pontos információkinyerési mechanizmusra.

Fontos megjegyezni, hogy bár a hosszú kontextusú nyelvi modellek (LCM) fejlődése ígéretes jövőbeli irány, az adatok feldolgozása és kinyerése még mindig komoly kihívásokat jelent. A modellek érzékenyek az inputok formátumára és szerkezetére, ezért különös figyelmet kell fordítani az adatok előkészítésére annak érdekében, hogy a lehető legjobb eredményeket érhessük el. Az LLM-ek emellett gyakran szembesülnek azzal a problémával, hogy nem rendelkeznek friss, naprakész információkkal, mivel ismereteik időbeli korlátozottsága miatt nem tudják figyelembe venni az aktuális eseményeket. Továbbá a ritkábban előforduló, de mégis fontos információk is könnyen elveszhetnek a rendszerben, így elengedhetetlen a megfelelő adatkezelési technikák alkalmazása.

A következő fejezetekben részletesebben is bemutatjuk, hogyan lehet ezeket a problémákat megoldani a különböző eszközökkel, és hogyan lehet hatékonyan alkalmazni őket az üzleti környezetekben. A chunking és RAG alkalmazása nemcsak hogy növeli a LLM-ek pontosságát és hatékonyságát, hanem lehetővé teszi számunkra, hogy a lehető legtöbbet hozzuk ki az unstructured adatokból, és értékes információkat nyerjünk belőlük.

Hogyan dolgozhatunk fel szöveges adatokat különböző eszközökkel és módszerekkel?

A szöveges adatkinyerés és a dokumentumok feldolgozása kulcsfontosságú elemei az üzleti mesterséges intelligencia (AI) alkalmazásoknak. Az adatok megértéséhez és hasznosításához szükséges alapvető lépések közé tartozik a szövegkinyerés és a chunking, vagyis a szöveg kisebb egységekre bontása. Az alábbiakban három, a szöveges adatok kinyerésére alkalmas eszközt mutatunk be, és részletesen ismertetjük, hogy miért és hogyan fontos az adatok feldolgozásának egyes fázisai.

Szövegkinyerés eszközei

Az első lépés a dokumentumból történő szövegkinyerés. Ehhez számos Python könyvtár és eszköz áll rendelkezésre. Az egyik legnépszerűbb eszköz a PyPDF2, amely egyszerűen használható a PDF fájlok szövegének kinyerésére. A PyPDF2 könyvtár képes olvasni és feldolgozni a PDF fájlokat Windows, MacOS és Linux operációs rendszereken. Az alábbi példa bemutatja, hogyan használhatjuk ezt az eszközt egy egyszerű szövegek kinyerésére:

python
import PyPDF2
def extract_text_from_pdf(pdf_path): with open(pdf_path, 'rb') as file: pdf_reader = PyPDF2.PdfReader(file) num_pages = len(pdf_reader.pages) text = "" for page_num in range(num_pages): page = pdf_reader.pages[page_num] text += page.extract_text() return text

A PyPDF2 jól használható egyszerű PDF-ek, például a Federal Reserve Open Market Committee értekezleteihez, ahol a szövegek nem tartalmaznak bonyolult grafikonokat vagy táblázatokat. Azonban összetett PDF-ek, például táblázatokkal vagy képekkel ellátott dokumentumok esetén más eszközöket célszerű választani.

A MarkItDown egy másik hasznos eszköz, amely különböző fájlformátumokat alakít át Markdown formátumba. A MarkItDown támogatja a PDF, PowerPoint, Word, Excel és más dokumentumformátumok átalakítását, így széleskörű alkalmazást kínál. Az alábbi példa bemutatja, hogyan lehet egyszerűen átalakítani egy Excel fájlt:

python
from markitdown import MarkItDown md = MarkItDown() result = md.convert("test.xlsx") print(result.text_content)

A Docling egy fejlettebb eszköz, amely a dokumentumok megértésére és konvertálására összpontosít. A Docling különösen hasznos, ha a dokumentumban bonyolult formázások vagy elrendezések találhatók, mint például táblázatok vagy képek. Az alábbi kód segít a PDF-ek Markdown formátumba történő átalakításában:

python
from docling.document_converter import DocumentConverter converter = DocumentConverter() result = converter.convert("document.pdf") print(result.document.export_to_markdown())

Chunking – A szöveg feldarabolása

Miután sikeresen kinyertük a szöveget egy dokumentumból, következő lépésként a chunking technikát alkalmazzuk. A chunking során a szöveget kisebb egységekre, "chunk"-okra bontjuk, hogy a mesterséges intelligencia modellek számára könnyebben kezelhetővé váljon. Ha például egy 150 oldalas 10-K dokumentumot szeretnénk feldolgozni, akkor azt nem célszerű egyetlen hatalmas szöveges blokkként kezelni. Ehelyett a szöveget kisebb részekre kell bontani, hogy a modell jobban megérthesse és feldolgozhassa.

A chunking módszerei közül az alábbiak a legelterjedtebbek:

  • Fix méretű chunking: Ez a legegyszerűbb és leggyakoribb módszer. A szöveget egyszerűen fix hosszúságú darabokra vágjuk, például 500 tokenes blokkokra. A chunking során fontos, hogy az egymás melletti blokkok között legyen átfedés, hogy a szöveg kontextusa ne vesszen el.

  • Téma-alapú chunking (content-aware chunking): Ebben a módszerben a szövegeket természetes határok szerint bontjuk, például mondatokra vagy bekezdésekre. Ez biztosítja, hogy minden chunk egy teljes gondolatot tartalmazzon. A Naive splitting, az NLTK és a spaCy Python könyvtárak segíthetnek ebben a folyamatban.

  • Rekurzív chunking: Ez a technika hierarchikusan és ismétlődően bontja le a szöveget, kisebb részekre, a megadott elválasztók mentén.

  • Kontekstuális chunking: Itt a környező információt is figyelembe vesszük a chunkok kialakításakor, hogy a szöveg jelentése megmaradjon. A szemantikai chunking például a szöveg jelentését is figyelembe veszi, hogy olyan egységeket alkossunk, amelyek ugyanazon témát dolgoznak fel.

A chunking módszerek közötti választás a feldolgozandó adatok típusától és a célkitűzésektől függ. Az optimális chunking technika használata jelentősen javíthatja a mesterséges intelligencia modell teljesítményét, mivel a jól felosztott adat sokkal hatékonyabban dolgozható fel.

A chunking fontossága a mesterséges intelligencia alkalmazásokban

A chunking nem csupán egy egyszerű adatfeldolgozási módszer, hanem az egyik alapvető technika a vállalati mesterséges intelligencia rendszerek teljesítményének növelésében. Az LLM (Language Model-based Applications) modellek, amelyek például üzleti intelligencia elemzésekhez vagy ügyfélszolgálati chatbotokhoz használatosak, jelentős előnyökre tehetnek szert, ha megfelelő chunking módszereket alkalmazunk.

A jól struktúrált és megfelelően chunkolt adatok felkészítik a modellt arra, hogy pontos és releváns válaszokat generáljon az üzleti kérdésekre. Ezen adatok feldolgozása vezethet el a "Retrieval Augmented Generation" (RAG) típusú megoldásokhoz, amelyek lehetővé teszik, hogy a modellek a legfrissebb és legérzékenyebb adatokat használják válaszadáshoz, megoldva a modell "hallucinációs" problémáit, amikor a rendszer olyan információkat talál ki, amelyek nem állnak rendelkezésre a tanulási adatbázisban.

A RAG nem csupán technológiai újítás, hanem fontos eszköz a vállalati tudásmenedzsmentben is. Az adatok hatékony feldolgozása és integrálása lehetővé teszi a szervezetek számára, hogy gyors és pontos válaszokat nyújtsanak a felmerülő üzleti kérdésekre, miközben fenntartják az adatvédelmet és a személyes adatok védelmét.