当前位置:AIGC资讯 > AIGC > 正文

使用Python探究OpenAI API

想了解更多AIGC的内容,请访问:

51CTO AI.x社区

https://www.51cto.com/aigc/

不妨了解可以从OpenAI享用的所有实用服务。

谁没听说过OpenAI?这家人工智能研究实验室因其著名的产品ChatGPT而改变了世界。它改变了AI实施领域,许多公司现在急于成为下一大热点。

尽管竞争激烈,OpenAI仍然是任何生成式AI业务需求的首选公司,因为它拥有最好的模型和持续的支持。该公司提供了许多最先进的生成式AI模型,能够处理各种任务:图像生成和文本到语音等。

OpenAI提供的所有模型都可以通过API调用获得。借助简单的Python代码,您已经可以使用该模型。

我们在本文中将探讨如何结合使用OpenAI API和Python以及可以执行的各种任务。但愿您能从这篇文章中学到很多。

OpenAI API设置

要阅读本文,您需要准备好几个方面。

最重要的是OpenAI的API密钥,因为没有密钥就无法访问OpenAI模型。要获得访问权限,您必须注册OpenAI帐户,并在帐户页面上申请API密钥。收到密钥后,将其保存在能够记住的地方,因为它不会再次出现在OpenAI界面中。

需要做的下一件事是购买预付费积分以使用OpenAI API。最近,OpenAI宣布改变计费方式。我们需要为API调用购买预付费积分,而不是在月底支付。您可以访问OpenAI定价页面来估算所需的积分。还可以查看模型页面,以了解您需要哪种模型。

最后,您需要在生产环境中安装OpenAI Python软件包。您可以使用下面的代码做到这一点。

pip install openai

然后,您需要使用下面的代码设置OpenAI Key环境变量。

import os
os.environ['OPENAI_API_KEY'] = 'YOUR API KEY'

一切设置完毕后,不妨开始使用Python探索OpenAI模型的API。

OpenAI API文本生成

OpenAI API的明星是其文本生成模型。这些大语言模型系列可以从名为提示的文本输入生成文本输出。提示实际上是关于我们期望从模型中得到什么的指令,比如分析文本和生成文档草稿等。

不妨从执行一个简单的文本生成API调用入手。我们将使用OpenAI的GPT-3.5 Turbo模型作为基础模型。它不是最先进的模型,但最便宜的模型常常足以执行与文本相关的任务。

from openai import OpenAI
client = OpenAI()

completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Generate me 3 Jargons that I can use for my Social Media content as a Data Scientist content creator"}
  ]
)

print(completion.choices[0].message.content)
  • “释放预测分析的力量,推动数据驱动的决策!”
  • “深入挖掘数据海洋,发现有价值的见解。”
  • “通过先进算法将原始数据转化为实用的情报。”

文本生成模型的API调用使用API Endpoint chat.completions从提示创建文本响应。

文本生成需要两个参数:模型和消息。

至于模型,您可以检查可以在相关模型页面上使用的模型列表。

至于消息,我们传递一个含有两个对的字典:角色和内容。角色键指定了对话模型中的角色发送方。有三种不同的角色:系统、用户和助手。

使用消息中的角色,我们可以帮助设置模型行为和模型应该如何回答提示的示例。

不妨使用角色助手扩展前面的代码示例,以指导我们的模型。此外,我们将探索文本生成模型的一些参数,以改进结果。

completion = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Generate me 3 jargons that I can use for my Social Media content as a Data Scientist content creator."},
        {"role": "assistant", "content": "Sure, here are three jargons: Data Wrangling is the key, Predictive Analytics is the future, and Feature Engineering help your model."},
        {"role": "user", "content": "Great, can you also provide me with 3 content ideas based on these jargons?"}
    ],
    max_tokens=150,
    temperature=0.7,
    top_p=1,
    frequency_penalty=0
)

print(completion.choices[0].message.content)

