赞
踩
写这篇文章的本意在于一开始搜到了很多调用openai api的文章,但是版本太老,不支持openai更新后的版本了,甄别教程的版本还是花了我很多时间,后面才发现官方文档。所以总之如果科学上网条件允许,建议直接访问openai的官方文档,有非常详细的介绍和直接可使用的代码,包括text2speech,vision等各种功能。
https://platform.openai.com/docs/overviewhttps://platform.openai.com/docs/overview
当然如果懒得看英文文档也可以继续浏览啦~)
这里我在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格式(表现为一种很长的字符串),通过请求的方式传给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"]等等...
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。