IDC资讯

质量为本、客户为根、勇于拼搏、务实创新

< 返回IDC资讯列表

打造自己的ChatGPT:逐字打印的流式处理(python openai_api流要求)

发布时间:2023-12-19

Python与OpenAI API: 怎样使用流式要求进行交互

本文将介绍怎样使用Python与OpenAI API进行交互,并深入讨论怎样使用流式要求来实现实时更新模型响应的效果。

一、介绍

A. OpenAI API的概述

1. OpenAI API的作用和功能

OpenAI API提供了先进的AI模型,用于各种NLP任务。它能够帮助我们解决自然语言处理的困难,如文本生成、问答系统、机器翻译等。

2. 如何取得OpenAI API密钥

要取得OpenAI API密钥,首先需要在OpenAI官网上创建一个用户账户。然后,在OpenAI仪表板中的API密钥部份创建新的API密钥。为了保证密钥的安全性,我们需要妥善保管密钥并避免与他人分享。

B. Python与OpenAI API的结合

1. 使用Python脚本访问OpenAI API的基本步骤

要使用Python脚本访问OpenAI API,首先需要导入requests库,并设置API密钥。

2. 履行Python脚本前的准备工作

在履行Python脚本之前,需要导入requests库,并使用API密钥来进行身份验证。

二、流式要求的概述

A. 甚么是流式要求

1. 对API要求的需求和挑战

在某些情况下,仅向OpenAI发出API要求可能还不够,例如在需要实时更新模型响应的情况下。

2. 引入流式传输的概念

流式传输是一种在要求API时使用的传输方法,它可以提供实时更新的模型响应。

B. 使用流式传输要求API

1. 设置流式传输参数

要使用流式传输,只需在调用API时设置stream=True便可。

2. 流式传输的优势和用处

使用流式传输可以实时更新模型生成的响应,从而提高用户体验和交互效果。

三、Python中的流式要求实现

A. Python代码编写准备

1. 导入相关库和模块

在编写Python代码之前,需要导入相关的库和模块。

2. 设置API密钥和模型引擎

在发起流式要求之前,需要设置API密钥和选择要使用的AI模型。

B. 发起流式要求的代码示例

1. 定义处理API响应的函数

为了处理API返回的数据,我们需要定义一个函数来解析和处理响应。

2. 使用for循环遍历API响应数据

为了取得实时更新的模型响应,我们可使用for循环来遍历API返回的数据。

C. 测试流式要求的示例场景

1. 发问ChatGPT模型的问题

可以通过向API发送问题来与ChatGPT模型交互。

2. 接收并展现模型生成的响应数据

接收并展现模型生成的响应数据,可以实现与模型的实时对话。

四、Python与OpenAI API的其他交互方式

A. HTTP要求与API交互

1. 使用HTTP要求发送原始JSON要求

通过发送原始JSON要求,我们可以与API进行交互。

2. 处理API返回的JSON数据

处理API返回的JSON数据,可以获得模型生成的结果。

B. 官方Python库与API交互

1. 安装和配置官方Python绑定库

安装官方Python绑定库,并进行配置。

2. 调用API函数实现与模型的交互

通过调用API函数,实现与AI模型的交互。

C. 其他语言和库与API交互

1. 官方Node.js库的使用

使用官方Node.js库进行与API的交互。

2. 社区保护的库的使用

使用社区保护的库进行与API的交互。

五、总结

  • Python与OpenAI API的结合是实现NLP任务的强大工具。
  • 使用流式要求可以取得实时更新的模型响应,提高用户体验和交互效果。
  • 还可使用HTTP要求和官方库进行与API的交互。
  • 了解区别交互方式的优势和劣势,选择合适的方式与API进行交互。

python openai_api流要求的进一步展开说明

使用OpenAI的流式API

OpenAI的流式API调用可能会感觉很慢,除网络延迟的影响,响应生成的进程中也会有很大的延迟。

如果使用同步接口,我们需要等待响应完全生成后才能显示输出结果。虽然在与利用服务对接时可能没有太多好的处理方案,但对Web利用来讲,我们可以通过流式处理来实现实时的数据返回,提高响应优先级。

后真个流式处理

大多数的SDK都已对OpenAI API的流式响应进行了封装,这里以.NET的Betalgo.OpenAI.GPT3为例,具体配置请参考相关文档。

