Sdílet prostřednictvím


Klíčové koncepty a aspekty vytváření řešení pro generování AI

Velké jazykové modely (LLM) jsou úžasné, ale mají omezení. Jako vývojář musíte těmto omezením rozumět, vědět, čeho jsou LLM schopné "out of the box," a jak je upravit, abyste získali nejlepší výsledky pro generativní AI řešení. Tento článek popisuje několik problémů a omezujících faktorů LLM. Vysvětluje běžné způsoby, jak překonat výzvy a převzít kontrolu nad procesem generování obsahu bez ohledu na typ generovaných funkcí umělé inteligence, které do své aplikace sestavíte.

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

Následující seznam shrnuje nejdůležitější výzvy nebo omezení, o které byste měli vědět při práci s LLM:

  • : Vzhledem k vysokým nákladům na trénování LLM je tělo znalostí LLM omezené na to, na co bylo vytrénováno v určitém okamžiku. Bez pluginů nebo jiných prostředků nemá LLM přístup k aktuálním informacím ani k soukromým datům.

  • halucinace: LLM používá statistické pravděpodobnosti a trochu náhody k vygenerování informací. Mechanismy jsou zavedeny tak, aby vygenerované odpovědi odpovídaly záměru člověka v otázkách, které jsou kladeny, a informace, na které byl LLM natrénován, ale je možné, že LLM vytvoří odpovědi, které nejsou přesné.

  • transparentnost: Také kvůli způsobu trénování LLM už nemá přístup k základním znalostem, na které byl trénován. I kdyby se tak stalo, není zaručeno, že informace byly pravdivé a opodstatněné. Neexistuje také žádný krok ověření, který by zajistil, že vygenerovaná odpověď je přesná.

  • žádné znalosti specifické pro doménu: Podobně jako v případě, kdy máte soukromé informace, jako jsou interní firemní dokumenty, LLM nebyl trénován na těchto informacích. Nemá žádné znalosti o datech specifických 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, jakými způsoby lze doplnit zdroje dat LLM.

Kde LLM získávají své 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, který znázorňuje tři různé typy generování načítání: generování načítání, generování rozšířeného načítání a generování zaměřené na načítání

  • generovánínačítání (ROG): Tento model používají tradiční LLM. Model generuje odpovědi výhradně na základě znalostí, na které byl trénován, aniž by během procesu generování přistupoval k externím informacím nebo je načítal. Znalosti modelu jsou statické a 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.

  • generování rozšířeného načítání (RAG): Kombinuje možnosti generování LLM se schopností 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. Pak použije informace k vytvoření odpovědi. Tento přístup umožňuje modelu poskytovat přesnější a up-toinformace o datu, než poskytuje, pomocí předem natrénovaných znalostí. Případy použití zahrnují kontrolu faktů, odpovědi na otázky založené na datech v reálném čase nebo odpovědi na otázky založené na soukromých datech specifických pro doménu.

  • Generování zaměřené na vyhledávání (Retrieval-Centric Generation): Klade ještě větší důraz na obsah získaný zvenčí a často strukturuje odpovědi na základě informací 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 kombinaci metod založených na vyhledávání a generování, kde může být kladen velký důraz na informace získané z vyhledávání oproti vlastním generačním schopnostem 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 ROG je ChatGPT. Naproti tomu Copilot (prostřednictvím Bingu) rozšiřuje LLM pomocí externích zdrojů ze zdrojů zpráv (a poskytnutím odkazů na tyto zdroje).

Na první pohled se RAG a RCG jeví podobně, neboť obě zahrnují integraci externích informací do procesu generování jazyka. Liší se ale v tom, jak upřednostňují a používají načtené informace v procesu generování.

V systému RAG se externí načítání dat používá k rozšíření generačních schopností předem vytré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 systému RAG zůstává generující aspekt jazykového modelu pro odpověď ústřední. Načtená data fungují jako podpůrný prvek ke zvýšení přesnosti nebo hloubky.

