Sdílet prostřednictvím


Důležité koncepty a důležité informace pro vývojáře vytvářející řešení pro generování AI

Velké jazykové modely (LLM) jsou úžasné, ale i když mají svá omezení. Vývojáři potřebují tato omezení pochopit, jaké llmy jsou schopné "odsunout" a jak je upravit, aby získali nejlepší výsledky pro řešení generující umělou inteligenci, která vytvářejí. Tento článek popisuje několik problémů a omezujících faktorů a vysvětluje běžné způsoby, jak tyto výzvy překonat a převzít kontrolu nad procesem generování obsahu bez ohledu na to, jaký typ generovaných funkcí umělé inteligence vytváříte ve své aplikaci.

Technické výzvy při práci s LLMs

Nejdůležitější výzvy nebo omezení, o které je potřeba vědět při práci s LLM:

  • Snížení znalostí – vzhledem k vysokým nákladům na trénování LLM je jejich tělo znalostí omezené na to, na co byli v určitém okamžiku natrénováni. Bez modulů plug-in nebo jiných ubytování nemají přístup k informacím v reálném čase ani nemají přístup k soukromým datům.

  • Halucinace – LLM používá statistické pravděpodobnosti a malou náhodnost k vygenerování informací. Existují mechanismy pro zachování vygenerovaných odpovědí v souladu se záměrem člověka v otázkách, které jsou kladeny, a informace, na které byly natrénovány, ale je možné, že vytvářejí odpovědi, které nejsou přesné.

  • Transparentnost – opět vzhledem k tomu, jak jsou modely trénovány, už nemají přístup k základním znalostem, na kterých byly natrénovány. A i kdyby to udělali, není zaručeno, že informace byly pravdivé a uzemněné na prvním místě. Kromě toho neexistuje žádný ověřovací krok, který zajistí, že vygenerovaná odpověď bude přesná.

  • Žádné znalosti specifické pro doménu – podobně jako "výpadek znalostí , pokud máte soukromé informace, jako jsou interní firemní dokumenty, LLM nebyl na tyto informace vytrénován, a proto nemá žádné znalosti specifické pro doménu.

Co můžete udělat, abyste zmírňovali možné problémy nebo problémy s LLM a získali nejlepší možné výsledky, aby pomohli vašim uživatelům a vaší organizaci? Začněte tím, že pochopíte způsoby, kterými můžete doplnit, odkud LLM získává svá data.

Vysvětlení toho, kde LLM získávají informace

Dobrým výchozím bodem pro získání nejlepších výsledků z LLM je pochopit, kde nebo jak LLM získávají informace. Následující kategorie představují různé přístupy k interakci LLM s různými zdroji informací za účelem generování odpovědí.

Diagram znázorňující tři různé typy generování načítání s generováním načtení mimo začátek koreluje s nejtrénovanějšími znalostmi, pak načítáním rozšířené generace a následným generováním orientovaným na načtení v dolní části koreluje s nejvíce načtenými znalostmi.

  • Retrieval-Off Generation (ROG) – jedná se o tradiční způsob fungování LLM, kdy model generuje odpovědi výhradně na základě znalostí, na kterých byl vytrénován, bez přístupu k externím informacím během procesu generování. Znalost modelu je statická, omezená na to, co bylo součástí trénovacích dat až do data ukončení. Kromě kreativního psaní může odpovídat na otázky týkající se informací, které jsou snadno dostupné na internetu.

  • Načítání rozšířené generace (RAG) – kombinuje generační funkce LLM s možností načítat informace z externích databází nebo dokumentů v reálném čase. Model se dotazuje externího zdroje, aby našel relevantní informace, které pak použije k informování odpovědi. Tento přístup umožňuje modelu poskytovat přesnější a aktuální informace, než by mohl získat pouze z předem natrénovaných znalostí. Případy použití zahrnují kontrolu faktů, odpovědi na otázky na základě dat v reálném čase nebo soukromých dat specifických pro doménu.

  • Generování RCG (Retrieval-Centric Generation) – klade ještě větší důraz na externě načtený obsah, často strukturuje odpovědi kolem informací načtených z externích zdrojů. Model může přímo začlenit velké segmenty načteného textu do svých výstupů, úpravy nebo přidávání poznámek tak, aby odpovídaly dotazu uživatele. Tento přístup lze považovat za hybridní mezi metodami založenými na načítání a generování, kde by zůstatek mohl výrazně upřednostnění informací načítaných ve vlastních generačních schopnostech modelu. Případy použití zahrnují shrnutí delšího dokumentu, pomoc při výzkumu, která poskytuje porovnání a tematické průzkumy napříč několika podobnými dokumenty, a kompilaci nebo kolaci různých zdrojů materiálu do kombinovaného výstupu.

