admin 管理员组

文章数量: 887019

写在开始之前

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

https://platform.openai/docs/overviewhttps://platform.openai/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.chatpletions.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/v1/chat/completions", headers=headers, json=payload)

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

你可能会遇到的一些问题

1. api余额不足

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

2. 网络连接问题

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

本文标签: ChatGPT4vision python api OpenAI