当然!以下是基于提供的行语的三个内容思路:

  • “释放数据处理的力量:数据科学家的逐步指南”——创建一篇博文或视频教程,展示实际数据科学项目中数据处理的最佳实践和工具。
  • “预测分析的未来:数据科学的趋势和创新”——撰写一篇思想领袖文章,讨论预测分析领域的新兴趋势和技术,以及它们如何塑造数据科学的未来。
  • “驾驭特征工程:提升模型性能的技术”——开发一个信息图表或社交媒体系列,着重介绍不同的特征工程技术及其对提高机器学习模型的准确性和效率的影响。

生成的输出遵循我们提供给模型的示例。如果我们希望模型遵循某种样式或结果,那么使用角色助手非常有用。

至于参数,下面简单解释我们使用的每个参数:

  • max_tokens:该参数设置模型可以生成的最多字数。
  • temperature:该参数控制模型输出的不可预测性。该参数值越高,输出越具有多样性,越富有想象力。可接受的范围是从0到无穷大,但大于2的值不寻常。
  • top_p:又叫核抽样,该参数有助于确定模型得出输出所依赖的概率分布的子集。比如说,top_p值为0.1意味着模型只考虑抽样概率分布的前10%。其值可以从0到1,值越大,输出多样性越大。
  • frequency_penalty:这惩罚模型输出中的重复token。惩罚值的范围从-2到2,其中正值不鼓励重复使用token,负值则相反,鼓励重复使用单词。值为0表示不会对重复进行惩罚。

最后,您可以使用以下代码将模型输出改为JSON格式。

completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  response_format={ "type": "json_object" },
  messages=[
    {"role": "system", "content": "You are a helpful assistant designed to output JSON.."},
    {"role": "user", "content": "Generate me 3 Jargons that I can use for my Social Media content as a Data Scientist content creator"}
  ]
)

print(completion.choices[0].message.content)
 
{
"jargons": [
"利用预测分析发掘宝贵的洞察力",
"深入研究先进机器学习算法的微妙细处",
"利用大数据的力量推动数据驱动的决策"
]
}

结果采用JSON格式,并遵循我们输入到模型中的提示。

要获得完整的文本生成API文档,您可以在专门的页面上查看。

OpenAI图像生成

OpenAI模型对于文本生成用例很有用,也可以调用API以生成图像。

使用DALL•E模型,我们可以按要求生成图像。执行起来很简单,只需使用以下代码。

from openai import OpenAI
from IPython.display import Image

client = OpenAI()

response = client.images.generate(
  model="dall-e-3",
  prompt="White Piano on the Beach",
  size="1792x1024",
  quality="hd",
  n=1,
)

image_url = response.data[0].url
Image(url=image_url)

针对这些参数,解释如下:

  • model:要使用的图像生成模型。目前,API只支持DALL•E 3和DALL•E 2模型。
  • prompt:这是文本描述,模型将在此基础上生成图像。
  • size:决定生成图像的分辨率。DALL•E3模型有三种选择:1024x1024、1024x1792或1792x1024。
  • quality:该参数影响生成图像的质量。如果需要计算时间,“标准”比“高清”快。
  • n:指定基于提示生成图像的数量。DALL•E3一次只能生成一个图像。DALL•E2一次可以生成多达10个图像。

还可以从现有的图像生成一个衍变图像,不过只能使用DALL•E2模型做到这点。API也只接受4 MB以下的正方形PNG图像。

from openai import OpenAI
from IPython.display import Image

client = OpenAI()

response = client.images.create_variation(
  image=open("white_piano_ori.png", "rb"),
  n=2,
  size="1024x1024"
)

image_url = response.data[0].url

Image(url=image_url)

生成的图像可能不如DALL•E 3好,因为它使用旧模型。

OpenAI Vision

OpenAI是一家提供能够理解图像输入的模型的领先公司。这个模型名为Vision模型,有时被称为GPT-4V。该模型能够根据我们给出的图像回答问题。

不妨试一下Vision模型API。在本例中,我将使用从DALL•E3模型生成的白色钢琴图像,并将其存储在本地。此外,我还将创建一个函数,接受图像路径并返回图像描述文本。别忘了将api_key变量改为您的API Key。

