学会开发自己的Python AI应用OpenAI API篇

Posted 一枚务实的码农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学会开发自己的Python AI应用OpenAI API篇相关的知识,希望对你有一定的参考价值。

最近 OpenAI 宣布 ChatGPT 将很快推出他们的 API。虽然我们不知道这需要多长时间,但这之前我们可以熟悉下OpenAI API,快速开发自己的AI应用!

通过今天学习 OpenAI API,你将能够访问 OpenAI 的强大模型,例如用于自然语言的 GPT-3、用于将自然语言翻译为代码的 Codex 以及用于创建和编辑原始图像的 DALL-E。

这篇文章的例子将用Pyhon编写。

生成 API 密钥

在我们开始使用 OpenAI API 之前,我们需要登录我们的 OpenAI 帐户并生成我们的API 密钥

这里要注意,OpenAI 不会在生成 API 密钥后再次显示它,因此请及时复制你的 API 密钥并保存。我将创建一个名为 OPENAI_API_KEY 的环境变量,它将包含我的 API 密钥并将在下一节中使用。

使用 Python接入 OpenAI API

要与 OpenAI API 交互,我们需要通过运行以下命令来安装官方OpenAI包。

pip install openai

我们可以用这个 API 做很多事情。 在本文中,我们将分别完成文字、代码和图像的生成。

1.文本生成

文本生成可用于文字鉴别、文本生成、自动对话、转换、摘要等。要使用它,我们必须使用completion endpoint并为模型提供触发指令,然后模型将生成匹配上下文/模式的文本。

假设我们要对以下文本进行鉴别,我们向AI输入指令(中英文都可以):

判断以下Mike的发言情绪是正面、中立还是负面:
Mike:我不喜欢做作业!
Sentiment:

以下就是用到的代码:

import os import openai
openai.api_key = os.getenv("OPENAI_API_KEY") prompt =  """
Decide whether a Mike's sentiment is positive, neutral, or negative.

Mike: I don't like homework!
Sentiment:
""" 
response = openai.Completion.create( model="text-davinci-003", prompt=prompt, max_tokens=100, temperature=0  )  print(response)

根据 OpenAI 文档,GPT-3 模型是与文本生成的endpoint一起使用。 这就是我们在此示例中使用模型 text-davinci-003 的原因。

以下是返回值的部分打印:


  "choices": [
    
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "text": "Negative"
    
  ],
...

在此示例中,推文的情绪被归类为负面Negative。

让我们看一下这个例子中使用的参数:

model :要使用的模型的 ID(在这里你可以看到所有可用的模型)

Prompt:生成结果的触发指令

max_token:完成时生成的最大token数量(这里可以看到OpenAI使用的tokenizer)

temperature:要使用的采样策略。 接近 1 的值会给模型带来更多风险/创造力,而接近 0 的值会生成明确定义的答案。

2. 代码生成

代码生成与文本生成类似,但这里我们使用 Codex 模型来理解和生成代码。

Codex 模型系列是经过自然语言和数十亿行代码训练的 GPT-3 系列的后代。 借助 Codex,我们可以将注释转化为代码、重写代码以提高效率等等。

让我们使用模型 code-davinci-002 和下面的触发指令生成 Python 代码。

代码生成一个序列,内容包含上海的温度。
import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.Completion.create(
  model="code-davinci-002",
  prompt="\\"\\"\\"\\nCreate an array of weather temperatures for Shanghai\\n\\"\\"\\"",
  temperature=0,
  max_tokens=256,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0
)

print(response)

以下是返回值的部分打印:


  "choices": [
    
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "text": "\\n\\nimport numpy as np\\n\\ndef create_temperatures(n):\\n    \\"\\"\\"\\n    Create an array of weather temperatures for Shanghai\\n    \\"\\"\\"\\n    temperatures = np.random.uniform(low=14.0, high=20.0, size=n)\\n    return temperatures"
    
  ],
...
  

把text部分重新显示格式化一下,你就会看到规整的代码生成了:

import numpy as np

def create_temperatures(n):
    temperatures = np.random.uniform(low=14.0, high=20.0, size=n)
    return temperatures

如果想开发更多,我建议你在 Playground 中测试 Codex(这里有一些帮助你入门的示例)

3. 图像生成

我们可以使用 DALL-E 模型生成图像,我们使用图像生成endpoint并提供文本指令。

以下是我的测试指令(我们在指令中提供的细节越多,我们就越有可能获得我们想要的结果)。

一只毛茸茸的蓝眼睛白猫坐在花篮里,可爱地抬头看着镜头
import openai

