{"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":"2025-07-04T12:01:31","modified_gmt":"2025-07-04T10:01:31","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) 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>&nbsp;<\/div>\n<div>NOTA: dalla release <strong>2023.02.09<\/strong> se il file il cui percorso viene passato nel parametro FileName \u00e8 un&#8217;immagine in formato JPG o PNG, viene utilizzato il modello <strong>GPT-4o Vision<\/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>\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<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) 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>2023.02.09<\/strong> all&#8217;interno della stringa contenuta nel parametro Domanda 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\/#ipt_kb_toc_25841_89\">ImageToBase64<\/a>. In quel caso, verr\u00e0 utilizzato il modello <strong>GPT-4o Vision<\/strong> per rispondere alla domanda. 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) 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<p>A partire dalla release <strong>2023.02.10<\/strong> \u00e8 disponibile una ulteriore primitiva per l&#8217;utilizzo dell&#8217;Intelligenza Artificiale Generativa (GPT) con la <a href=\"https:\/\/help.qualiware.it\/qw-help\/codriver-intelligenza-artificiale-generativa-conversazionale\/#ipt_kb_toc_36269_1\">tecnologia RAG<\/a> per utilizzare i documenti archiviati in QualiWare.<\/p>\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) 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<p>&nbsp;<\/p>\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) 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&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":14,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/30732\/revisions"}],"predecessor-version":[{"id":37918,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/30732\/revisions\/37918"}],"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}]}}