//使用CreateCompletionAsStream获得 completions
var completions = openAIService.Completions.CreateCompletionAsStream(new OpenAI.GPT3.ObjectModels.RequestModels.CompletionCreateRequest { 
    Prompt = BuildPrompt(input.Prompt),
    MaxTokens = 100, 
    Temperature = 0.5f, 
    TopP = 1, 
    FrequencyPenalty = 0, 
    PresencePenalty = 0, 
    StopAsList = new List<string> { "Q:", "A:" } 
}, Models.TextDavinciV3);

//将返回内容直接经过UTF编码写入Response
async Task ResponseWrite(string? text) { 
    if (text == null) return; 
    await Response.Body.WriteAsync(Encoding.UTF8.GetBytes(text)); 
    await Response.Body.FlushAsync(); 
}

//逐一获得 completion的返回,并写入到Response中
await foreach (var completionResponse in completions) { 
    if (completionResponse.Successful) { 
        await ResponseWrite(completionResponse.Choices[0].Text); 
    } else { 
        await ResponseWrite("<ERR>"); 
        if(completionResponse.Error != null) { 
            await ResponseWrite(completionResponse.Error.Code); 
            await ResponseWrite(completionResponse.Error.Message); 
        } else { 
            await ResponseWrite("<unknown>"); 
        } 
    } 
}

这段代码中最核心的部份是ResponseWrite,提早将内容写入Response的Body并进行Flush。

另外需要注意的是,Action不能再有返回值(如果是.NET 7的话,可以返回Empty),由于在Action结束之前已向Response写入了内容,再有返回值会致使报错。

前真个流式处理

一样地,后端以流式情势发送数据,前端需要以流式情势接收。

这里不需要使用EventSource、WebSocket或其他实时通讯框架,只需要使用普通的fetch便可。

async function send() { 
    const input = document.getElementById("input").value; 
    const output = document.getElementById("output"); 
    output.innerText = ""; 
    const url = "/api/stream"; 
    const data = { 
        "Prompt": input 
    }; 

    // 获得fetch的response,如果没法使用await,可以采取Promise的方式
    const response = await fetch(url, { 
        method: "POST", 
        body: JSON.stringify(data), 
        headers: { 
            "Content-Type": "application/json" 
        } 
    });

    //获得UTF8的解码
    const encode = new TextDecoder("utf⑻");

    //获得body的reader
    const reader = response.body.getReader();

    //循环读取response中的内容
    while (true) { 
        const { done, value } = await reader.read(); 
        if (done) { 
            break; 
        } 
        // 解码内容
        const text = encode.decode(value); 
        // 当获得毛病token时,输出毛病信息
        if (text === "<ERR>") { 
            output.innerText = "Error"; 
            break; 
        } else { 
            // 获得正常信息时,逐字追加输出
            output.innerText += text; 
        } 
    } 
}

fetch获得的response可以通过response.body.getReader()获得reader,然后循环获得reader中的响应。根据情况,将响应内容追加到界面上,从而实现逐字打印的效果。

python openai_api流要求的常见问答Q&A

问题1:怎样使用Python调用OpenAI API?

答案:要使用Python调用OpenAI API,您需要完成以下几个步骤:

  • 第一步,您需要在OpenAI官网上创建一个用户账户并访问API密钥部份以获得API密钥。
  • 第二步,创建一个名为main.py的新文件,并在其中插入以下代码:
import openai

# 填写您的API密钥
openai.api_key = "这里填写您的API密钥"

# 编写您的API调用代码
def call_openai_api():
    # 依照OpenAI API的文档编写您的代码,并使用您想要调用的模型及参数
    
    # 示例:使用ChatGPT模型生成文本
    response = openai.Completion.create(
        engine="text-davinci-003",
        prompt="您的问题",
        temperature=0.7,
        max_tokens=100
    )
    
    # 处理API的响应结果
    # 示例:提取模型生成的文本
    generated_text = response.choices[0].text
    
    # 进行后续处理或展现
    
    return generated_text

print(call_openai_api())

通过以上代码示例,您可使用Python调用OpenAI API并履行您想要的操作。

TikTok千粉号购买平台:https://tiktokusername.com/