Dobrým příkladem načítání mimo generaci (ROG) je ChatGPT. V případě potřeby naopak Copilot (prostřednictvím Bingu) rozšiřuje LLM pomocí externích zdrojů ze zdrojů zpráv (a poskytuje odkazy na tyto zdroje).

Na první pohled zní funkce Retrieval-Augmented Generation (RAG) a Retrieval-Centric Generation (RCG), protože oba zahrnují integraci externích informací do procesu generování jazyka. Liší se ale v tom, jak upřednostňují a využívají načtené informace v rámci procesu generování.

V systémech RAG se externí načítání dat používá k rozšíření generačních schopností předem natrénovaného jazykového modelu. Načtené informace poskytují více kontextu nebo specifická data, která model používá k informování odpovědí. V tomto případě zůstává generující aspekt jazykového modelu pro odpověď ústřední, zatímco načtená data fungují jako podpůrný prvek pro zvýšení přesnosti nebo hloubky.

Systémy RCG na druhé straně zvýrazňují silnější důraz na samotné načtené informace. V těchto systémech jsou načtená data často středem odpovědi, přičemž role generujícího modelu je primárně upřesněna, formátovat nebo mírně vylepšit načtený text. Tento přístup se používá zejména v případě, že je nejdůležitější přesnost a přímý význam informací a vyžaduje se méně kreativní syntéza nebo extrapolace.

Mechanismy pro externí načítání dat, které využívají RAG i RCG, jsou popsány v článcích o ukládání vektorizovaných vkládání dokumentů oproti doladění LLM, dva přepočítané přístupy k doplnění znalostí dostupných pro LLM na základě počátečního trénování.

Pochopení rozdílů mezi modely načítání může pomoct při výběru správného přístupu pro konkrétní aplikace, vyvážení potřeby kreativní syntézy a potřeby přesnosti a věrnosti zdrojového materiálu.

Pochopení faktorů, které ovlivňují fungování odvození

Vzhledem k tomu, že jste pravděpodobně obeznámeni s webovým uživatelským rozhraním ChatGPT, porozumění tomu, jak funguje při odpovídání na otázky, vám může pomoct pochopit koncepty, které budou důležité při vytváření funkcí umělé inteligence ve vašich vlastních aplikacích.

Když uživatel chatuje s ChatGPT, návrh uživatelského rozhraní dává iluzi dlouhotrvající chatovací relace, která udržuje stav v průběhu několika výměn mezi vámi a LLM. Ve skutečnosti se u dané relace chatu posílají všechny výzvy a všechny odpovědi LLM (označované také jako dokončování) s každou novou výzvou. S tím, jak vaše konverzace roste, odesíláte do LLM stále více textu ke zpracování – všechny předchozí výzvy a dokončení. ChatGPT při vytváření odpovědi na aktuální výzvu používá kontext celé relace chatu , nejen aktuální výzvu. Celá relace chatu se nazývá kontextové okno.

V závislosti na verzi ChatGPT, se kterou pracujete, existuje omezení délky kontextového okna. Při psaní odpovědi na nejnovější výzvu se ignoruje jakákoli část konverzace chatu, která překračuje limit délky kontextového okna.

Dlouhé konverzace můžou zpočátku vypadat jako dobrý nápad, ale dlouhá kontextová okna můžou ovlivnit množství výpočtů potřebných ke zpracování výzvy a vytvoření dokončení. To má vliv na latenci odpovědi a na to, kolik stojí OpenAI ke zpracování požadavku.

Co je limit kontextového okna ChatGPT? Nebo třeba kolik slov může ChatGPT fungovat? Omezení kontextového okna závisí na modelu, verzi a edici LLM, se kterou pracujete. Kromě toho se délky kontextu měří v tokenech, nikoli ve slovech. Tokeny jsou nejmenšími jednotkami textu, které model dokáže pochopit a vygenerovat. Tyto jednotky mohou být slova, části slov (například slabiky nebo kmeny) nebo dokonce jednotlivé znaky. Tokeny jsou jádrem zpracování přirozeného jazyka (NLP).

