{"id":30732,"date":"2025-04-19T15:05:47","date_gmt":"2025-04-19T13:05:47","guid":{"rendered":"https:\/\/help.qualiware.it\/qw-help\/?p=30732"},"modified":"2026-05-11T11:46:08","modified_gmt":"2026-05-11T09:46:08","slug":"primitive-per-lutilizzo-dellintelligenza-artificiale-generativa-gpt","status":"publish","type":"post","link":"https:\/\/help.qualiware.it\/qw-help\/primitive-per-lutilizzo-dellintelligenza-artificiale-generativa-gpt\/","title":{"rendered":"Primitive per l&#8217;utilizzo dell&#8217;Intelligenza Artificiale Generativa (GPT)"},"content":{"rendered":"<p>A partire dalla release <strong>2023.00.11<\/strong> sono disponibili 2 primitive per l&#8217;utilizzo dell&#8217;Intelligenza Artificiale Generativa (GPT):<\/p>\n<h3 id=\"OpenAIExtractData\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>OpenAIExtractData<\/strong><\/span><\/h3>\n<p><code>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<\/code><\/p>\n<p>Questa funzione consente di estrarre i metadati contenuti in un file specificandone la descrizione e avendo di ritorno un oggetto JSON.<\/p>\n<div class=\"\"><em>Parametri:<\/em><\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">QWSess &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Oggetto sessione (es. form.GetSession())<\/span><\/div>\n<div>FileName -&gt; Percorso del file da elaborare<\/div>\n<div>DataDescription -&gt; Descrizione dei dati da estrarre. Ogni dato deve essere riportato su una riga, con il nome del campo seguito da &#8220;:&#8221; e dalla descrizione in linguaggio naturale.<\/div>\n<div>ErrMsg -&gt; Eventuale messaggio d&#8217;errore<\/div>\n<\/div>\n<div>&nbsp;<\/div>\n<div>Ritorna: un oggetto JSON contenente i dati estratti.<\/div>\n<div>\n<p>Di seguito un esempio di DataDescription.<\/p>\n<pre>destinatario: indirizzo dove \u00e8 stato fornito il servizio\r\nimporto: importo della fattura senza valuta\r\nServizio: metti 'Gas' se \u00e8 un servizio di fornitura gas, 'Acqua' se \u00e8 un servizio di fornitura d'acqua, 'Energia elettrica' se \u00e8 un servizio di fornitura di energia elettrica\r\ndatainizio: periodo iniziale di fatturazione\r\ndatafine: periodo finale di fatturazione\r\nfornitore: societ\u00e0 emittente (non deve essere STEFAL s.r.l.)\r\num: unit\u00e0 di misura dei consumi\r\nconsumi: totale consumi fatturati senza unit\u00e0 di misura \r\ndatafattura: data fattura\r\nnumerofattura: numero della fattura<\/pre>\n<\/div>\n<div>I valori dei dati di ritorno possono essere recuperati con un codice come il seguente, dove &#8220;json&#8221; \u00e8 l&#8217;oggetto restituito dalla primitiva<\/div>\n<div>&nbsp;<\/div>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">form.FindControl(\"datainizio\").value=CType(json(\"datainizio\"), Newtonsoft.Json.Linq.JValue).Value<\/pre>\n<div>NOTA: dalla release <strong>2025.00.25<\/strong> se il file il cui percorso viene passato nel parametro FileName \u00e8 un&#8217;immagine in formato JPG o PNG, o un PDF, viene inviato direttamente al modello come file, e <strong>non \u00e8 necessario fare preventivamente l&#8217;OCR<\/strong>. Questo pu\u00f2 consentire una maggiore precisione di riconoscimento dei valori presenti in moduli particolarmente complessi, e, anche, l&#8217;estrazione di informazioni scritte a mano.<\/div>\n<div>Sempre dalla release <strong>2025.00.25<\/strong> , il modello utilizzato \u00e8 di default &#8220;GPT 5 Mini&#8221; con reasoning effort &#8220;medium&#8221;, che consente un&#8217;elevata precisione nel riconoscimento. E&#8217; comunque possibile cambiare il modello di default utilizzato attraverso l&#8217;opzione &#8220;Intelligenza Artificiale&#8221; &#8211;&gt; &#8220;Modello OpenAI per estrazione dati&#8221; della <a href=\"https:\/\/help.qualiware.it\/qw-help\/00-console-di-amministrazione\/\">Console di Amministrazione<\/a>. E&#8217; anche possibile specificare differenti modello, reasoning effort e verbosity attraverso gli appositi parametri opzionali nella chiamata.<\/div>\n<h3 id=\"OpenAIExtractData\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>OpenAIChatAsk<\/strong><\/span><\/h3>\n<p><code>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<\/code><\/p>\n<p>Questa funzione consente di inviare una domanda al motore di Intelligenza Artificiale OpenAI GPT e di ricevere la risposta.<\/p>\n<div class=\"\"><em>Parametri:<\/em><\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">QWSess &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Oggetto sessione (es. form.GetSession())<\/span><\/div>\n<div>Question-&gt; Domanda<\/div>\n<div>Answer-&gt; Risposta<\/div>\n<div>ErrMsg -&gt; Eventuale messaggio d&#8217;errore<\/div>\n<div>Format -&gt; 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)<\/div>\n<div>PrevMessages -&gt; Non usare<\/div>\n<div>OutputFilePath -&gt; Percorso del file Excel (disponibile dalla release 2025.00.11)<\/div>\n<\/div>\n<div>&nbsp;<\/div>\n<div>Ritorna: <em>true<\/em> se l&#8217;operazione ha avuto successo, <em>false&nbsp;<\/em>altrimenti<\/div>\n<\/div>\n<div>&nbsp;<\/div>\n<div>NOTE:<\/div>\n<div>1) se si desidera che venga ritornato un JSON, inserire la parola &#8220;JSON&#8221; nella domanda oppure passare a &#8220;3&#8221; il parametro &#8220;Format&#8221;.<\/div>\n<div>2) dalla release <strong>2025.00.36<\/strong> all&#8217;interno della stringa contenuta nel parametro &#8220;Domanda&#8221; pu\u00f2 essere passata un&#8217;immagine codificata in formato base64 utilizzando la primitiva <a href=\"https:\/\/help.qualiware.it\/qw-help\/primitive-di-sistema\/#ImageToBase64\">ImageToBase64<\/a> oppure un file PDF sempre codificato in base64 attraverso la primitiva <a href=\"https:\/\/help.qualiware.it\/qw-help\/primitive-di-sistema\/#FileToBase64\">FileToBase64<\/a>, in questo caso premettendo la stringa &#8220;data:application\/pdf;base64,&#8221;. Non \u00e8 necessario effettuare preventivamente l&#8217;OCR. Questo pu\u00f2 consentire una maggiore precisione di riconoscimento dei valori presenti in moduli particolarmente complessi, e, anche, l&#8217;estrazione di informazioni scritte a mano.<\/div>\n<div>3) Il modello utilizzato \u00e8 di default &#8220;GPT 4.1 nano&#8221;. E&#8217; possibile cambiare il modello di default utilizzato attraverso l&#8217;opzione &#8220;Intelligenza Artificiale&#8221; &#8211;&gt; &#8220;Modello OpenAI&#8221; della <a href=\"https:\/\/help.qualiware.it\/qw-help\/00-console-di-amministrazione\/\">Console di Amministrazione<\/a>. E&#8217; anche possibile specificare differenti modello, reasoning effort e verbosity attraverso gli appositi parametri opzionali nella chiamata.<\/div>\n<div>4) dalla release <strong>2025.00.<\/strong><strong>04<\/strong>, se si desidera che il documento venga trasformato in Excel \u00e8 sufficiente inserire la parola &#8220;Excel&#8221; nella domanda, oppure passare a &#8220;2&#8221; il parametro Format, e nella risposta vi sar\u00e0 un link per scaricare il file Excel generato. A partire dalla release <strong>2025.00.11<\/strong>, \u00e8 possibile ricevere il percorso del file nel parametro OutputFilePath.<\/div>\n<div>\n<h3 id=\"OpenAIExtractData\"><span style=\"font-family: 'courier new', courier, monospace;\"><strong>OpenAIChatAskRAG<\/strong><\/span><\/h3>\n<p><code> 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<br \/>\n<\/code><\/p>\n<p>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.<\/p>\n<\/div>\n<div>&nbsp;<\/div>\n<div>\n<div class=\"\"><em>Parametri:<\/em><\/div>\n<div class=\"\">\n<div><span class=\"enlighter-text\">QWSess &#8211;<\/span><span class=\"enlighter-g1\">&gt;<\/span><span class=\"enlighter-text\"> Oggetto sessione (es. form.GetSession())<\/span><\/div>\n<div>Question -&gt; Domanda<\/div>\n<div>Categories -&gt; Oggetto DBArray contenente le categorie di documenti e registrazioni <a href=\"https:\/\/help.qualiware.it\/qw-help\/codriver-intelligenza-artificiale-generativa-conversazionale\/#ipt_kb_toc_36269_1\">indicizzate<\/a> da esaminare per determinare la risposta. Per le registrazioni, deve essere utilizzato l&#8217;Id (es. &#8220;MN&#8221; per i &#8220;Moduli Non Conformit\u00e0&#8221;), mentre per le categorie documentali deve essere deve esserne inserito il codice preceduto dalla stringa &#8220;DW|&#8221; (es. &#8220;DW|ASSTK&#8221;). Se viene passato a Nothing vengono considerate tutte le categorie indicizzate.&nbsp;<\/div>\n<div>FromDate -&gt; Data dalla quale considerare i documenti. Se passata a Nothing vengono considerati tutti i documenti.<\/div>\n<div>ExcludeDraft -&gt; Se passato a <em>true<\/em> vengono esclusi i documenti in bozza.<\/div>\n<div>ExcludeObsolete -&gt; Se passato a <em>true<\/em> vengono esclusi i documenti obsoleti.<\/div>\n<div>Answer -&gt; Risposta<\/div>\n<div>Docs -&gt; 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&#8217;ordine: IdDoc, CodDod, descrizione del documento, rilevanza (valore da 0 a 1).<\/div>\n<div>ErrMsg -&gt; Eventuale messaggio d&#8217;errore<\/div>\n<\/div>\n<div>&nbsp;<\/div>\n<div>Ritorna: <em>true<\/em> se l&#8217;operazione ha avuto successo, <em>false&nbsp;<\/em>altrimenti.<\/div>\n<\/div>\n<div>&nbsp;<\/div>\n<div>Esempio:<\/div>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Dim Categories as New DBArray(\"DW|\"+form.GetCategoryID())\r\nDim Docs as DBArray\r\nDim Errmsg as string\r\n\r\nOpenAIChatAskRAG(form.GetSession(),form.FindControl(\"Domanda\").Text, Categories, nothing, false, true, form.FindControl(\"Risposta\").Text, Docs, Errmsg)\r\n\r\nif not empty(errmsg)\r\n    form.alert(errmsg)\r\nEnd If<\/pre>\n<div>NOTA:<\/div>\n<div>Il modello utilizzato \u00e8 di default &#8220;GPT 4.1 nano&#8221;. E&#8217; possibile cambiare il modello di default utilizzato attraverso l&#8217;opzione &#8220;Intelligenza Artificiale&#8221; &#8211;&gt; &#8220;Modello OpenAI&#8221; della <a href=\"https:\/\/help.qualiware.it\/qw-help\/00-console-di-amministrazione\/\">Console di Amministrazione<\/a>. E&#8217; anche possibile specificare differenti modello e reasoning effort attraverso gli appositi parametri opzionali nella chiamata.<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A partire dalla release 2023.00.11 sono disponibili 2 primitive per l&#8217;utilizzo dell&#8217;Intelligenza Artificiale Generativa (GPT): OpenAIExtractData 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=&#8221;medium&#8221;, Optional Byval&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"ngg_post_thumbnail":0,"footnotes":""},"categories":[86,65],"tags":[81],"acf":[],"_links":{"self":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/30732"}],"collection":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/comments?post=30732"}],"version-history":[{"count":17,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/30732\/revisions"}],"predecessor-version":[{"id":38491,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/30732\/revisions\/38491"}],"wp:attachment":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/media?parent=30732"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/categories?post=30732"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/tags?post=30732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}