「AI人工智能」NodeJs使用openai流式请求与非流式请求

文章目录

  • 前言
  • 一、非流式请求
    • 1.1 无上下文模式
    • 1.2 上下文模式
  • 二、流式请求


前言

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


一、非流式请求

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

1.1 无上下文模式

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 上下文模式

// 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)
        });
})

二、流式请求

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

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();
}

你可能感兴趣的:(#,AI,人工智能,javascript,开发语言)