SQL は ChatGPT を実行できますか?答えはYESです!

SQL は ChatGPT を実行できますか?答えはYESです!

ChatGPTは世界中で人気を博しています。今日の質問は、SQL で ChatGPT を実行できるかどうかです。

一緒に見てみましょう。

Couchbase N1QL (SQL++ とも呼ばれる) は、Couchbase に保存されている JSON データをクエリするための SQL のような言語です。

Couchbase N1QL の CURL() 関数は外部サービスに HTTP リクエストを送信するため、ChatGPT の API エンドポイントにリクエストを送信して ChatGPT を呼び出すことができます。

Couchbase の JavaScript UDF は、N1QL クエリの一部として実行できる JavaScript で記述された関数であり、ChatGPT の API エンドポイントに HTTP リクエストを送信して ChatGPT を呼び出すためにも使用できます。

ChatGPT を Couchbase N1QL に接続するには、ChatGPT の API エンドポイントと、それにアクセスするために必要な認証資格情報を知っておく必要があります。

CURL() 関数を使用して Couchbase N1QL から ChatGPT を呼び出す構文は次のとおりです。

 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 ;

応答は次のとおりです。

 [ { "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 } } } ]

ChatGPT にパラメータを渡すには、上記の例のデータ フィールドを変更します。のように:

 "data": '{ "prompt": "Write a song on SQL using the style of Taylor Swift songs.", "temperature": 0.5, "max_tokens": 200 }'

次に、Couchbase N1QL と CURL() について詳しく説明します。

カウチベースN1QL

Couchbase N1QL (Non-First Normal Form Query Language) は、Couchbase に保存されている JSON データをクエリするための SQL のような言語です。 CURL() 関数を含む、データを変換および操作するためのさまざまな関数を提供します。

CURL() 関数

CURL() 関数を使用すると、N1QL クエリから外部サービスに HTTP リクエストを送信できます。これは、Couchbase を他のシステム (Web API など) と統合する場合や、Couchbase でさらに処理するために Web データを取得する場合に便利です。

Couchbase N1QL で CURL() 関数を使用するための構文は次のとおりです。

 SELECT CURL(<url>, <options>); SELECT RAW list FROM CURL("https://api.github.com/users/sitaramv/repos") AS list LIMIT 1;

CURL() 関数は、ユーザー sitaramv のリポジトリを返す URL に GET リクエストを送信します。

関数の結果は応答変数リストに保存され、その後、他の N1QL 関数を使用してさらに処理できます。

<options> オブジェクトには、HTTP リクエスト メソッド (GET、POST、PUT など) を指定するために使用される属性、カスタム HTTP ヘッダー情報を設定するために使用される属性、リクエストで送信されるデータなど、複数の属性を含めることができます。

CURL() 関数を使用してデータを外部サーバーに投稿する方法の例を次に示します。

 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

この例では、CURL() 関数は、リクエスト本文に JSON ペイロードを含む POST リクエストを URL に送信します。

カスタム ヘッダー Content-Type: application/json は、要求されたデータを JSON 形式に設定します。

Couchbase N1QL の CURL() 関数は、Couchbase を外部システムに接続し、Web からデータを取得する便利な方法を提供します。 HTTP メソッド、ヘッダー、リクエスト本文を指定できるため、柔軟性が高く、さまざまなシナリオで使用できます。

Couchbase N1QL の JavaScript UDF を使用すると、N1QL クエリの一部として実行できるカスタム ロジックを記述できます。このように、N1QL の組み込み関数では実現できない複雑な操作を JavaScript コードを記述することで実行できるため、非常に便利です。

JavaScript UDF

Couchbase N1QL で JavaScript UDF を使用する方法の例を次に示します。

 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;

この例では、単一のパラメーター val を受け入れ、その二乗値を返す square という名前の JavaScript UDF を作成します。

square 関数は CREATE FUNCTION ステートメントを使用して定義され、関数の JavaScript コードは $$ のペアで囲まれます。 LANGUAGE javascript オプションは、関数のコードが JavaScript で記述されることを指定します。

JavaScript UDF は、関数を呼び出して必要なパラメータを渡すことで、N1QL クエリで使用できます。この例では、square 関数を呼び出し、パラメータ値 5 を渡し、結果を result 変数に格納します。

JavaScript UDF 自体が N1QL ステートメントを発行してデータを操作できます。

 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; }'

JavaScript UDF と CURL() 関数の違い

Couchbase N1QL の JavaScript UDF は、次の点で CURL() 関数と異なります。

1. CURL() 関数は外部サービスへの HTTP リクエストを行い、Web からデータを取得するために使用されます。一方、JavaScript UDF を使用すると、JavaScript でカスタム ロジックを記述し、それを N1QL クエリの一部として実行できます。

2. JavaScript 自体が CURL() 関数を呼び出すことができます。

さらに、CURL() 関数は外部サービスからデータを返しますが、JavaScript UDF は数値、文字列、オブジェクト、配列など、JavaScript で表現できる任意の値を返すことができます。

要約すると、Couchbase N1QL の JavaScript UDF は非常に強力で、JavaScript でカスタム ロジックを記述することで N1QL の機能を拡張します。柔軟性が高く、組み込みの N1QL 関数では不可能な複雑な操作を実行するために使用できます。

JavaScript UDF と CURL() 関数の使用

Couchbase N1QL から OpenAI の ChatGPT を呼び出すには、CURL() 関数または JavaScript UDF を使用します。 2 つのメソッドには異なる構文があり、以下で簡単に説明します。

CURL() 関数を使用して Couchbase N1QL から ChatGPT を呼び出す構文は次のとおりです。

 SELECT CURL("https://api.openai.com/v1/engines/davinci/completions", { "request": "POST", "headers": [ "Authorization: Bearer ChangeThisToYourKey", "Content-Type: application/json" ], "data": '{ "prompt": "Hello. How are you doing today?", "temperature": 0.9, "max_tokens": 200 }' }) AS result ;

この例では、CURL() 関数は ChatGPT の OpenAI API エンドポイントに POST リクエストを送信します。

headers オプションはコンテンツ タイプを application/json に設定し、data オプションは ChatGPT、温度、生成するトークンの最大数などのヒントを含むリクエスト ペイロードを指定します。

API からの応答は、応答変数に保存されます。

Couchbase N1QL から ChatGPT を呼び出す別の方法は、JavaScript UDF を使用することです。 JavaScript UDF を使用して Couchbase N1QL から ChatGPT を呼び出すための構文は次のとおりです。

 curl -v -X POST http://localhost:8093/evaluator/v1/libraries/cglib -u Administrator:password -d 'function chatGPT3(prompt) { var chaturl = "https://api.openai.com/v1/engines/davinci/completions" dstr = "{\"prompt\": \"" + prompt + "\",\"temperature\": 0.5 , \"max_tokens\": 200}" var options = { "request" : "POST", headers: [ "Authorization: Bearer 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", "Content-Type: application/json" ], "data": dstr }; var query = SELECT CURL($chaturl, $options); var acc = []; for (const row of query) acc.push(row); return acc; }'

cbq シェルで、次の操作を行います。

 DROP FUNCTION chatGPT3; CREATE FUNCTION chatGPT3(prompt) language javascript as "chatGPT3" at "cglib"; select chatGPT3("Write an essay on Lincoln.")

クエリ結果は次のとおりです。

 cbq> select chatGPT3("Write an essay on Lincoln."); { "requestID": "6acb9a20-93f0-41c2-bdc4-fe28107d85a9", "signature": { "$1": "json" }, "results": [ { "$1": [ { "$1": { "choices": [ { "finish_reason": "length", "index": 0, "logprobs": null, "text": "\n\n“Lincoln,” wrote Carl Sandburg, “was a self-made man in the best sense of the word.”\n\nWhat does Sandburg mean by this statement?\n\nWhat advantages did Lincoln have in his youth?\n\nWhat disadvantages did he have?\n\nWhat events from his youth helped to make him a self-made man?\n\nWhat events from his youth helped to make him a self-made man?\n\nWhat events from his youth helped to make him a self-made man?\n\nWhat events from his youth helped to make him a self-made man?\n\nWhat events from his youth helped to make him a self-made man?\n\nWhat events from his youth helped to make him a self-made man?\n\nWhat events from his youth helped to make him a self-made man?\n\nWhat events from his youth helped to make him a self-made man?\n\n" } ], "created": 1675310533, "id": "cmpl-6fL5Zu1MGjNorxBOwyg3H1ODzzjSD", "model": "davinci", "object": "text_completion", "usage": { "completion_tokens": 200, "prompt_tokens": 6, "total_tokens": 206 } } } ] } ], "status": "success", "metrics": { "elapsedTime": "7.179456323s", "executionTime": "7.179347355s", "resultCount": 1, "resultSize": 1537, "serviceLoad": 1 } } cbq>

chatGPTが実際に書き込むのは

"text": "\n\n“Lincoln,” wrote Carl Sandburg, “was a self-made man in the best sense of the word.” What does Sandburg mean by this statement? What advantages did Lincoln have in his youth? What disadvantages did he have? What events from his youth helped to make him a self-made man? What events from his youth helped to make him a self-made man? What events from his youth helped to make him a self-made man? What events from his youth helped to make him a self-made man?

この例では、プロンプト パラメータを受け入れる chatGPT という名前の JavaScript UDF を作成します。その JavaScript コードは、リクエスト ライブラリを使用して、ChatGPT の OpenAI API エンドポイントに POST リクエストを送信します。リクエストのオプションには、URL、メソッド、ヘッダー、リクエスト ペイロードが含まれます。

API 呼び出しを行うと、API からの応答が response 変数に保存されます。次に、UDF は、chatGPT 関数を呼び出して必要なパラメータを渡すことで、N1QL クエリで使用できる応答を返します。

JavaScript UDF と CURL() 関数の制限

CURL() 関数を使用し、JavaScript UDF を介して Couchbase N1QL から ChatGPT を呼び出すと、アプリケーションに多くの利点がもたらされますが、これらのアプローチを使用する場合は、いくつかの重要な点に留意する必要があります。

CURL() 関数の制限:

1. N1QL の CURL() 関数は、GET および POST リクエストの作成に制限されています。 PUT や DELETE などの他の種類のリクエストを行う必要がある場合は、JavaScript UDF を使用する必要があります。

2. CURL() 関数は同期的であり、応答が受信されるまで N1QL クエリをブロックします。特に応答が大きい場合や応答が遅い場合には、パフォーマンスに影響する可能性があります。

データサイズの制限:

1. CURL() 関数と JavaScript UDF には、渡したり受信したりできるデータの量に制限があります。したがって、データが非常に大きい場合は、データをチャンクに分割するか、複数のリクエストを行う必要がある場合があります。

2. ChatGPT の応答も大きくなる可能性があるため、統合を計画する際にはこの点を考慮してください。応答全体を直接メモリにロードするのではなく、応答をチャンク単位で処理し、結果を Couchbase に保存することもできます。

安全上の注意:

1. CURL() 関数または JavaScript UDF を使用して ChatGPT にリクエストを行うと、ネットワークは API キーやその他の資格情報などの機密情報を渡します。情報のセキュリティを考慮し、必要に応じて暗号化または保護する措置を講じてください。

2. ChatGPT の応答には機密情報も含まれる可能性があるため、Couchbase に保存されているデータを保護し、不正アクセスから保護することが重要です。

これらの制限と考慮事項を念頭に置くことで、CURL() 関数と JavaScript UDF を使用して ChatGPT を Couchbase N1QL に正常に統合できるようになります。

結論

ChatGPT の機能は素晴らしいです。 ChatGPT はコード生成面ではまだ改善の余地がありますが、そこにはまったく新しい世界があります。

<<:  厦門大学、インテル、DJI による共同プロジェクトで、オンライン動画からゼロショット画像マッチングの大規模モデルを学習

>>: 

ブログ    

推薦する

分散型AIで製造業を強化

家庭内の新しい仮想アシスタントから、受信トレイから迷惑メールを削除するスパムフィルターまで、人工知能...

ついに誰かが畳み込みニューラルネットワーク(CNN)を明確にした。

[[406748]]従来のニューラル ネットワーク レイヤーは完全に接続されています。サンプリング...

...

「紫禁城の戦い」 - ディープラーニング フレームワーク: Keras VS PyTorch

TensorFlow は、多くの科学者、エンジニア、開発者にとって主要なディープラーニング フレー...

父親が8歳の娘にディープラーニングを説明する:11の事実

「ニューラル ネットワークは数を数えるのと同じくらい簡単です」、「畳み込み層は単なるバット シグナル...

彼女に転送してください!文系女子でもわかるAIガイドライン

マッキンゼーのデータによれば、人工知能は今後10年間で米国に約13兆ドルの新たなGDPを生み出すだろ...

AIがデータセンター運営者が直面する課題をどう解決するか

業界の専門家が、業界内で発生する運用上の課題の解決に AI がどのように役立つか、データ センター業...

JavaScript による機械学習の例 10 選

年を追うごとに、機械学習用のライブラリはより高速かつ使いやすくなっています。 Python は長い間...

バイナリ検索アルゴリズムと時間計算量について簡単に説明し、バイナリ検索アルゴリズムを実装する

[[432404]]バイナリ検索は、バイナリ検索アルゴリズムとも呼ばれ、シンプルで理解しやすい高速検...

ビッグデータは古い顧客を殺しています。消費者が権利を守るのは困難です。アルゴリズムの不公平な適用をどのように規制すべきでしょうか?

プラットフォーム経済の急速な発展に伴い、オンラインショッピング、交通、旅行宿泊、食品配達、オンライン...

マイクロソフトリサーチアジアと教育省が協力し、AI産業と教育の統合に向けた双方にメリットのあるエコシステムの構築に取り組んでいます。

マイクロソフトリサーチアジアは、「中国の大学における人工知能人材の国際トレーニングプログラム」に関す...

...

AIとローコード/ノーコードのすべきこと、すべきでないこと

ローコードとノーコードは、新しいアプリケーションやサービスを簡単に作成できるようにして、プログラマー...

...