from openai import OpenAI
import base64
import requests
def provide_image_description(img_path):

    client = OpenAI()

    api_key = 'YOUR-API-KEY'
    # Function to encode the image
    def encode_image(image_path):
      with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode('utf-8')
   
    # Path to your image
    image_path = img_path
   
    # Getting the base64 string
    base64_image = encode_image(image_path)
   
    headers = {
      "Content-Type": "application/json",
      "Authorization": f"Bearer {api_key}"
    }
   
    payload = {
      "model": "gpt-4-vision-preview",
      "messages": [
        {
          "role": "user",
          "content": [
            {
              "type": "text",
              "text": """Can you describe this image? """
            },
            {
              "type": "image_url",
              "image_url": {
                "url": f"data:image/jpeg;base64,{base64_image}"
              }
            }
          ]
        }
      ],
      "max_tokens": 300
    }
   
    response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)

    return response.json()['choices'][0]['message']['content']

这个图像显示一架大钢琴摆放在宁静的海滩上。钢琴是白色的,表明一种常与优雅联系在一起的色调。乐器放在海岸线的边缘,轻柔的海浪轻抚沙滩,泛起泡沫,正好碰到钢琴的底座和配套的凳子。海滩周围的环境暗示着一种宁静和隔绝的感觉,清澈的蓝天,远处蓬松的云,平静的大海延伸到地平线。无数大小形状各异的贝壳散落在沙滩上钢琴的周围,突出了环境的自然美和宁静的氛围。自然海滩环境中的古典乐器创造了超现实和画面充满诗意的构图。

您可以调整上面字典中的文本值以匹配您的Vision模型要求。

OpenAI音频生成

OpenAI还提供了基于文本到语音模型生成音频的模型。它非常易于使用,不过语音叙述风格很有限。此外,模型支持许多语言,您可以在语言支持页面上看到这些语言。

要生成音频,可以使用下面的代码。

from openai import OpenAI
client = OpenAI()

speech_file_path = "speech.mp3"
response = client.audio.speech.create(
  model="tts-1",
  voice="alloy",
  input="I love data science and machine learning"
)
response.stream_to_file(speech_file_path)

您应该会在目录中看到音频文件。试着播放一下,看看是否符合标准。

目前,只有几个参数可以用于文本到语音模型:

  • model:要使用的文本到语音模型。只有两种模型可用:ts-1或ts-1-hd,其中ts-1优化速度,ts-1-hd优化质量。
  • voice:使用的语音样式,所有声音都被优化为英语。选择有alloy、echo、fable、onyx、nova和shimmer。
  • response_format:音频格式文件。目前支持的格式有mp3、opus、aac、flac、wav和pcm。
  • speed:生成的音频速度。您可以选择0.25到4之间的值。
  • input:用于创建音频的文本。目前,模型最多支持4096个字符。

OpenAI语音到文本

OpenAI提供了转录和翻译音频数据的模型。使用Whispers模型,我们可以将音频从支持的语言转录到文本文件中,并将其翻译成英语。

不妨从我们之前生成的音频文件中尝试简单的转录。

from openai import OpenAI
client = OpenAI()

audio_file= open("speech.mp3", "rb")
transcription = client.audio.transcriptions.create(
  model="whisper-1",
  file=audio_file
)

print(transcription.text)

我喜欢数据科学和机器学习。

还可以将音频文件翻译成英语。模型还无法翻译成另一种语言。

from openai import OpenAI
client = OpenAI()

audio_file = open("speech.mp3", "rb")
translate = client.audio.translations.create(
  model="whisper-1",
  file=audio_file
)

结论

我们已经探讨了OpenAI提供的几项模型服务,从文本生成、图像生成、音频生成、视觉和文本到语音模型。每个模型都有自己的API参数和规范,您需要在使用它们之前有所了解。

原文标题:Exploring the OpenAI API with Python,作者:Cornellius Yudha Wijaya

链接:https://www.kdnuggets.com/exploring-the-openai-api-with-python。

想了解更多AIGC的内容,请访问:

51CTO AI.x社区

https://www.51cto.com/aigc/

更新时间 2024-05-21