SQL可以做ChatGPT吗?答案是YES!

ChatGPT俨然已经风靡全球。今天我们的问题是,SQL可以做ChatGPT吗?

一起来看看吗。

Couchbase N1QL,又名SQL++,是一种类似SQL的语言,用于查询存储在Couchbase中的JSON数据。

Couchbase N1QL中的CURL()函数可向外部服务发出HTTP请求,因而可用于通过向ChatGPT的API端点发送请求来调用ChatGPT。

Couchbase中的JavaScript UDF是用JavaScript编写的函数,不但可以作为N1QL查询的部分执行,还可用于通过向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()。

Couchbase N1QL

Couchbase N1QL(Non-First Normal Form Query Language)是一种类似SQL的语言,用于查询存储在Couchbase中的JSON数据。它提供了用于转换和操作数据的各种函数,包括CURL()函数。

CURL()函数

CURL()函数允许我们从N1QL查询向外部服务发出HTTP请求。这对于集成Couchbase与其他系统(如web API)或获取web数据以便在Couchbase中进一步处理都非常有用。

在 Couchbase N1QL中使用CURL()函数的语法如下:

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

CURL()函数向URL发送GET请求,请求返回用户sitaramv 的存储库。

函数的结果存储在响应变量list中,之后可使用其他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()函数向URL发送POST请求,请求主体中包含JSON有效负载。

自定义头Content-Type: application/json设置请求的数据为JSON格式。

Couchbase N1QL的CURL()函数提供了一种将Couchbase连接到外部系统并从web获取数据的便捷方法。由于能够指定HTTP方法、头和请求体,因而具有很大的灵活性,可用于各种方案。

Couchbase N1QL的JavaScript UDF允许我们编写自定义逻辑,然后可将其作为N1QL查询部分执行。这样我们就可以通过编写JavaScript代码来执行使用内置N1QL函数无法实现的复杂操作,非常便利。

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;

示例中创建了一个名为square的JavaScript UDF,该UDF接受单个参数val并返回其平方值。

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来实现。两种方法语法不同,下面简单说明一下。

使用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选项将Content类型设置为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 shell 中,执行以下操作:

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,接受prompt参数。其JavaScript代码使用请求库向ChatGPT的OpenAI API端点发出POST请求。请求的选项包括URL、method、头和请求有效负载。

进行API调用后,来自API的响应将存储在响应变量中。然后,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在代码生成方面仍需改进,但这是一个全新的世界。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/225370.html<

(0)
管理的头像管理
上一篇2025-04-16 21:05
下一篇 2025-04-16 21:07

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注