Systém RCG klade silnější důraz na načtené informace samotné. V systému RCG jsou načtená data často středem odpovědi a role generativního modelu je především v upřesnění, formátování nebo lehkém vylepšení načteného textu. 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í jak RAG, tak RCG, jsou popsány v článcích o ukládání vektorizovaných reprezentací dokumentů oproti doladění LLM, dva rozšířené přístupy k doplnění znalostí dostupných pro LLM na základě jejich počátečního trénování.

Pochopení rozdílů mezi modely načítání vám může pomoct zvolit správný přístup pro konkrétní aplikace. Pomáhá vyvážit potřebu kreativní syntézy a přesnosti a věrnosti zdrojového materiálu.

Faktory, které ovlivňují fungování odvození

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

Když uživatel chatuje s ChatGPT, návrh uživatelského rozhraní dává uživateli iluzi dlouhotrvající chatovací relace, která udržuje stav během několika výměn mezi uživatelem 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čení) s každou novou výzvou. Jak konverzace roste, posíláte do LLM stále více textu ke zpracování. S každým novým zadáním odešlete všechna předchozí zadání a jejich dokončení. ChatGPT používá kontext celé relace chatu, a ne jenom aktuální výzvu, když vytvoří odpověď na aktuální výzvu. Celá chatovací relace se nazývá kontextové okno.

Kontextové okno má limit délky, který se liší podle verze ChatGPT, se kterou pracujete. Jakákoli část konverzace chatu, která překračuje limit délky kontextového okna, se ignoruje, když ChatGPT vytvoří odpověď na vaši nejnovější výzvu.

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í. Velikost kontextových oken ovlivňuje latenci odpovědi a kolik stojí za zpracování požadavku OpenAI.

Co je limit kontextového okna ChatGPT? To znamená, s kolika slovy může ChatGPT pracovat?

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 podnět a dokončení

Co je tokenizace?

Tokenizace je proces převodu textu do tokenů. 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.

Stránka tokenizátoru OpenAI vysvětluje další informace o tokenizaci. Stránka má dokonce kalkulačku, která ukazuje, jak se věta nebo odstavec rozdělí na tokeny.

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

Stránka OpenAI Tokenizer se také věnuje tiktoken, což je balíček pro Python a JavaScript, který lze použít k programovému odhadu, kolik tokenů je potřeba pro odeslání konkrétní výzvy k 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říklad GPT-3.5, GPT-3.5 Turbo nebo GPT-4) 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 1 milion tokenů".

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

Systémové výzvy vs. výzvy uživatelů

Až do tohoto bodu se diskuze zaměřila výhradně na výzvy uživatelů. Výzva uživatele je typ výzvy, která tvoří výměnu mezi uživatelem a ChatGPT.

OpenAI zavedl systémovou výzvu (označovanou také jako vlastní instrukce ). Systémová výzva je nadsaděná sada instrukcí, které definujete a přidáváte 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 formě haiku není užitečným příkladem, ilustruje myšlenku, že můžete ovlivnit dokončování LLM na výzvu úpravou samotného zadání.

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, nepochybně chcete přidat záruky, 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í podnětu a existuje mnoho technik podnětů, které mohou pomoci. 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ě upravte výzvy uživatele.
  • Implementujte kanál odvozování.
  • Retrieval-Augmented Generace (probíraná v jiných článcích).
  • Vyladění (probírané v jiných článcích)

Programové úpravy uživatelských výzev

Pokud chcete do uživatelské konverzace přidat výzvu k systému, nepoužíváte speciální rozhraní API. Podle potřeby stačí k příkazovému řádku přidat pokyny.

K vylepšení uživatelských výzev ale můžete použít několik technik:

  • Kontextové primace: V rámci domény vytvořte systémové výzvy, které jasně nastaví kontext konverzace. Tento přístup zahrnuje stručný popis nebo sadu instrukcí na začátku každé interakce. Pokyny vedou AI k tomu, aby zůstala v rámci problematické oblasti.
  • ukázkové pokyny: V úvodní výzvě uveďte příklady typů otázek a odpovědí, které jsou relevantní pro vaši doménu. Tento přístup pomáhá umělé inteligenci pochopit, jaký druh odpovědí se má očekávat.

Můžete použít jakoukoli techniku návrhu promptů. Pokud toho můžete dosáhnout programově, můžete vylepšit uživatelskou výzvu jejich jménem.

