A partire dalla release 2023.00.11 sono disponibili 2 primitive per l’utilizzo dell’Intelligenza Artificiale Generativa (GPT):
Function OpenAIExtractData(Byval QWSess as QWSession, Byval FileName As String, Byval DataDescription As String, ByRef ErrMsg As string, Optional ByRef actualQuestion As String=Nothing, Optional ByRef actualAnswer As String=Nothing, Optional ByVal model As String=nothing, Optional ByVal reasoning_effort As String="medium", Optional Byval verbosity As String="low") 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.
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
NOTA: dalla release 2025.00.25 se il file il cui percorso viene passato nel parametro FileName è un’immagine in formato JPG o PNG, o un PDF, viene inviato direttamente al modello come file, e non è necessario fare preventivamente l’OCR. Questo può consentire una maggiore precisione di riconoscimento dei valori presenti in moduli particolarmente complessi, e, anche, l’estrazione di informazioni scritte a mano.
Sempre dalla release
2025.00.25 , il modello utilizzato è di default “GPT 5 Mini” con reasoning effort “medium”, che consente un’elevata precisione nel riconoscimento. E’ comunque possibile cambiare il modello di default utilizzato attraverso l’opzione “Intelligenza Artificiale” –> “Modello OpenAI per estrazione dati” della
Console di Amministrazione. E’ anche possibile specificare differenti modello, reasoning effort e verbosity attraverso gli appositi parametri opzionali nella chiamata.
Function OpenAIChatAsk(Byval QWSess as QWSession, Byval Question As String, ByRef Answer As string, ByRef ErrMsg As string, Optional ByVal Format As Integer=0, Optional ByVal PrevMessages As DBArray=nothing, Optional ByRef OutputFilePath As String=Nothing, Optional ByVal model As String = Nothing, Optional ByVal reasoning_effort As String = "minimal", Optional ByVal verbosity As String = "low") 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
Format -> formato della risposta. 0=determinato sulla base del contenuto della domanda (default), 1=Testo, 2=Excel, 3=JSON, 4=Codice sorgente (disponibile dalla release 2025.00.04)
PrevMessages -> Non usare
OutputFilePath -> Percorso del file Excel (disponibile dalla release 2025.00.11)
Ritorna: true se l’operazione ha avuto successo, false altrimenti
NOTE:
1) se si desidera che venga ritornato un JSON, inserire la parola “JSON” nella domanda oppure passare a “3” il parametro “Format”.
2) dalla release
2025.00.36 all’interno della stringa contenuta nel parametro “Domanda” può essere passata un’immagine codificata in formato base64 utilizzando la primitiva
ImageToBase64 oppure un file PDF sempre codificato in base64 attraverso la primitiva
FileToBase64, in questo caso premettendo la stringa “data:application/pdf;base64,”. Non è necessario effettuare preventivamente l’OCR. Questo può consentire una maggiore precisione di riconoscimento dei valori presenti in moduli particolarmente complessi, e, anche, l’estrazione di informazioni scritte a mano.
3) Il modello utilizzato è di default “GPT 4.1 nano”. E’ possibile cambiare il modello di default utilizzato attraverso l’opzione “Intelligenza Artificiale” –> “Modello OpenAI” della
Console di Amministrazione. E’ anche possibile specificare differenti modello, reasoning effort e verbosity attraverso gli appositi parametri opzionali nella chiamata.
4) dalla release 2025.00.04, se si desidera che il documento venga trasformato in Excel è sufficiente inserire la parola “Excel” nella domanda, oppure passare a “2” il parametro Format, e nella risposta vi sarà un link per scaricare il file Excel generato. A partire dalla release 2025.00.11, è possibile ricevere il percorso del file nel parametro OutputFilePath.
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, Optional ByVal model As String=nothing, Optional ByVal reasoning_effort As String="minimal") 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
NOTA:
Il modello utilizzato è di default “GPT 4.1 nano”. E’ possibile cambiare il modello di default utilizzato attraverso l’opzione “Intelligenza Artificiale” –> “Modello OpenAI” della
Console di Amministrazione. E’ anche possibile specificare differenti modello e reasoning effort attraverso gli appositi parametri opzionali nella chiamata.