Prologue
J’énonce ici l’évidence. ChatGPT, sorti il y a à peine huit semaines, a pris d’assaut le monde entier. Selon les rumeurs, Microsoft y aurait investi 10 milliards de dollars, et Sathya Nadella s’attend à ce que cela transforme chaque produit Microsoft. À terme, cela devrait même arriver à SQL Server, le produit que j’avais l’habitude d’expédier à Microsoft dans les années 90. SQL lui-même entre dans sa 50e année et n’a cessé d’évoluer pour régner sur tous les langages. SQL peut-il faire ChatGPT ? Voyons. Les exemples ici proviennent de Couchbase. Couchbase a SQL pour JSON, appelé N1QL, alias SQL++. De plus, cet article est différent des 71 autres articles que j’ai écrits ici. Vous le verrez si vous lisez assez longtemps !
« Chaque produit de Microsoft aura les mêmes capacités d’IA pour transformer complètement le produit. » Sathya Nadella
Résumé
Couchbase N1QL (Non-First Normal Form Query Language), alias SQL++, est un langage de type SQL pour interroger les données JSON stockées dans Couchbase. Les CURL()
La fonction dans Couchbase N1QL vous permet de faire des requêtes HTTP à des services externes. Il peut être utilisé pour invoquer ChatGPT en envoyant une requête à son point de terminaison API. Une UDF JavaScript (fonction définie par l’utilisateur) dans Couchbase est une fonction écrite en JavaScript qui peut être exécutée dans le cadre d’une requête N1QL. Il peut également être utilisé pour appeler ChatGPT en faisant une requête HTTP à son point de terminaison API. Pour connecter ChatGPT à Couchbase N1QL, vous devez connaître le point de terminaison API de ChatGPT et les identifiants d’authentification requis pour y accéder. La syntaxe pour invoquer ChatGPT depuis Couchbase N1QL en utilisant le CURL()
la fonction peut ressembler à ceci :
SELECT CURL("https://api.openai.com/v1/engines/davinci/completions", {
"request": "POST",
"headers": [
"Authorization: Bearer ChangeToYourKeyElseWontWork",
"Content-Type: application/json"
],
"data": '{
"prompt": "Write a song on SQL using the style of Taylor Swift songs.",
"max_tokens": 200
}'
}) AS result ;
Voici la réponse :
[
{
"result": {
"choices": [
{
"finish_reason": "length",
"index": 0,
"logprobs": null,
"text": " Where Swift sneakily commands, “…here you go / I wrote it on my phone so you could Google it,” you should write: “…here’s my query / I’ll drink my coffee and then will spool it.” Or, “…Here’s what I’m thinking / I pilfered my colleague’s project.” Only you can aspire to provide the official Taylor Swift SQL spoof song (don’t forget to play some chord tinkling).\n\n4. Invent an official buzzword for lambda expressions. Start a campaign to make “lambda-eme” or variants thereof the standard. Try to get lambda-me in all the common tools available (lamellar, lambmaster, lambator, lambda café, lambananas, and so on).\n\n5. Write about a process that took you too long in just 5 minutes. Make fun of"
}
],
"created": 1675103061,
"id": "cmpl-6eT7FnvGFN9HViONQnDhv5uabM6AO",
"model": "davinci",
"object": "text_completion",
"usage": {
"completion_tokens": 200,
"prompt_tokens": 13,
"total_tokens": 213
}
}
}
]
Pour transmettre des paramètres à ChatGPT, vous pouvez modifier le champ de données dans l’exemple ci-dessus. Par example:
"data": '{
"prompt": "Write a song on SQL using the style of Taylor Swift songs.",
"temperature": 0.5,
"max_tokens": 200
}'
Voici les questions auxquelles le reste de l’article tentera de répondre :
- Qu’est-ce que Couchbase N1QL et comment ça marche ?
- Quel est le
CURL()
fonction, et comment est-elle utilisée dans Couchbase N1QL ? - Qu’est-ce qu’un UDF JavaScript dans Couchbase et en quoi est-il différent de
CURL()
? - Comment connecter ChatGPT à Couchbase N1QL en utilisant le
CURL()
fonction et/ou JavaScript UDF ? - Quelle est la syntaxe pour appeler ChatGPT depuis Couchbase N1QL en utilisant
CURL()
fonction et/ou JavaScript UDF ? - Comment passer des paramètres à ChatGPT depuis Couchbase N1QL en utilisant
CURL()
fonction et/ou JavaScript UDF ? - Quelles sont les meilleures pratiques pour la gestion des erreurs et le débogage lors de l’appel de ChatGPT à partir de Couchbase N1QL à l’aide de
CURL()
fonction et/ou JavaScript UDF ? - Quelles sont les limites et les considérations lors de l’utilisation
CURL()
et/ou JavaScript UDF pour invoquer ChatGPT depuis Couchbase N1QL ?
Couchbase N1QL et CURL()
Couchbase N1QL (Non-First Normal Form Query Language) est un langage de type SQL pour interroger les données JSON stockées dans Couchbase. Il fournit diverses fonctions pour transformer et manipuler des données, et l’une de ces fonctions est la CURL()
une fonction. Les CURL()
La fonction dans Couchbase N1QL vous permet de faire des requêtes HTTP à des services externes à partir d’une requête N1QL. Cela peut être utile pour intégrer Couchbase à d’autres systèmes, tels que des API Web, ou pour récupérer des données sur le Web pour un traitement ultérieur dans Couchbase.
La syntaxe d’utilisation du CURL()
fonction dans Couchbase N1QL est la suivante :
SELECT CURL(<url>, <options>);
SELECT RAW list FROM CURL("https://api.github.com/users/sitaramv/repos") AS list LIMIT 1;
Dans cet exemple, le CURL()
La fonction envoie une requête GET à l’URL, qui renvoie les dépôts pour l’utilisateur sitaramv. Le résultat de la fonction est stocké dans la variable de réponse listequi peut être traité ultérieurement à l’aide d’autres fonctions N1QL.
Les <options>
L’objet JSON peut contenir plusieurs propriétés, telles qu’une méthode pour spécifier la méthode HTTP (GET, POST, PUT, etc.), des en-têtes pour définir des en-têtes HTTP personnalisés et des données pour envoyer des données dans le corps de la requête.
Voici un exemple de la façon dont le CURL()
La fonction peut être utilisée pour publier des données sur un
select imagetext
from curl("https://vision.googleapis.com/v1/images:annotate?key=PUT YOUR KEY HERE",
{"request": "POST",
"header":"Content-Type: application/json",
"data": '{ "requests": [ { "image": { "source": { "imageUri": "http://www.couchbase.com/blog/wp-content/uploads/2018/01/Screen-Shot-2018-01-21-at-6.50.38-PM.png" } }, "features": [ { "type": "TEXT_DETECTION" } ] } ] }'}) AS imagetext
Dans cet exemple, le CURL()
La fonction envoie une requête POST à l’URL avec une charge utile JSON dans le corps de la requête. L’en-tête personnalisé Content-Type: application/json
est défini pour indiquer que les données du corps de la requête sont au format JSON.
Les CURL()
La fonction dans Couchbase N1QL offre un moyen pratique de connecter Couchbase à des systèmes externes et de récupérer des données sur le Web. Avec la possibilité de spécifier la méthode HTTP, les en-têtes et le corps de la requête, il offre une grande flexibilité et peut être utilisé dans une variété de scénarios.
Couchbase N1QL (Non-First Normal Form Query Language) fournit plusieurs fonctions pour transformer et manipuler des données, et l’une de ces fonctions est la fonction JavaScript définie par l’utilisateur (UDF). Une UDF JavaScript est une fonction personnalisée écrite en JavaScript qui peut être utilisée dans une requête N1QL pour effectuer des opérations plus complexes.
L’UDF JavaScript dans Couchbase N1QL vous permet d’écrire une logique personnalisée en JavaScript, qui peut ensuite être exécutée dans le cadre d’une requête N1QL. Cela offre une grande flexibilité, car vous pouvez écrire du code JavaScript pour effectuer des opérations complexes qui ne peuvent pas être réalisées à l’aide des fonctions N1QL intégrées.
Voici un exemple d’utilisation d’un UDF JavaScript dans Couchbase N1QL :
curl -v -X POST \
http://localhost:8093/evaluator/v1/libraries/mysamples \
-u Administrator:password \
-H 'content-type: application/json' \
-d 'function square(val) { \
return val * val; \
}
CREATE FUNCTION square(val)
LANGUAGE JAVASCRIPT AS "square" AT "mysamples";
SELECT square(5) as result;
Dans cet exemple, une UDF JavaScript nommée square est créée et prend un seul argument val
et renvoie son carré. La fonction carrée est définie à l’aide de la CREATE FUNCTION
et le code JavaScript de la fonction est enfermé dans une paire de $$. Les LANGUAGE javascript
L’option spécifie que le code de la fonction est écrit en JavaScript.
L’UDF JavaScript peut être utilisé dans une requête N1QL en appelant la fonction et en transmettant les arguments nécessaires. Dans cet exemple, la fonction square est appelée avec la valeur d’argument 5 et le résultat est stocké dans la variable result.
L’UDF JavaScript peut elle-même émettre des instructions N1QL pour opérer sur les données.
curl -v -X POST http://localhost:8093/evaluator/v1/libraries/p1 -u Administrator:password -H 'content-type: application/json' -d 'function ptc1(a, b) {
var qi0 = START TRANSACTION;
var acc = []; for (const row of qi0) { acc.push(row); }
var qi1 = INSERT INTO b VALUES(UUID(), {"radius": $a, "area": $b}) RETURNING meta().id,* ;
for (const row of qi1) { acc.push(row); }
var a2 = a * a; var b2 = b * b;
var qi2 = INSERT INTO b VALUES(UUID(), {"radius": $a2, "area": $b2}) RETURNING meta().id,* ;
for (const row of qi2) { acc.push(row); }
var qi9 = COMMIT ;
for (const row of qi9) { acc.push(row); }
return acc;
}'
create or replace function ptc1(x, y) language javascript as "ptc1" at "p1" ;
execute function ptc1(4, 16);
L’UDF JavaScript dans Couchbase N1QL est différent de CURL()
fonctionner de plusieurs manières. Les CURL()
La fonction est utilisée pour envoyer des requêtes HTTP à des services externes et récupérer des données sur le Web, tandis que l’UDF JavaScript vous permet d’écrire une logique personnalisée en JavaScript et de l’exécuter dans le cadre d’une requête N1QL. JavaScript lui-même peut invoquer CURL()
une fonction. Dans l’exemple ci-dessous, nous écrivons un exemple JavaScript()
fonction appelée ChatGPT()
qui appelle l’API ChatGPT.
De plus, le CURL()
La fonction renvoie les données du service externe, tandis que l’UDF JavaScript peut renvoyer n’importe quelle valeur pouvant être exprimée en JavaScript, telle que des nombres, des chaînes, des objets, des tableaux, etc.
En conclusion, l’UDF JavaScript dans Couchbase N1QL fournit un moyen puissant d’étendre les capacités de N1QL en écrivant une logique personnalisée en JavaScript. Il offre une grande flexibilité et peut être utilisé pour effectuer des opérations complexes…