Una rivoluzione silenziosa che può cambiare la nostra vita con l’intelligenza artificiale. Questi possono essere i plug-in di ChatGpt, un po’ come sono state le app dell’app store dell’iPhone per il mondo smartphone.
Mentre continua il dibattito sull’intelligenza dell’intelligenza artificiale, e a quale intelligenza vada il primato tra ChatGPT, Google Bard e molti altri Large Language Model si perde un po’ di vista l’impatto che queste tecnologie possono avere nel mondo reale a prescindere dall’interfaccia di chat a cui cerchiamo sempre più spesso di delegare (o per meglio dire scaricare) i nostri compiti più tediosi.
In fondo un Large Language Model altro non è che un grande modello linguistico il cui primo scopo è quello di comprendere in una qualche misura il linguaggio, possibilmente più linguaggi, ed abbiamo imparato ad apprezzare che conosca non solo linguaggi “umani” ma anche i linguaggi di programmazione e scripting.
Troppo poco spazio è dedicato alla comprensione di come queste tecnologie possano integrarsi in altre tecnologie, ma è difficile per ora immaginare una AI che impari tutta la conoscenza del mondo e solo quella verificata, è quindi indispensabile trovare meccanismi per fornire conoscenze, possibilmente esatte per mitigare la natura stocastica del processo generativo del testo, a queste intelligenze artificiali.
OpenAI spariglia le carte con i plugin
Ancora una volta OpenAI spariglia il gioco e sul suo blog annuncia in sordina, oltre ad un rilevante abbassamento dei prezzi, una funzione che generalizza la funzione dei plug-in recentemente rilasciata ai sottoscrittori del livello Plus di ChatGPT all’uso delle API. È quindi ora possibile istruire mediante le API l’intelligenza artificiale a chiamare API della propria organizzazione che svolgono elaborazione dati e compiono azioni su richiesta dell’AI. Ho già avuto modo di commentare il mio stupore nel realizzare come si scrivono plugins per ChatGPT, ma questo ulteriore passo sconvolge ancora una volta il panorama e ridefinisce le regole del gioco, anche su temi caldi come, ad esempio, il trattamento dei dati personali. Cerchiamo quindi di approfondire brevemente questo nuovo meccanismo per poi capirne gli impatti e le potenzialità che sono sicuramente degne di nota da un punto di vista filosofico e di architettura dei sistemi.
Invocare funzioni esterne attraverso una API Web
Tra le principali novità del nuovo aggiornamento di OpenAI troviamo la possibilità di istruire sia GPT-3.5 che GPT-4 (entrambi rilasciati in modelli aggiornati) ad invocare funzioni esterne attraverso una API Web. In questo modo diviene possibile effettuare elaborazioni nei propri sistemi, o accedere a servizi esterni, e restituire gli elementi che poi GPT utilizzerà per sintetizzare una risposta in linguaggio naturale.
Per apprezzare questa novità è necessaria una breve digressione per comprendere come normalmente le architetture software vengono estese utilizzando variazioni dell’Adapter pattern che consente, potendo affidarsi ad un’interfaccia (ovverosia un insieme di chiamate con nomi e argomenti il cui significato è condiviso) per invocare delle funzioni che possono essere quindi sostituite cambiando il comportamento del software senza doverlo necessariamente modificare. Basti pensare ai famigerati driver delle stampanti che consentono ad un’applicazione di stampare senza dover conoscere e supportare tutte le stampanti esistenti.
Anche a livello applicativo i driver sono importanti, basti pensare ai driver ODBC che per oltre vent’anni hanno consentito ad applicazioni di accedere DBMS differenti senza dover essere riscritte.
Un componente COM su Windows, ad esempio, deve implementare l’interfaccia IUnknown i cui metodi sono evidenziati in figura e consentono di interrogarlo per capire quali interfacce supporti e come gestire la memoria mediante le funzioni AddRef e Release.
Nell’arco di oltre trent’anni il software si è evoluto ed oggi le API si invocano mediante chiamate Web, e si passano valori espressi in notazione JSON o XML, ma la sostanza resta la stessa: per poter invocare una API se ne deve conoscere la definizione e tutti i dettagli dell’invocazione.
Non può non essere quindi sorprendente la seguente chiamata a GPT:
In questo caso informiamo che GPT debba considerare se invocare una o più funzioni descritte nella sezione functions e che contengono il nome (get_current_weather) della funzione, una descrizione in linguaggio naturale della sua funzionalità, ed uno schema dei parametri che si attende per essere invocata (in questo caso la location e l’unità di misura desiderata.
Non vi sono specifiche da seguire, sintassi da implementare, o specifici nomi da prevedere affinché il software possa invocare la funzione, in questo caso l’AI impara la funzione dalla sua descrizione in linguaggio naturale e “capisce” quali argomenti fornire per la sua invocazione. Sebbene sappiamo che GPT scriva interi programmi (anche se non sempre interamente corretti), stupisce comunque che capisca autonomamente gli argomenti e li invochi correttamente. Sicuramente i plugins di ChatGPT hanno dimostrato che l’approccio funzioni.
Nell’esempio vediamo come la descrizione delle funzioni disponibili sia parte del messaggio che contiene le informazioni della chat, e l’utente (lo si evince dal ruolo) è interessato a sapere com’è il tempo a Boston e quindi GPT ci informa che è necessario invocare la nostra funzione con i parametri da lei stimati:
È il nostro codice ad invocare quindi la funzione utilizzando gli argomenti suggeriti dalla AI ed allegare alla successiva richiesta il risultato della sua esecuzione:
Possiamo osservare come il terzo messaggio ha come role function e come content il valore restituito dal servizio meteo:
{“role”: “function”, “name”: “get_current_weather”, “content”: “{\”temperature\”: “22”, \”unit\”: \”celsius\”, \”description\”: \”Sunny\”}”}
Ecco quindi che l’AI ci restituirà un contenuto testuale che fa uso dei dati restituiti dal servizio:
Gli aspetti salienti di questa interazione
Gli aspetti salienti di questa interazione sono:
- La decisione se avvalersi della funzione esterna è discrezionale di GPT e quindi non è deterministica (anche se molto probabile quando necessaria)
- La funzione è opaca per l’AI: i dati elaborati non sono disponibile per l’intelligenza artificiale, né devono essere trasmessi, se quindi il risultato contiene un’aggregazione di dati il singolo dato resterà sconosciuto all’AI (una buona notizia in termini di privacy)
- Il risultato potrebbe essere soggetto ad ulteriore “valutazione” da parte dell’AI nella produzione del testo finale, ad esempio la funzione potrebbe restituire una tabella di valori e l’AI potrebbe individuare i valori migliori nella tabella.
Le funzioni invocate possono compiere qualsiasi azione, possono ad esempio inviare email o azionare dispositivi, le linee guida dello sviluppo mettono quindi in guardia il programmatore raccomandando l’adozione di conferme esplicite prima di eseguire azioni che possano portare a conseguenze indesiderate.
Le altre novità OpenAi
Insieme alle funzioni OpenAI ha annunciato altre novità sicuramente interessanti: alcune riguardano l’abbassamento dei costi di alcuni modelli (e di conseguenza una maggiore applicabilità in scenari che prevedono grandi volumi di token da analizzare e generare). È sicuramente benvenuta l’estensione a 16 mila token per il modello GPT-3.5 dai quattromila attuali: grazie a questo incremento è possibile fornire più informazioni nel prompt e quindi ottenere risposte che usino più informazioni di contesto da parte del modello.
Un nuovo modo di aggregare il software
La capacità introdotta da OpenAI per l’invocazione di funzioni esterne è sicuramente degna di nota e destinata a ridefinire, almeno in parte, alcuni concetti di aggregazione di software. Nei sistemi basati su driver è il software che usa il driver a decidere, in modo deterministico, le funzioni da chiamare fornendo garanzie sulle sequenze di invocazione. Ora il software in autonomia decide se è opportuno o meno chiamare una funzione, e se opportuno generare gli argomenti in base alla propria conoscenza e al contesto e analizzare i risultati ottenuti.
Si tratta di una strada alternativa a quella di fornire solo conoscenza testuale alle AI e fornire contenuti in maniera esatta e deterministica (come ad esempio l’interrogazione ad un database).
In questo nuovo scenario il modello LLM non assolve più l’intera elaborazione ma si limita ad interagire in linguaggio naturale e appoggiarsi a funzioni messe a disposizione per ottenere le informazioni necessarie a produrre una risposta. Si tratta sicuramente di un interessante mix di sistemi non deterministici e sistemi più tradizionali, mix che aprirà nuove strade magari consentendoci di superare il dibattito sulla conoscenza appresa da questi modelli e sul suo grado di completezza.
Conclusioni
Sicuramente si tratta di una strada interessante da percorrere per chi vuole introdurre queste tecnologie in produzione riducendo anche l’esposizione dei propri dati all’esterno (anche se da marzo la politica di OpenAI prevede che i dati passati attraverso le API non possano essere usati per l’addestramento del modello).
Vedremo se questa nuova funzione semplificherà l’introduzione dell’AI in sistemi reali e non semplicemente in chat più o meno intelligenti.