使用Python调用OpenAI ChatGPT4vision API(openai==1.3.6)

写在开始之前

写这篇文章的本意在于一开始搜到了很多调用openai api的文章,但是版本太老,不支持openai更新后的版本了,甄别教程的版本还是花了我很多时间,后面才发现官方文档。所以总之如果科学上网条件允许,建议直接访问openai的官方文档,有非常详细的介绍和直接可使用的代码,包括text2speech,vision等各种功能。

https://platform.openai.com/docs/overview

当然如果懒得看英文文档也可以继续浏览啦~)

调用vision API

准备工作

  • openai账号
  • 注册一个api,记下api key(只能查看一次)
  • 在python环境里下载好openai库
  • 这里我在anaconda里准备了一个python3.9的环境,激活环境后conda install openai即可。(笔者没有考察过openai<1.0对于GPT4的api支持情况,总之新版的调用方式跟之前差别挺大)

    conda activate your_env
    conda install openai
    conda list openai

    图片上传与得到结果

    准备一张你准备用来上传给api的图片。ChatGPT4 vision api目前支持一张或多张的image_url或base64图片,这里先以image_url为例。

    1. 将图片转为公网可访问的url

    你需要类似Postimages — 免费图片托管 / 图片上传之类的工具,将你打算传给GPT的图片上传,再把给出的url放到代码里。类似

    2. 修改代码

    把api key,图片url粘贴到代码里,就可以发送了,会直接打印返回的内容。

    from openai import OpenAI
    
    client = OpenAI()
    api_key = "这里放你的api key,类似sk-xxx"
    max_tokens = 200
    
    client = OpenAI(
        api_key=api_key,
    )
    
    chat_completion = client.chat.completions.create(
      model="gpt-4-vision-preview",
      messages=[
        {
          "role": "user",
          "content": [
            {"type": "text", "text": "What’s in this image?"},
    
            {
              "type": "image_url",
              "image_url": {
                "url": "这里放你的图片url",
              },
            },
    
          ],
        }
      ],
      max_tokens=max_tokens,
    )
    
    print(chat_completion.choices[0].message.content)

    base64图片

    一种替代的方式是把本地的图片文件转成base64格式(表现为一种很长的字符串),通过请求的方式传给api。代码为

    import base64
    import requests
    
    
    api_key = "你的api"
    
    # 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')
    
    
    image_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": "What’s in 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)
    
    print(response.json()['choices'][0]['message']['content'])
    

    你可能会遇到的一些问题

    1. api余额不足

    可以在https://platform.openai.com/usage这个页面查看你的余额。不过值得一提的是页面上显示的数字是已用额度/每月限制额度,余额查看在下面的balance里,能看到每一笔充值和剩余情况。

    2. 网络连接问题

    这个错误的发生可能因人而异,笔者自己做得还挺顺利的)推荐的处理方式有全局加速,添加os.environ["http_proxy"]等等…

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用Python调用OpenAI ChatGPT4vision API(openai==1.3.6)

    发表评论