Použití tokenů má vliv na dva důležité aspekty pro vývojáře:

  • Maximální limit kontextového okna
  • Cena za výzvu a dokončení

Co je tokenizace?

Tokenizace je proces převodu textu na tokeny. Je to zásadní krok při přípravě dat na trénování nebo odvozování (proces vytváření dokončení na základě výzev) s LLM. Tento proces zahrnuje několik kroků, včetně rozdělení komplexního textu na spravovatelné části (tokeny), které pak model může zpracovat. Tento proces může být jednoduchý, například rozdělení textu mezerami a interpunkcí nebo složitější, včetně sofistikovaných algoritmů pro zpracování různých jazyků, morfologií (struktura slov) a syntaxí (uspořádání slov). Pracovníci a vývojáři LLM se rozhodnou o metodě tokenizace na základě toho, čeho se snaží dosáhnout. OpenAI má užitečnou stránku , která vysvětluje více o tokenizaci a dokonce má kalkulačku, která ilustruje, jak se věta nebo odstavec rozdělí na tokeny.

Jak uvádí poznámka v dolní části stránky Tokenizer OpenAI, že v typických anglických textech je jeden token ekvivalentem přibližně čtyř znaků. To znamená, že v průměru se 100 tokenů rovná 75 slovům nebo třem čtvrtinám slova na token.

Stránka OpenAI Tokenizer se také týká tiktokenu, balíčku pro Python a JavaScript, který umožňuje programově odhadnout, kolik tokenů použijete pro danou výzvu odeslanou do rozhraní OpenAI API.

Využití tokenů má vliv na fakturaci

Každé rozhraní API Azure OpenAI má jinou metodologii fakturace. Pro zpracování a generování textu pomocí rozhraní API pro dokončování chatu se vám účtuje počet tokenů, které odešlete jako výzvu, a počet tokenů, které se vygenerují jako výsledek (dokončení).

Každý model LLM (např. gpt-3.5, gpt-3.5-turbo, gpt-4 atd.) má obvykle jinou cenu, což odráží množství výpočtů potřebných ke zpracování a generování tokenů. Často se cena prezentuje jako "cena za 1 000 tokenů" nebo "cena za jeden milion tokenů".

Tento cenový model má významný vliv na to, jak navrhujete interakce uživatelů, a množství předpřipravených a po zpracování, které přidáte.

Systémové a uživatelské výzvy

Do této chvíle se diskuze zaměřila výhradně na výzvy uživatelů – výzvy, které tvoří výměnu mezi uživatelem a ChatGPT.

OpenAI zavedla "systémovou výzvu" (označovanou také jako vlastní instrukce), což je překlenovací sada instrukcí, které definujete a přidá se do všech konverzací chatu. Představte si ji jako sadu meta instrukcí, které chcete, aby LLM vždy sledoval při každém spuštění nové chatovací relace. Můžete například nastavit výzvu systému tak, aby "vždy reagovala v poetické podobě haiku". Od tohoto okamžiku má každá nová výzva k ChatGPT za následek haiku obsahující odpověď.

I když odpověď ve formuláři haiku není užitečným příkladem, ilustruje myšlenku, že můžete ovlivnit dokončení LLM na výzvu úpravou samotné výzvy.

Proč chcete upravit výzvu uživatele? Pokud vytváříte funkci nebo aplikaci generující umělou inteligenci pro profesionální cílovou skupinu, která může zahrnovat zaměstnance společnosti, zákazníky a partnery, budete nepochybně chtít přidat ochranu, abyste omezili rozsah témat nebo domén, na které může odpovědět.

Úprava výzvy uživatele je ale jen jednou metodou pro zlepšení prostředí generování textu pro uživatele.

Metody pro zlepšení prostředí generování textu pro uživatele v ChatGPT

Aby se zlepšily výsledky generování textu, vývojáři jsou omezeni na pouhé vylepšení výzvy a existuje mnoho technik výzev, které můžou pomoct. Pokud ale vytváříte vlastní aplikaci generující AI, existuje několik způsobů, jak vylepšit prostředí generování textu pro uživatele a můžete chtít experimentovat s implementací všech těchto aplikací:

  • Programové úpravy výzev uživatele
  • Implementace kanálu odvozování
  • Načítání rozšířené generace (probírané v dalších článcích)
  • Vyladění (probírané v dalších článcích)

