La tecnologia AI ha fatto progressi significativi ed è diventata uno strumento importante in grado di automatizzare il nostro flusso di lavoro. Nel nostro post precedente, abbiamo parlato della macro ONLYOFFICE che può generare testi utilizzando l’API OpenAI. In questo post, ti mostreremo una macro che popola un foglio di calcolo con i dati ottenuti da OpenAI.
L’ultima volta ci siamo collegati all’API di OpenAI tramite la piattaforma RapidAPI. È un modo rapido e conveniente per mediare le richieste di recupero. Tuttavia, il piano base offre solo 100 richieste al mese. Stavolta, facciamo una prova e creeremo il nostro server Node.js Express. Utilizzerà la libreria OpenAI per servire le richieste API direttamente al modello linguistico appropriato. Ci consentirà inoltre di aggirare gli errori CORS quando effettuiamo una richiesta di recupero da un browser..
Nota! Effettuare richieste direttamente a OpenAI è disponibile solo registrando un account OpenAI e acquisendo una chiave API personale.
Innanzitutto, creiamo una nuova cartella per il nostro server e impostiamo un nuovo progetto Node.js eseguendo il comando:
$ npm init -y
Poi installiamo le dipendenze:
Per installarli, esegui il comandonpm instal nel terminale:
$ npm install express $ npm install openai $ npm install dotenv --save $ npm install cors
Successivamente, creiamo il file .env. Memorizzeremo lì le nostre chiavi API:
OPEN_AI_API_KEY="<YourOpenAIkey" SECOND_API_KEY="YourAPIkey"
Il parametro OPEN_AI_API_KEY contiene la chiave API ottenuta da OpenAI e il parametro SECOND_API_KEY è la chiave API per il nostro server. Lo incorporeremo nella richiesta di recupero in arrivo per le misure di sicurezza.
Poi inizializziamo i pacchetti installati nel file index.js:
const express = require('express'); const cors = require('cors'); const { Configuration, OpenAIApi } = require('openai'); require('dotenv').config(); const app = express(); const openai = new OpenAIApi(configuration); app.use(cors()); app.use(express.json());
Una richiesta di successo a OpenAI deve includere la chiave API OpenAI. Per fare ciò, estraiamo questa chiave API dal file .env e la memorizziamo nella variabile di configurazione:
const configuration = new Configuration({ apiKey: process.env.OPEN_AI_API_KEY, });
Quindi aggiungiamo un post route da cui invieremo una richiesta a OpenAI:
app.post('/completion', async (req, res) => { }
Vogliamo anche implementare la nostra chiave API per le misure di sicurezza. Questa seconda chiave API dovrebbe essere inclusa in una richiesta di recupero. A tale proposito, il nostro server deve controllare la richiesta di recupero in entrata e convalidare la chiave API inclusa. Per ottenere ciò, aggiungiamo il seguente codice al nostro percorso:
app.post('/completion', async (req, res) => { const requestApiKey = req.body.apiKey; if (!requestApiKey) { res.status(400).send({ error: "Error: API Key is missing." }); return; } if (requestApiKey !== process.env.SECOND_API_KEY) { res.status(401).send({ error: "Error: API Key is incorrect." }); return; }
Se la chiave API è corretta, inviamo una richiesta a OpenAI:
const completion = await openai.createCompletion({ model: 'text-davinci-003', prompt: req.body.prompt, temperature: 0, max_tokens: 300, }); res.json(completion.data.choices[0].text);
Infine, abbiamo configurato il nostro server per l’ascolto sulla porta 3000:
app.listen(3000, () => { console.log('Server running on port 3000'); });
L’intero codice index.js è il seguente:
const express = require('express'); const cors = require('cors'); const { Configuration, OpenAIApi } = require('openai'); require('dotenv').config(); const app = express(); const configuration = new Configuration({ apiKey: process.env.OPEN_AI_API_KEY, }); const openai = new OpenAIApi(configuration); app.use(cors()); app.use(express.json()); app.post('/completion', async (req, res) => { const requestApiKey = req.body.apiKey; if (!requestApiKey) { res.status(400).send({ error: "Error: API Key is missing." }); return; } if (requestApiKey !== process.env.SECOND_API_KEY) { res.status(401).send({ error: "Error: API Key is incorrect." }); return; } const completion = await openai.createCompletion({ model: 'text-davinci-003', prompt: req.body.prompt, temperature: 0, max_tokens: 300, }); res.json(completion.data.choices[0].text); }); app.listen(3000, () => { console.log('Server running on port 3000'); });
Per prima cosa, facciamo una richiesta di recupero al nostro server:
fetch('http://<your_server_address>/completion', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ prompt: 'List the 10 wealthiest countries in the world. Provide GPT figures', apiKey: '<YourAPIkey>' }) })
Abbiamo specificato i valori prompt e apiKey nel corpo della richiesta. Tieni presente che questi parametri differiranno a seconda dei dati che desideri ricevere e della chiave API del tuo server.
Successivamente, analizziamo la risposta dati JSON:
.then(response => response.json())
Suddividiamo il testo della risposta per riga in un array di stringhe e scegliamo come target il foglio di calcolo attivo:
.then(data => { var arrAllRows = data.split(/\r?\n|\r/); var wSheet = Api.GetActiveSheet()
Successivamente, creiamo un ciclo nidificato che itera righe e sulle colonne del foglio di calcolo, utilizzando la funzione split(). Usiamo il metodo SetValue per popolare ogni cella con i dati della risposta e tagliarla di spazi bianchi:
var i = 0; var j = 0; for (var singleRow = 0; singleRow < arrAllRows.length; singleRow++) { var rowCells = arrAllRows[singleRow].split('-'); for (var rowCell = 0; rowCell < rowCells.length; rowCell++) { wSheet.GetCells(i,j).SetValue(rowCells[rowCell].trim()); j = j + 1; } i = i + 1; j = 1; }
L’intero codice della macro è il seguente:
(function() { fetch('http://<your_server_address>/completion', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ prompt: 'List the 10 wealthiest countries in the world. Provide GPT figures', apiKey: 'dfhgsd63456efgdfhjikhfzf435332fdhd' }) }) .then(response => response.json()) .then(data => { var arrAllRows = data.split(/\r?\n|\r/); var wSheet = Api.GetActiveSheet(); var i = 0; var j = 0; for (var singleRow = 0; singleRow < arrAllRows.length; singleRow++) { var rowCells = arrAllRows[singleRow].split('-'); for (var rowCell = 0; rowCell < rowCells.length; rowCell++) { wSheet.GetCells(i,j).SetValue(rowCells[rowCell].trim()); j = j + 1; } i = i + 1; j = 1; } }); })();
Ora apriamo l’editor del foglio di calcolo ed eseguiamo la nostra macro!
Speriamo che utilizzerai i consigli visualizzati in questo post del blog e renderai il tuo flusso di lavoro più efficiente. Ti invitiamo di utilizzare i nostri vari metodi API e a incorporarli nelle tue attività quotidiane di routine.
Se hai domande o idee da condividere, sentiti libero di lasciare commenti o contattarci. Siamo aperti alle tue idee e vorremmo collaborare con te. Buona fortuna per le tue esplorazioni!
This website uses cookies. By continuing to browse the website you agree to our privacy policy.
our privacy policy