Boost 4D s OpenAI!

Automaticky přeloženo z Deepl

Umělá inteligence rychle narušuje náš každodenní život, a to nejen jako vývojáři. Většina z vás, ne-li všichni, již slyšela o ChatGPT od OpenAI. Tento příspěvek se zabývá důkazem konceptu vytvořeným pomocí Qodly Studio v praktickém případě použití: jak využít umělou inteligenci k vytváření věrohodných a realistických datových sad pro vaše aplikace. Jinými slovy: jak rychle naplnit vaši aplikaci daty, abyste ji mohli otestovat nebo předvést. Připravte se!

Kdo je kdo

ChatGPT je varianta modelu GPT (Generative Pre-trained Transformer), která byla vyladěna pro porozumění přirozenému jazyku a jeho generování v konverzačním kontextu. Je navržen tak, aby se zapojil do textových konverzací s uživateli, poskytoval odpovědi podobné lidským a generoval souvislý a kontextově relevantní text. ChatGPT lze použít pro širokou škálu aplikací, včetně chatbotů, virtuálních asistentů, zákaznické podpory a dalších, kde je vyžadována interakce s uživateli prostřednictvím přirozeného jazyka.

OpenAI API je programovací rozhraní, které umožňuje vývojářům přistupovat k možnostem ChatGPT a dalších modelů poskytovaných společností OpenAI a využívat je. Funguje jako most mezi modelem a aplikacemi vývojářů a umožňuje jim odesílat textové výzvy a přijímat odpovědi generované modelem.

Co je pro mě připraveno?

Vzhledem k tomu, že se jedná o Rest API, je poměrně snadné jej používat s 4D, což si ukážeme na zajímavém případu použití. Předpokládejme totiž, že pracujete na zcela nové aplikaci. Navrhnete si strukturu: datové třídy, atributy a vztahy. Navrhnete své obrazovky a transakce, a to buď prostřednictvím obrazovek pro stolní počítače, nebo webových formulářů Qodly. Co vám teď chybí? Samozřejmě data!

Ne vždy máte připravený soubor csv nebo json k importu, ani čas na shromažďování a čištění příslušné datové sady. V tom vám může pomoci umělá inteligence. V této ukázce konceptu vám ukážeme, jaké by pro vás jako vývojáře mohlo být jednoduché, ale užitečné a praktické využití AI.

Představte si, že byste mohli jednoduše říct „dejte mi francouzská křestní jména“ nebo „dejte mi typické komentáře k timesheetům“ a podle toho by se vaše databáze naplnila. Podívejte se na video níže a uvidíte další příklady, jak vytvářet užitečná data pomocí aplikace vytvořené pomocí Qodly Studio.

Začínáte být zvědaví? Kód ukázky můžete získat zde (minimálně 4D v20 R2):

4D, Qodly a OpenAI

Neváhejte si s ním pohrát, vylepšit ho nebo přizpůsobit svým případům. A nezapomeňte přispět!

JAK TO FUNGUJE?

Ve skutečnosti je to docela jednoduché, nic náročného.

Kromě výpisu datových tříd a jejich atributů – což je v generickém programování 4D zcela běžné – bije srdce této ukázky kolem dotazování na OpenAI API.

To se provádí ve speciální uživatelské třídě, ve funkci nazvané queryOpenAI().

Function queryOpenAI() : Text
  var $url : Text
  var $headers; $data; $opts : Object
  var $request : 4D.HTTPRequest
	
  $url:="https://api.openai.com/v1/chat/completions"
  $headers:=New object("Authorization"; "Bearer "+This.apiKey; "Content-Type"; "application/json")
	
  $data:={}
  $data.model:="gpt-3.5-turbo"
  $data.messages:=This.messages.copy()
  $data.messages.push({role: "user"; content: This.userPrompt})
	
  $opts:={method: "POST"; headers: $headers; body: $data}
	
  $request:=4D.HTTPRequest.new($url; $opts)
  $request.wait()
	
  This.fetchStatusCode:=$request.response.status
	
  If (This.fetchStatusCode=200)
    return $request.response.body.choices[0].message.content
  Else 
    return ""
  End if 

Pokud jste zvyklí používat třídu 4D.HTTPRequest, nemá pro vás tato funkce žádné tajemství (všimněte si, že po registraci musíte použít vlastní klíč API ). Nemáte žádné tajemství? Kromě vlastností This.messages a This.userPrompt, které slouží k dotazování OpenAI jejich umístěním do těla požadavku.

No a obě tyto vlastnosti jsou místem, kde začíná hrát roli vaše kreativita. Podívejte se na konstruktor třídy, abyste získali odpověď:

