Primitive per l’utilizzo dell’Intelligenza Artificiale Generativa (GPT)

A partire dalla release 2023.00.11 sono disponibili 2 primitive per l’utilizzo dell’Intelligenza Artificiale Generativa (GPT):

OpenAIExtractData

Function OpenAIExtractData(Byval QWSess as QWSession, Byval FileName As String, Byval DataDescription As String, ByRef ErrMsg As string) as Newtonsoft.Json.Linq.JObject

Questa funzione consente di estrarre i metadati contenuti in un file specificandone la descrizione e avendo di ritorno un oggetto JSON.

Parametri:
QWSess –> Oggetto sessione (es. form.GetSession())
FileName -> Percorso del file da elaborare
DataDescription -> Descrizione dei dati da estrarre. Ogni dato deve essere riportato su una riga, con il nome del campo seguito da “:” e dalla descrizione in linguaggio naturale.
ErrMsg -> Eventuale messaggio d’errore
 
Ritorna: un oggetto JSON contenente i dati estratti.
 
NOTA: dalla release 2023.02.09 se il file il cui percorso viene passato nel parametro FileName è un’immagine in formato JPG o PNG, viene utilizzato il modello GPT-4o Vision. Questo può consentire una maggiore precisione di riconoscimento dei valori presenti in moduli particolarmente complessi, e, anche, l’estrazione di informazioni scritte a mano.

Di seguito un esempio di DataDescription.

destinatario: indirizzo dove è stato fornito il servizio
importo: importo della fattura senza valuta
Servizio: metti 'Gas' se è un servizio di fornitura gas, 'Acqua' se è un servizio di fornitura d'acqua, 'Energia elettrica' se è un servizio di fornitura di energia elettrica
datainizio: periodo iniziale di fatturazione
datafine: periodo finale di fatturazione
fornitore: società emittente (non deve essere STEFAL s.r.l.)
um: unità di misura dei consumi
consumi: totale consumi fatturati senza unità di misura 
datafattura: data fattura
numerofattura: numero della fattura
I valori dei dati di ritorno possono essere recuperati con un codice come il seguente, dove “json” è l’oggetto restituito dalla primitiva
 
form.FindControl("datainizio").value=CType(json("datainizio"), Newtonsoft.Json.Linq.JValue).Value

OpenAIChatAsk

Function OpenAIChatAsk(Byval QWSess as QWSession, Byval Question As String, ByRef Answer As string, ByRef ErrMsg As string) as Boolean

Questa funzione consente di inviare una domanda al motore di Intelligenza Artificiale OpenAI GPT e di ricevere la risposta.

Parametri:
QWSess –> Oggetto sessione (es. form.GetSession())
Question-> Domanda
Answer-> Risposta
ErrMsg -> Eventuale messaggio d’errore
 
Ritorna: true se l’operazione ha avuto successo, false altrimenti
 
NOTA: dalla release 2023.02.09 all’interno della stringa contenuta nel parametro Domanda può essere passata un’immagine codificata in formato base64 utilizzando la primitiva ImageToBase64. In quel caso, verrà utilizzato il modello GPT-4o Vision per rispondere alla domanda. Questo può consentire una maggiore precisione di riconoscimento dei valori presenti in moduli particolarmente complessi, e, anche, l’estrazione di informazioni scritte a mano.

A partire dalla release 2023.02.10 è disponibile una ulteriore primitiva per l’utilizzo dell’Intelligenza Artificiale Generativa (GPT) con la tecnologia RAG per utilizzare i documenti archiviati in QualiWare.

OpenAIChatAskRAG

Public Function OpenAIChatAskRAG(Byval QWSess as QWSession, Byval Question As String, Byval Categories As DBArray, ByVal FromDate As DateTime, Byval ExcludeDraft As Boolean, ByVal ExcludeObsolete As Boolean, ByRef Answer As String, ByRef Docs As DBArray, ByRef ErrMsg As String) as Boolean

Questa funzione consente di inviare una domanda al motore di Intelligenza Artificiale OpenAI GPT utilizzando i documenti archiviati in QualiWare e selezionati con la tecnologia RAG, e di ricevere la risposta.

 
Parametri:
QWSess –> Oggetto sessione (es. form.GetSession())
Question -> Domanda
Categories -> Oggetto DBArray contenente le categorie di documenti e registrazioni indicizzate da esaminare per determinare la risposta. Per le registrazioni, deve essere utilizzato l’Id (es. “MN” per i “Moduli Non Conformità”), mentre per le categorie documentali deve essere deve esserne inserito il codice preceduto dalla stringa “DW|” (es. “DW|ASSTK”). Se viene passato a Nothing vengono considerate tutte le categorie indicizzate. 
FromDate -> Data dalla quale considerare i documenti. Se passata a Nothing vengono considerati tutti i documenti.
ExcludeDraft -> Se passato a true vengono esclusi i documenti in bozza.
ExcludeObsolete -> Se passato a true vengono esclusi i documenti obsoleti.
Answer -> Risposta
Docs -> Oggetto DBArray contenente i documenti rilevanti che hanno consentito di generare la risposta. Gli elementi sono a loro volta oggetti DBArray, i cui elementi sono, nell’ordine: IdDoc, CodDod, descrizione del documento, rilevanza (valore da 0 a 1).
ErrMsg -> Eventuale messaggio d’errore
 
Ritorna: true se l’operazione ha avuto successo, false altrimenti.
 
Esempio:
Dim Categories as New DBArray("DW|"+form.GetCategoryID())
Dim Docs as DBArray
Dim Errmsg as string

OpenAIChatAskRAG(form.GetSession(),form.FindControl("Domanda").Text, Categories, nothing, false, true, form.FindControl("Risposta").Text, Docs, Errmsg)

if not empty(errmsg)
    form.alert(errmsg)
End If