Come chiamare Hugging Face AI da un database Oracle utilizzando JavaScript

'Chiamare Hugging Face AI da un database Oracle con JavaScript'

In questo articolo, ti mostrerò come creare rapidamente un’app completamente gratuita utilizzando un programma JavaScript che viene eseguito all’interno del database Oracle gratuito e chiama Hugging Face AI, i cui risultati vengono memorizzati nel database e possono quindi essere accessibili utilizzando SQL, JSON, REST o qualsiasi altro linguaggio. Tutto il codice sorgente è disponibile qui.

Un flusso comune delle applicazioni in generale e delle applicazioni AI in modo specifico prevede che un’app chiami un servizio AI e quindi memorizzi le informazioni nel database dove possono essere recuperate e elaborate ulteriormente (ad esempio, utilizzando OML) e/o analizzate e interrogate in seguito.

Eseguendo il comando direttamente dal database stesso, i dati vengono memorizzati immediatamente e sono quindi più affidabili poiché sono in processo e non richiedono una chiamata di rete aggiuntiva per la persistenza. Inoltre, avendo la logica (e persino il codice) residente nel database, è possibile sfruttare implicitamente ed inherentemente l’alta disponibilità, la gestione, l’osservabilità, ecc. del potere del database Oracle.

Questa è una capacità unica del database Oracle in quanto include Java e, come vedremo in questo blog, i motori di runtime JavaScript all’interno del database stesso.

Hugging Face sviluppa strumenti per la creazione di applicazioni utilizzando l’apprendimento automatico. È particolarmente noto per la sua libreria transformers creata per applicazioni di elaborazione del linguaggio naturale e per la sua piattaforma che consente agli utenti di condividere modelli di apprendimento automatico e set di dati. È diventato estremamente popolare negli ultimi anni.

In breve, faremo quanto segue:

  1. Creare un account e selezionare un modello.
  2. Creare il database Oracle e un utente del database.
  3. Aggiungere un wallet con un certificato per consentire chiamate HTTPS.
  4. Creare una tabella.
  5. Eseguire un breve programma JavaScript nel database per effettuare una chiamata al modello Hugging Face AI e memorizzare i risultati nella tabella.
  6. Eventualmente interrogare questi risultati utilizzando SQL, JSON, REST, ecc.

Configurazione dell’account Hugging Face e del modello AI

Vai su https://huggingface.co e Registrati. Vai al tuo Profilo e clicca sul pulsante Impostazioni.

Clicca su Token di accesso, crea un token e copia il suo valore per usarlo successivamente.

Clicca su Modelli e seleziona un modello. In questo caso, selezioneremo un modello nella sezione Elaborazione del linguaggio naturale per Risposta alle domande.

Seleziona un modello (magari uno dei più popolari), osserva le informazioni nella Scheda del modello a sinistra e quindi seleziona il menu a discesa Deploy sulla destra.

Seleziona Inference API e quindi seleziona l’opzione JavaScript per visualizzare un frammento di codice di esempio per chiamare il modello.

Configurazione del database Oracle

Puoi utilizzare qualsiasi versione del database Oracle dalla versione 21c in poi. In cloud, puoi utilizzare il database autonomo Oracle sempre gratuito (che è anche bello perché puoi esporlo tramite Internet e renderlo davvero disponibile a livello globale/online in un paio di minuti) oppure puoi utilizzare la versione gratuita Oracle 23c dove puoi semplicemente installare o utilizzare un’immagine del contenitore in locale. O naturalmente, potremmo utilizzare la versione locale per lo sviluppo e il cloud per la produzione, ecc. e entrambe queste opzioni sono molto veloci da configurare.

Opzione del database autonomo Oracle sempre gratuito

Puoi andare qui per configurare un database autonomo Oracle Always Free in cloud. I promemoria sono molto intuitivi. Basta selezionare Autonomous Transaction Processing nel menu del database Oracle come mostrato di seguito e quindi fare clic sul pulsante Crea database autonomo. Puoi prendere tutti i valori predefiniti e semplicemente fornire una password per l’utente amministratore.

Opzione del database Oracle gratuita

Puoi andare qui per configurare l’Oracle Database Free 23c.

L’utilizzo dell’immagine del contenitore è molto semplice. Puoi semplicemente eseguire la riga di comando qui sotto, sostituendo -e ORACLE_PASSWORD=Welcome12345 con una password a tua scelta e sostituendo -v oracle-volume:/somedirectory con una posizione della directory (o omettendola del tutto se desideri solo un database in memoria). Nota il parametro --add-host docker.for.mac.host.internal:host-gateway che consente le chiamate fuori dal contenitore. Questa è l’impostazione per i Mac e sarà diversa se viene eseguita su un sistema operativo diverso.

docker pull 
container-registry.oracle.com/database/free:latest; docker run --add-host docker.for.mac.host.internal:host-gateway -e ORACLE_PASSWORD=Welcome12345 -v oracle-volume:/somedirectory container-registry.oracle.com/database/free:latest

Configurazione di SQLcl (o Database Actions) e Connessione

Se stai utilizzando un database cloud, puoi lavorare con SQL e JavaScript facendo clic su Database Actions e poi su SQL nella console OCI per gestire il database cloud.

Puoi anche installare SQLcl per gestire uno dei database/opzioni menzionati utilizzando i seguenti passaggi:

  1. Scarica ed installa da questo indirizzo . Questo fornirà un eseguibile [SQLcl_INSTALL_DIR]/bin/sql che utilizzeremo per amministrare il database. Per comodità, puoi aggiungere [SQLcl_INSTALL_DIR]/bin al tuo PATH.

  2. Esegui il login sostituendo [SQLcl_INSTALL_DIR] con la posizione del tuo SQLcl e sostituendo Welcome12345 con quello fornito come ORACLE_PASSWORD quando hai creato il database.