This.systemPrompt:="You are data generator. "
This.systemPrompt+="You will be provided with a description values to generate; and your task is to generate as many values as requested. "
This.systemPrompt+="Generated values must be separated by the character separator ¶. "
This.systemPrompt+="The list must start with 2 characters: ¶¶. "
This.systemPrompt+="The list must end with 2 characters: ¶¶. "
	
This.messages:=[]
This.messages.push({role: "system"; content: This.systemPrompt})
This.messages.push({role: "user"; content: "Generate a list of exactly 10 values for \"firstname\" of type Text."})
This.messages.push({role: "assistant"; content: "¶¶Alice¶Oliver¶Elsa¶Liam¶Maja¶Noah¶Ella¶Lucas¶Wilma¶Hugo¶¶"})
This.messages.push({role: "user"; content: "Generate a list of exactly 10 values for \"amount\" of type number."})
This.messages.push({role: "assistant"; content: "¶¶35¶64797¶101246¶3¶119¶4477¶647779¶357769¶94¶77¶¶"})
This.messages.push({role: "user"; content: "Generate a list of exactly 5 values for \"birthdate\" of type date."})
This.messages.push({role: "assistant"; content: "¶¶1980-10-05¶2035-05-02¶1995-12-15¶2022-10-14¶2011-05-23¶¶"})
	
This.userPrompt:="Generate a list of exactly "+String($quantity)+" values for \""+String($attributeName)+"\" of type "+This.attributeType+"."
This.userPrompt+=($remark#"") ? (" Remark: "+$remark) : ""
If ($attributeType="date")
  This.userPrompt+=". Date format: YYYY-MM-DD"
End if

Tuto sadu řádků můžete vidět jako 3 části:

  1. Systémová výzva: zde nastavujete kontext, celkový obrázek. Ukazujete modelu směr, kterým chcete, aby se vydal. V tomto případě napíšu nějaké požadavky.
  2. Předběžná konverzace: Poté můžete napodobit konverzaci mezi uživatelem (vámi) a asistentem (umělou inteligencí). Nezapomeňte, že OpenAI není „nic víc“ než generativní model určený k poskytování odpovědí koherentních s jejich kontextem. Tím, že sami napíšete začátek diskuse, zvýšíte své šance na získání stabilní odpovědi. Zde jsem nasimuloval 3 otázky a odpovědi, abych zvýšil své šance získat vždy dobře naformátovanou odpověď, a to v požadovaném množství.
  3. Výzva uživatele: toto je skutečná otázka. Replika 3 dříve simulovaných otázek, ale tentokrát je výzva inicializována tím, co uživatel nastavil v ukázkovém uživatelském rozhraní.

Jak bylo popsáno výše, systémová výzva, předběžná konverzace a uživatelská výzva jsou všechny posunuty do kolekce $data, a odeslány jako tělo HTTPRequest do OpenAI.

Zbytek je jen klasické rozdělení řetězce.

Vezměte si

Při sledování ukázky a vlastním hraní si s ní uvědomíte, že dotazování OpenAI může trvat dlouho. Pokud máte podezření na výpadek, můžete se podívat na adresu https://status.openai.com/. Jeden aspekt ovlivňuje dobu odezvy hodně: množství tokenů v odpovědi API. Čím delší je odpověď, tím pomaleji ji dostanete. V mnoha případech je však pouhé ponechání stroje v chodu, byť jen na chvíli, rychlejší než shromažďování, čištění a importování příslušné sady dat.

Pro tuto ukázku existuje prostor pro optimalizaci, a to v mnoha ohledech. Rozhraní OpenAI API nabízí režim streamování, který by mohl zlepšit vaše zkušenosti tím, že umožní, aby se generování záznamů v databázi spustilo mnohem rychleji než v současnosti.

Doufáme, že vás takový příklad bude inspirovat! Nahlédněte do reference rozhraní OpenAI API, je plná zajímavých funkcí a dalších případů použití. Neváhejte přispět a poslat nám návrhy!

Avatar
• Vedoucí produktového týmu 4D •Mathieu se připojil ke 4D v roce 2020 jako vedoucí produktového týmu. Jeho tým se skládá z Product Ownerů, zástupců uživatelů ve 4D. Spolupracují ruku v ruce s týmem inženýrů a jejich role zahrnuje stanovení priorit, rozsahu a ověřování, zda nové funkce budou odpovídat očekáváním uživatelů 4D. Mathieu dříve působil jako projektový ředitel a týmový manažer v různých předních odvětvích IT divizí – automobilového průmyslu, bezpečnosti, reklamy, specializující se na mezinárodní kontexty a cloudově orientované služby.