ChatGpt di OpenAI.com è un po’ l’argomento principale degli ultimi mesi , tutti abbiamo provato ad usarlo e stiamo pensando a come utilizzarlo in casi reali. Proprio alla luce di queste considerazioni la prima domanda che ci siamo fatta è “ma riuscirò ad usarlo all’interno di un’applicazione Domino?”
La risposta è Si , si può fare : lo stiamo investigando in questi giorni ed i primi risultati sono positivi ; vero che a volte dalla teoria alla pratica si scoprono sempre sorprese e quindi l’ultima parola non è mai detta ma qui mi sento ottimista. LotusScript può interrogare ChatGpt e riceverne la risposta.
OpenAi ha rilasciato delle API per connettersi a ChatGpt ma, almeno per il momento, sono limitate a Python e node.js . In aggiunta diverse communities hanno già pubblicato librerie di codice per connettersi a CatGpt da altri linguaggi. E’ difficile pensare che qualcosa del genere verrà mai realizzato per LotusScript .
Però andando a vedere come sono realizzate le chiamate e provando a sperimentare sul playground di ChatGpt si capiscono i meccanismi che stanno alla base delle chiamate verso ChatGpt .
La prima cosa necessaria, a prescindere dal codice usato, è la chiave API per l’autenticazione : questa si ottiene registrandosi sul sito e poi andando nei dettagli del proprio account alla voce ApiKeys
E’ una stringa di 51 caratteri che dovrà poi essere passata ad ogni chiamata.
A questo punto ho iniziato a costruire un primo prototipo in LotusScript , le parte principali sono due:
- La classe NotesHTTPRequest per inviare la richiesta e ottenere la risposta
- La costruzione del Json da inviare e poi il parse del Json di ritorno
Per la NotesHttpRequest c’è poco da dire , solo ricordatevi che la API key va gestita come header della richiesta.
Per la parte Json ci sono ovviamente varie possibilità per costruirlo e poi per farne il parse, ovviamente l’importante è seguire le regole di ChatGpt : anche qui usando il playground si può facilmente capire come costruirlo, che parametri passare e come.
Un esempio tipico è questo :
{ "model": "text-davinci-003", "prompt": "inserire qui la domanda.", "temperature": 0, "max_tokens": 100, "top_p": 1, "frequency_penalty": 0, "presence_penalty": 0, "stop": ["\n"] }
Anche per fare il parse della risposta ci sono diverse possibilità, si può utilizzare la classe NotesJSONNavigator in LotusScript oppure una librerie già presenti in rete come questa https://www.openntf.org/main.nsf/project.xsp?r=project/JSON+LotusScript+Classes in OpenNtf.
Alla fine di tutto quello che ho ottenuto è una form in cui inserire la domanda con un pulsante che la invia, fa il parse della risposta e scrive la risposta stessa in un campo sottostante, il tutto utilizzando solo LotusScript:
Aggiungo una curiosità : fra le domande cho ho fatto a ChatGpt ho chiesto se conosce LotusScript (con risposta affermativa) e poi ho domandato se poteva scrivermi il codice LotusScript per inviare richieste a ChatGpt . Anche qui la risposta è stata affermativa ma il codice che mi ha fornito aveva parecchi errori.
Ho risposto facendo notare i vari errori e mi sono state proposte delle correzioni che erano ugualmente errate . Da quanto ho capito al momento CathGpt non “impara” dai propri errori , quindi è possibile che rifacendogli le stesse domande si ottenagno ancora gli stessi errori.
Hi,
it’s very interesting, do you have an example-database to download?
Christian
Hi Christian, sorry, not ready yet: I’m still developing it and it’s just a prototype to understand how it works
Can you provide an example of setting the API Key in the NotesHTTPRequest header?
Hi Brian, here it is:
apiKey = "1234567890000191991"
Set request = session.CreateHTTPRequest()
Call request.SetHeaderField("Authorization", "Bearer " + apiKey)
Hi Fabio,
here can you find our template: https://atnotes.de/index.php/topic,63742.msg405688.html#msg405688
This database contains the Script-Library ChatGPT. This script library delivers the core functions to request the Chat GPT API with minimalistic code in the Notes-Client or Web-Browser. Its primary purpose is to get you introduced faster into the API – it delivers core functions and can be extended and adjusted anytime.