Ecco un esempio quando si utilizza una installazione locale (ad esempio, immagine del contenitore Oracle Database Free):

Ecco un esempio quando si utilizza un database cloud (ad esempio, Oracle Always Free Autonomous):

Crea un Portafoglio

Crea un portafoglio per contenere il certificato per le chiamate SSL/HTTPS fatte da JavaScript in esecuzione nel database a Hugging Face.

Stiamo per creare il PEM per il certificato SSL dell’API di Hugging Face, memorizzarlo in un portafoglio, caricare il portafoglio (in particolare il file ewallet.p12) nel database e istruire il database a usarlo per le chiamate HTTPS. In particolare, istruiremo il pacchetto UTL_HTTP mappato/utilizzato dal comando fetch di JavaScript nel database Oracle ad utilizzarlo per le chiamate HTTPS.

1. Prima di tutto, ottieni il certificato SSL per Hugging Face (api-infeerence.hugging.face.co:443) e salvalo in un file PEM utilizzando il seguente comando.

2. Esegui i seguenti comandi al prompt di SQLcl per creare un portafoglio, aggiungere il PEM ad esso e verificare mostrando i risultati. L’argomento -cert punta al file PEM che hai appena creato sopra.

3. Ora hai una directory del portafoglio che contiene un file ewallet.p12 che contiene il certificato API di Hugging Face (pem). Se non l’hai già fatto, apri una nuova finestra di terminale, clona o scarica i repositori src (collegati all’inizio di questo articolo), cd nella root (directory huggingface-javascript-oracle), e copia il file ewallet.p12 nella directory src/main/resources. In altre parole:

4. Torna al terminale SQLcl e esegui/installa il file sql/writefile.sql dai repositori src.

5. Questo installerà la stored procedure write_file che chiameremo da una piccola utility Java che caricherà il nostro ewallet.p12 nel database per l’uso nelle chiamate HTTPS. Nella finestra del terminale dei src repos (sempre nella root (huggingface-javascript-oracle) directory), esegui il seguente comando, sostituendo i valori di connessione al database come appropriato. Ad esempio, nel caso del database dell’immagine del contenitore Oracle Free:

Dovresti vedere un output come HuggingFaceFromOracleDatabaseApplication ewallet.p12 wallet uploaded to DATA_DUMP_DIR .

6. Torna alla finestra del terminale SQLcl e esegui il seguente comando per ottenere la posizione di DATA_DUMP_DIR dove il file ewallet.p12 è stato caricato.

Dovresti vedere un output come il seguente.

7. sql/create_aijs_acl.sql istruirà il database (pacchetto UTL_HTTP) ad utilizzare il certificato nel ewallet.p12 per effettuare chiamate HTTPS all’host menzionato per il principale aijs . Sostituisci i due valori wallet_path in questo file con quello restituito dalla query precedente /dba_directories e sostituisci il valore [WALLET_PASSWORD].

wallet_path => 'file:/opt/oracle/admin/FREE/dpdump/FB9997ED60890BBDE0536402000AF33F',
[...]
'file:/opt/oracle/admin/FREE/dpdump/FB9997ED60890BBDE0536402000AF33F', '[WALLET_PASSWORD]'

8. Ora eseguire i seguenti file SQL per creare l’utente aijs, i suoi privilegi necessari e gli ACL (nota che questi possono essere ulteriormente rafforzati per una maggiore sicurezza).

9. Ora connettiti all’utente e crea una tabella per memorizzare i risultati della chiamata a Hugging Face.

Ora tutto è pronto per essere eseguito.

Esegui l’applicazione e gestisci i risultati

Infine, esegui la query HuggingFace dal codice JavaScript nel database:

Quindi, controlla i risultati JSON memorizzati nella tabella facendo una query SQL.

Osservando il codice che abbiamo appena eseguito, possiamo vedere lo snippet JavaScript:

Parametri utili e informazioni di debug per Hugging Face possono essere trovati nella documentazione.

I risultati possono ora essere interrogati, analizzati, ecc. utilizzando SQL o JSON (in modo simultaneo, grazie alla nuova funzionalità di dualità JSON), REST o persino l’API di MongoDB.

Oracle Database è il database perfetto per l’IA per una serie di motivi, in particolare perché è un database vettoriale con capacità come le seguenti già disponibili oggi:

  • Tipi di dati nativi per la rappresentazione e lo storage vettoriale: RAW, BLOB, JSON
  • Archivio di colonne in memoria per memorizzare e cercare i vettori di embedding con kernel SIMD per prestazioni straordinarie
  • Framework di indicizzazione estensibile per creare indici specifici del modello di dati (ad esempio, testo, spaziale)
  • API di machine learning native di Oracle: modellazione, classificazione, punteggio, clustering, ecc.
  • DML, caricamento parallelo, partizionamento, compressione avanzata, query parallela, RAC, sharding, ecc.

È anche possibile chiamare Oracle OCI AI e altri servizi dall’interno del database Oracle.

Conclusioni

L’articolo ha esaminato come chiamare le API di Hugging Face dall’interno del database Oracle utilizzando JavaScript, dimostrando così una potente combinazione di funzionalità perfettamente adatta a una vasta gamma di soluzioni di intelligenza artificiale e amichevole per gli sviluppatori JavaScript.

Altri articoli correlati a JavaScript nel database, in generale, al MultiLingual Engine (MLE) che lo rende possibile, ecc. possono essere trovati nei post di Martin Bach e in questo post sull’importazione di moduli JavaScript ES in 23c.

Attendo con interesse eventuali commenti o domande che potresti avere e apprezzo davvero il tempo dedicato alla lettura.