「AIGC」NodeJs使用openai流式请求与非流式请求

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 本文档是关于使用Node.js与OpenAI API交互的教程,涵盖了非流式和流式请求。非流式请求示例展示了如何一次性返回所有数据,适用于兼容性但可能需要较长时间。流式请求则演示了如何即时响应数据,提高交互体验,但可能不适用于所有系统。代码示例使用了axios库和http模块,展示了如何处理数据流。

@[TOC](文章目录)


---


# 前言


NodeJs使用openai流式请求与非流式请求


---

# 一、非流式请求

一次性返回所有数据,请求时间较久,兼容性好。


## 1.1 无上下文模式

```python

router.post("/openai", async (req, res) => {

   let url = 'https://api.openai.com/v1/engines/text-davinci-003/completions' // 3.5可用

   const response = await axios.post(url, {

       max_tokens: 1000,

       prompt: req.body.content,

   }, {

       headers: {

           'Authorization': 'Bearer ' + chat_key,

           'Content-Type': 'application/json'

       }

   });

   responseJSON(res, response)

})

```

## 1.2 上下文模式

```python

// gpt3.5 - 完成

router.post("/chart", async (req, res) => {

   let param = req.body

   var data = JSON.stringify({

       messages: [

           {

               "role": "user",

               "content": param.content

           }],

       model: chatConfig.model || 'gpt-3.5-turbo',

       frequency_penalty: chatConfig.frequency_penalty || 0,

       max_tokens: chatConfig.max_tokens || 1000,

       presence_penalty: chatConfig.presence_penalty || 0,

       temperature: chatConfig.temperature || 1,

       top_p: chatConfig.top_p || 1

   });

   var config = {

       method: 'POST',

       url: 'https://api.openai.com/v1/chat/completions', // 反向代理可用 无反向代理请求超时

       headers: {

           'Authorization': 'Bearer ' + chat_key,

           'Content-Type': 'application/json',

       },

       timeout: 60 * 1000,

       data: data, // POST 反向代理可用

   };

   axios(config)

       .then((response) => {

           console.log(JSON.stringify(response.data));

           responseJSON(res, response.data.choices[0].message)

       })

       .catch((error) => {

           console.log(error);

           responseJSON(res, error)

       });

})

```



# 二、流式请求

即时数据响应,请求时间短,交互效果好,不一定适配所有系统。


```python

let sendyhChatSteam = async (req, res, param) => {

   let _res = res;

   let data = {

       data: JSON.stringify({

       messages: [

           {

               "role": "user",

               "content": param.content

           }],

       frequency_penalty: chatConfig.frequency_penalty || 0,

       max_tokens: chatConfig.max_tokens || 1000,

       presence_penalty: chatConfig.presence_penalty || 0,

       temperature: chatConfig.temperature || 1,

       top_p: chatConfig.top_p || 1

       })

   };


   let options = {

       hostname: 'api.openai-proxy.com',

       path: 'gpt-3.5-turbo',

       method: 'POST',

       headers: {

           'Content-Type': 'application/json'

       }

   };

   let question = ''

   let request = http.request(options, (response) => {

       response.setEncoding('utf8');


       // 监听 'data' 事件,获取返回的数据

       response.on('data', (chunk) => {

           question += chunk

           // 在这里处理每个数据块

           console.log(question);

       });


       // 监听 'end' 事件,表示数据传输完成

       response.on('end', () => {

           console.log('------------------监听 end 事件,表示数据传输完成-----------------------------');

           console.log(question);

       });

   });

   // 可以通过流式方式将数据写入请求

   request.write(JSON.stringify(data));

   // 结束请求

   request.end();

}

```

相关文章
|
存储 自然语言处理 API
【网安AIGC专题11.1】12 CODEIE用于NER和RE:顶刊OpenAI API调用、CodeX比chatgpt更好:提示工程设计+控制变量对比实验(格式一致性、模型忠实度、细粒度性能)(下)
【网安AIGC专题11.1】12 CODEIE用于NER和RE:顶刊OpenAI API调用、CodeX比chatgpt更好:提示工程设计+控制变量对比实验(格式一致性、模型忠实度、细粒度性能)
111 0
|
7月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
49 0
|
7月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)(上)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
54 0
|
2月前
|
JavaScript
Node.js GET/POST请求
10月更文挑战第6天
40 2
Node.js GET/POST请求
|
4月前
|
JavaScript Serverless Linux
函数计算产品使用问题之遇到Node.js环境下的请求日志没有正常输出时,该如何排查
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
前端开发 JavaScript
【node写接口】 通过node 快速搭建一个服务器、get请求、post请求 小白入门
【node写接口】 通过node 快速搭建一个服务器、get请求、post请求 小白入门
181 4
|
4月前
|
人工智能 自然语言处理 前端开发
AIGC:聊聊如何用openai帮我们进行情感分析(Huggingface——transformer)
AIGC:聊聊如何用openai帮我们进行情感分析(Huggingface——transformer)
|
7月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)(下)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
58 0
|
6月前
|
JavaScript
Node.js GET/POST请求
Node.js GET/POST请求
25 1
|
7月前
|
存储 缓存 负载均衡
Node.js中间层如何处理并发请求以提供高性能和可扩展性
Node.js中间层如何处理并发请求以提供高性能和可扩展性
下一篇
DataWorks