Programové úpravy výzev uživatelů

Z programového hlediska neexistuje žádné speciální rozhraní API pro přidání systémové výzvy ke konverzacím uživatelů. Podle potřeby k výzvě pouze připojíte pokyny. Existuje však několik technik pro zlepšení uživatelských výzev:

  • Kontextový priming: Vytvořte systémové výzvy, které explicitně nastaví kontext konverzace v požadované doméně. To zahrnuje poskytnutí stručného popisu nebo sady instrukcí na začátku každé interakce, což vede AI tak, aby zůstala v rámci problémové domény.
  • Příklady doprovodných materiálů: Do úvodní výzvy uveďte příklady typů otázek a odpovědí, které jsou relevantní pro vaši doménu. To pomáhá umělé inteligenci porozumět očekávanému druhu odpovědí.

Kromě toho je možné použít všechny techniky přípravy výzev. Pokud toho dosáhnete programově, můžete vylepšovat výzvu uživatele jménem uživatele.

Upozornění na tento přístup spočívá v tom, že čím delší je výzva, tím dražší je každé volání LLM. I tak je to pravděpodobně nejlevnější z přístupů, které budou diskutovány.

Implementace kanálu odvozování

Dalším krokem mimo úpravu výzvy uživatele prostřednictvím kódu programu je vytvoření celého kanálu odvozování.

Kanál odvozování je komplexní proces, který přijímá nezpracovaný vstup (například text nebo obrázky) a před použitím ho před provedením primární výzvy (předběžného zpracování) nebo zkontroluje dokončení, aby se zajistilo, že splňuje požadavky uživatele před jeho zobrazením uživateli (po zpracování).

Předběžné zpracování může zahrnovat kontrolu klíčových slov, vyhodnocování relevance nebo transformaci dotazu tak, aby lépe vyhovoval očekávanému jazyku domény. Můžete například analyzovat počáteční výzvu odeslanou uživatelem a začít tím, že se zeptáte LLM, jestli je tato výzva v mezích toho, co jste ochotni přijmout, pokud je založená na chybném prostředí, nebo je potřeba znovu napsat, aby se zabránilo určitým předsudkům. Pokud LLM výzvu analyzuje a najde problémy, můžete přejít o krok dál: požádejte LLM, aby výzvu znovu naslovil, aby mohl odpověď vylepšit.

Následné zpracování může zahrnovat ověření relevance a vhodnost odpovědi pro doménu. Může se jednat o odebrání odpovědí nebo označování příznakem, které nevyhovují požadavkům na doménu. Můžete například chtít zkontrolovat dokončení poskytované LLM, aby se zajistilo, že splňuje vaše požadavky na kvalitu a bezpečnost. Můžete požádat LLM, aby vyhodnotil odpověď, aby zjistil, jestli skutečně splňuje požadavky, které jste požádali, aby odpovídal. Pokud tomu tak není, můžete požádat LLM, aby upravil dokončení, a to opakovat, dokud nebudete mít uspokojivý výsledek.

Při přidávání kroků předběžného zpracování existuje jedna výstraha: pokaždé, když do kanálu odvozování přidáte volání LLM, zvýšíte celkovou latenci (čas reakce) a náklady na každou interakci s uživatelem. Jako zkušený vývojář softwaru už pravděpodobně znáte tyto druhy kompromisů, které musí být provedeny vedením, které ovlivňují rozpočet, výkon a efektivitu softwarového systému.

Článek Vytváření pokročilých systémů rozšířené generace načítání podrobně popisuje konkrétní kroky vytvoření kanálu odvozování.

Další faktory ovlivňující dokončení

Kromě programové úpravy výzvy, vytvoření kanálu odvozování a dalších technik jsou další podrobnosti popsány v rozšíření rozsáhlého jazykového modelu pomocí generování rozšířeného načítání a jemného ladění. Kromě toho existují parametry, které je možné změnit při volání rozhraní Azure OpenAI API.

