Miroslav Holec
Premium

OpenAI a Azure OpenAI - postřehy

Miroslav Holec   19. září 2023

V tomto článku sepisuji mé postřehy ke službám OpenAI a Azure OpenAI service a k různým SDK, které lze pro komunikaci používat. Tento článek není recenze, ale pouze pár postřehů z praxe. Článek se budu snažit občas doplňovat. Upozorňuji, že vše kolem GPT se rychle mění a proto si vždy ověřte, že uvedené informace jsou platné i k aktuálnímu dni.

OpenAI vs Azure OpenAI service

Chcete-li pracovat s modely GPT-3.5 nebo GPT-4, pak si můžete vybrat mezi napojením na OpenAI nebo použitím Azure OpenAI. Já mám stále lepší zkušenosti s OpenAI, přesto se teď snažím dát šanci i službě v rámci Azure. Mé postřehy jsou následující:

  • ceny jsou v obou případech zcela totožné a to pro všechny myslitelné modely

  • novinky do Azure OpenAI jdou vždy s větším zpožděním (např.: nové verze modelů)

  • v Azure jsou velká omezení na počet generovaných tokenů za minutu

  • různé regiony v Azure mají (dvojnásobně) různé limity pro token per minutes

  • žádost o navýšení limitů skrze extra formulář - aktuálně zcela pozastavena

  • dobrý region pro Azure OpenAI service je nyní Switzerland (vyšší limity, přijatelná latence)

  • inicializace komunikace s Azure OpenAI je pomalejší než u OpenAI API (než se to rozjede)

  • generování tokenů je následně s Azure OpenAI rychlejší (po větších blocích)

  • máte-li Azure, je praktické mít i Azure OpenAI na jednom místě a na jedné faktuře

  • Microsoft udělal pro management speciální Azure OpenAI Studio (půl věcí je jinde)

  • oproti OpenAI si lze vygenerovat dva API klíče (které lze dle potřeby rotovat)

  • model GPT-4 v Azure OpenAI má jednoznačně přísnější content policy (občas to bolí)

  • v Azure OpenAI si lze vytvářet vlastní content filtr (možná to vyřeší hyperkorektnost)

  • výše uvedený content filtr je bohužel také na žádost

  • všechny žádosti do Azure OpenAI imho nikdo nečte, protože na nic nemám reakci

Nově zkouším zadávat do žádostí kontakty na lidi z Microsoftu a doufám, že tam mají nastavené nějaké filtry, které žádost prioritizují do stavu "možná se na to někdo podívá".

Původně jsem se Azure OpenAI dost bránil v kombinaci s oficiálním NuGet balíčkem. Nakonec jsem použil jiný, takže alespoň technicky mám kód v excelentní podobě a řeším jen záležitosti na straně providera (kvalita modelů, content-policy, performance).

Knihovny / SDK / NuGet balíčky pro OpenAI / Azure OpenAI

Nyní k samotným knihovnám. Nehodnotím je jako celek, ale spíše z pohledu mého use case. Používám GPT 3.5 turbo a GPT-4 v různém kontextu (8/16/32k). Potřebuji streamovat "písmenko po písmenku" a ideálně se chci mít možnost napojit jak na Azure OpenAI tak i na OpenAI. Další funkce zatím nepotřebuji a moc jsem je nezkoumal.

Na jakýho koně vsadit kartu?

Azure OpenAI

Knihovna od Microsoftu má největší počet stažení oproti všem ostatním, proto ji uvádím na seznamu jako první. Paradoxně je ale stále v beta7, takže počet stažení je spíše alarmující ukázkou toho, že vývojářům je úplně jedno, co používají.

NuGet balíček podporuje Azure OpenAI i OpenAI a budiž mu k dobru, že je napsán proti .NET Standard 2.0. Napsán je ale dost prapodivným způsobem. Pro streamování s využitím IAsyncEnumerable se musím promačkat různými metodami a sestavit konstrukci z dvou await foreach cyklů. Donedávna jsem byl přesvědčen, že tam ani podpora IAsyncEnumerable není (tím se omlouvám za mystifikaci na mých přednáškách). Divné je, že důvod ukončení komunikace je v samostatné vlastnosti, která se tak nějak během komunikace změní, obvykle ještě před tím, než se proiterují všechny výsledky. Takže se mi typicky streamování zastaví v neukončené podobě. Možná jsem to jen nepochopil, což je sám o sobě důvod, proč to používat nechci. Počet bugů na GitHub Issues je děsivý.

OpenAI

S knihovnou jsem měl dobré zkušenosti a mohu ji v zásadě doporučit. Posledních 6 měsíců je ale kód zcela neaktivní a s ohledem na příchozí GPT Instruct lze očekávat - že od knihovny nelze vůbec nic očekávat :) Kolem fine-tuningu je tu jen Files API a celkově mám pocit, že funkčně je knihovna chudší a nebude brzy stačit na pokročilé scénáře, ke kterým se dostávám.

OpenAI-DotNet

V podstatě je to fork výše uvedené knihovny, který působí udržovaněji, ale je upravený naprosto šíleným způsobem. Poměrně logické názvy vlastností a tříd si autor přejmenoval do abstraktních názvů, které se dokonale prolínají s tisíci dalšími věcmi v projektech. Některé třídy jsou zbytečně zapouzdřené, takže jejich inicializace je mimořádně nepohodlná. Na druhou stranu na tom autor pracuje a je tam pár věcí dopsaných (třeba fine tuning jobs). Dávám od toho ale ruce pryč.

Betalgo

Můj aktuální favorit. Umí se napojit na OpenAI i Azure SDK, má velice podobné API jako knihovna OpenAI, ale s některými dobrými myšlenkami kolem sestavování zpráv. Knihovna vznikla už v roce 2021, ale autor ji přepsal a vydal pod novým názvem balíčku s TFM na .NET 7 (což někoho může odradit). Momentálně mi na tom běží textomet.cz a napojený jsem na Azure OpenAI service. Dobrá je i integrace na ServiceProvider a naprosto dobře je tu řešený error handling. Jednoduše v await foreach si lze odchytávat stav každé completion. Chce-li někdo přejít z OpenAI (viz. výše), je migrace jednoduchá. Mezi verzemi se objevují i breaking changes, protože autor občas něco nedomyslí a pak po refaktoringu teče krev. Není to ale zase tak hrozné. Ke knihovně je vydávána i rozšiřující knihovna s utilitkami (nezkoušel jsem).