response = openai.Image.create(
  prompt="A fluffy white cat with blue eyes sitting in a basket of flowers, looking up adorably at the camera",
  n=1,
  size="1024x1024"
)
image_url = response['data'][0]['url']
print(image_url)

以下是我得到的图片:

当然更有趣的是,还可以使用image edits and image variations endpoints编辑图像并生成原图像的调整。

好了,这篇文章就到这里,希望能激发你的创造力,更多OpenAI API的使用请参考官方文档

Spring项目中如何接入Open AI?

前言

最近随着ChatGPT的爆火,很多人都坐不住了,OpenAI API 允许开发人员访问该模型并在其自己的应用程序中使用。那么它能给我们我们Java开发带来那些好处呢?又该怎么接入Open AI呢?

在开始之前,我们需要在 OpenAI 网站 https://beta.openai.com/account/api-keys 上注册 API 密钥。只有拥有了 API 密钥,我们才可以开始向 API 发送请求。

注意:这里的API KEYS创建好以后一定要妥善保存,创建以后,第二次就无法再查看了,想要再看,只能删除了API KEYS然后重新创建。

Java中如何调用ChatGPT

既然ChatGPT这么智能,那么我们可以问它自己,Java该如何调用ChatGPT?如图所示:


从图中可以看出,OpenAI回答的很笼统,并不是程序员们所想要的,那么换一种方式问可以看到:


可以看出,是因为我们第一次问的过于笼统了,针对具体的需求,还是回答的很棒的。

那么我们根据它的答案来进行实操,看看是否有问题。

代码如下:

添加依赖和调用OpenAI API

<dependency>
    <groupId>com.openai</groupId>
    <artifactId>openai</artifactId>
    <version>0.4.5</version>
</dependency>
import com.openai.api.*;

public class OpenAIClient 
    private static final String API_KEY = "<your_api_key_here>";

    public static void main(String[] args) 
        OpenAI api = new OpenAI(API_KEY);
        CompletionRequest req = CompletionRequest.builder()
                .model("text-davinci-002")
                .prompt("Hello, world!")
                .maxTokens(5)
                .build();
        CompletionResponse resp = api.complete(req);
        System.out.println(resp.getChoices().get(0).getText());
    

修改配置文件

application.yml文件中配置chatgpt相关参数:

chatgpt:
  model: text-davinci-003
  token: sk-xxxxxxxxxxxxxxxxxxx
  retries: 10

这里的model是选择chatgpt哪个模型,默认填好的是最优的模型了。
token就是上面申请的API KEYS。
retries指的是当chatgpt第一次请求回答失败时,重新请求的次数(增加该参数的原因是因为大量访问的原因,在某一个时刻,chatgpt服务将处于无法访问的情况)

将ChatGPT服务注入到Spring中

启动类上加入 @EnableChatGPT 注解则将ChatGPT服务注入到Spring中。

@SpringBootApplication
@EnableChatGPT 
public class YunduanApplication 

    public static void main(String[] args) 
        SpringApplication.run(YunduanApplication.class, args);
    


ChatGPT测试

关于测试代码,我们就来问问chatGPT如何回答:

import org.junit.Test;
import static org.junit.Assert.assertEquals;
import com.openai.api.*;

public class ChatGptTest 
    private static final String API_KEY = "<your_api_key_here>";

    @Test
    public void testChatGpt() 
        OpenAI api = new OpenAI(API_KEY);
        CompletionRequest req = CompletionRequest.builder()
                .model("text-davinci-002")
                .prompt("Hello, world!")
                .maxTokens(5)
                .build();
        CompletionResponse resp = api.complete(req);
assertEquals("Hi there!", resp.getChoices().get(0).getText());
    

在运行该测试之前,请将 API_KEY 替换为您的 OpenAI API 密钥。

如有需要体验ChatGPT链接的,点赞收藏+关注,即可私信博主哦~免费体验ChatGPT 🤗

以上是关于学会开发自己的Python AI应用OpenAI API篇的主要内容,如果未能解决你的问题,请参考以下文章

ChatGPT4通道开放接入基于OPEN AI 平台你的任何APP 可一键接入AI 智能

瑟瑟发抖吧~OpenAI刚刚推出王炸——引入ChatGPT插件,开启AI新生态

使用 Azure OpenAI 打造自己的 ChatGPT

OpenAI 入门|构建自己的 Visual Studio Code Copilot 组件

当AI学会创作,是否应该感到担忧?

AI自己写代码让智能体进化!OpenAI的大模型有“人类思想”那味了