Omezení tohoto přístupu spočívá v tom, že čím delší je příkaz, tím vyšší jsou náklady na každé volání LLM. I tak je tento přístup pravděpodobně nejlevnějším přístupem, který tento článek popisuje.

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 ucelený proces, který před zobrazením (např. textu nebo obrázku) vyčistí nezpracovaný vstup (například text nebo obrázek) před jeho použitím k provedení primární výzvy (předběžného zpracování) nebo zkontroluje dokončení, aby se zajistilo, že splňuje potřeby uživatele před jeho zobrazením (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 odpovídal očekávanému jazyku domény. Můžete například analyzovat počáteční výzvu, kterou uživatel odešle. Začněte tím, že se zeptáte LLM (modelu strojového učení), jestli má výzva smysl, je-li v mezích toho, co jste ochotni přijmout, jestli je založená na chybném předpokladu, nebo zda je nutné ji přepsat, aby se zabránilo určitým předsudkům. Pokud LLM výzvu analyzuje a najde problémy, můžete udělat další krok. Můžete požádat LLM, aby přeformuloval výzvu a tím potenciálně vylepšil odpověď.

Postprocessing může zahrnovat ověření relevance a správnosti odpovědi pro doménu. Může zahrnovat odebrání nebo označení odpovědí, 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 LLM požádat, aby vyhodnotil odpověď a zjistil, zda skutečně splňuje požadavky, které jste stanovili. Pokud tomu tak není, můžete požádat LLM o úpravu dokončení. Opakujte tyto kroky, 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é ovlivňují rozpočet, výkon a efektivitu softwarového systému.

Informace o konkrétních krocích pro sestavení inference pipeline naleznete v tématu Sestavení pokročilého systému generace rozšířeného načítáním.

Další faktory, které ovlivňují dokončování

Kromě programatické úpravy výzvy, vytvoření kanálu pro inferenci a dalších technik jsou další podrobnosti popsány v Rozšíření rozsáhlého jazykového modelu pomocí generování s použitím rozšířeného načítání a jemného ladění. Parametry můžete také upravit při volání rozhraní API Azure OpenAI.

Pokud chcete zkontrolovat požadované a volitelné parametry, které mohou ovlivnit různé aspekty dokončení, projděte si dokumentaci ke koncovému bodu chatu . Pokud používáte sadu SDK, přečtěte si dokumentaci k sadě SDK pro jazyk, který používáte. Můžete experimentovat s parametry v Playground.

  • Temperature: Řídí náhodnost výstupu, který model generuje. 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.

  • Max Tokens: Řídí maximální délku odpovědi. Nastavení vyššího nebo nižšího limitu může ovlivnit podrobnosti a rozsah generovaného obsahu.

  • Top P (nukleové vzorkování): Používá se s Temperature k řízení náhodnosti odpovědí. Top P omezuje AI, aby při generování každého tokenu zvážila pouze nejvyšší procento hmotnosti pravděpodobnosti (P). Nižší hodnoty vedou k textu, který je více zaměřený a předvídatelnější. Vyšší hodnoty umožňují větší rozmanitost.

  • Frequency Penalty: 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.

  • Presence Penalty: vybízí model, aby do dokončení zavedl nové koncepty a pojmy. Presence Penalty 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í, aby rozhraní API přestalo generovat více tokenů. Store Sequences jsou užitečné pro kontrolu struktury výsledku, například při ukončení textu 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 nasměrování dokončení určitým směrem nebo k potlačení určitého obsahu.

Ochrana Microsoft OpenAI

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

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

Rozhraní API moderování OpenAI můžete použít přímo ke kontrole potenciálně škodlivého obsahu.

Pak 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 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é můžou mít vliv na rozhodnutí o návrhu vaší aplikace:

  • Vyhodnoťte nutnost používat nejnovější model AI s ohledem na náklady. Modely, které jsou levnější, můžou stačit pro potřeby vaší aplikace. Vyvážení výkonu 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čít s chatem pomocí vlastní ukázky dat pro Python. Tento kurz je také k dispozici v .NET, Javaa JavaScript.