Dokumentace ke koncovému bodu chatu obsahuje seznam požadovaných a volitelných parametrů, které můžou ovlivnit různé aspekty dokončení. Pokud místo toho používáte sadu SDK, projděte si dokumentaci k sadě SDK pro jazyk podle vašeho výběru. Pokud chcete experimentovat s parametry, můžete to udělat v Dětském hřišti.

  • Teplota: Řídí náhodnost výstupu vygenerovaného modelem. Model se na nule stane deterministickým a konzistentně vybere nejpravděpodobnější další token z trénovacích dat. Při teplotě 1 model vyrovnává mezi výběrem tokenů s vysokou pravděpodobností a zavedením náhodnosti do výstupu.

  • Maximální počet tokenů: Určuje maximální délku odpovědi. Nastavení vyššího nebo nižšího limitu může ovlivnit podrobnosti a rozsah generovaného obsahu.

  • Top P (vzorkování vzorků vzorků na vzorkování vzorků): Používá se s teplotou k řízení náhodnosti odpovědi. Horní P omezuje AI tak, aby při generování jednotlivých tokenů zvážila pouze procento nejvyšší pravděpodobnosti pravděpodobnosti. Nižší hodnoty vedou k více prioritnímu a předvídatelnějšímu textu, zatímco vyšší hodnoty umožňují větší rozmanitost.

  • Trest frekvence: Snižuje pravděpodobnost, že model opakuje stejný řádek nebo frázi. Zvýšení této hodnoty pomáhá vyhnout se redundanci v generovaném textu.

  • Trest přítomnosti: Podporuje model, aby do dokončování zavedl nové koncepty a termíny. Trest přítomnosti je užitečný pro generování různorodějších a kreativních výstupů.

  • Stop Sequences: Můžete zadat jednu nebo více sekvencí, která rozhraní API instruuje, aby přestalo generovat další tokeny. Sekvence úložiště jsou užitečné pro řízení struktury výstupu, například ukončení dokončení na konci věty nebo odstavce.

  • Logit Bias: Umožňuje upravit pravděpodobnost výskytu zadaných tokenů v dokončení. Logit Bias lze použít k vodítku dokončení určitým směrem nebo k potlačení nežádoucího obsahu.

Principy bezpečnostních opatření Microsoft OpenAI

Kromě toho, že odpovědi LLM budou vázány na konkrétní předmět nebo domény, budete se také pravděpodobně zabývat druhy otázek, které vaši uživatelé ptají na LLM. Je důležité zvážit druhy odpovědí, které generuje.

Za prvé, volání rozhraní API do služeb Microsoft OpenAI Services automaticky filtrují obsah, který najde potenciálně urážlivé a hlásí vám to zpět v mnoha kategoriích filtrování.

Pomocí rozhraní API moderování OpenAI můžete explicitně zkontrolovat veškerý obsah, který může potenciálně škodlivý obsah obsahovat.

Za druhé můžete použít Azure AI Content Safety k usnadnění moderování textu, moderování obrázků, detekci rizik jailbreaku a detekci chráněných materiálů. To kombinuje nastavení portálu, konfiguraci a vytváření sestav s kódem, který můžete přidat do aplikace a identifikovat škodlivý obsah.

Konečné aspekty, které můžou ovlivnit rozhodnutí o návrhu aplikace

Pochopení tokenizace, cen, kontextových oken a implementace programových vylepšení pro vylepšení prostředí generování textu uživatelů ovlivňuje způsob návrhu systému generující umělé inteligence. Tady je krátký seznam věcí, které je potřeba vzít v úvahu, a další poznatky z tohoto článku, které ovlivňují rozhodnutí o návrhu vaší aplikace:

  • Vyhodnoťte nutnost používat nejnovější model AI s ohledem na náklady. Méně nákladné modely můžou stačit pro potřeby vaší aplikace, které vyrovnává výkon s rozpočtovými omezeními.
  • Zvažte optimalizaci délky kontextového okna pro správu nákladů, aniž by to výrazně ovlivnilo uživatelské prostředí. Oříznutí nepotřebných částí konverzace může snížit poplatky za zpracování při zachování kvalitních interakcí.
  • Vyhodnoťte, jak tokenizace a členitost vašich vstupů a výstupů ovlivňují výkon. Pochopení toho, jak zvolený LLM zpracovává tokenizaci, vám může pomoct optimalizovat efektivitu volání rozhraní API, což může snížit náklady a zlepšit dobu odezvy.

Pokud chcete začít experimentovat s vytvářením řešení generující umělé inteligence okamžitě, doporučujeme se podívat na začínáme s chatem pomocí vlastní ukázky dat pro Python. K dispozici jsou také verze tohoto kurzu v .NET, Javě a JavaScriptu.