OpenAI
1. 概述
业界第一大语言模型。根据文字提示生成图片。
模型列表:
dall-e-2dall-e-3gpt-image-1
2. 请求说明
请求方法:
POST请求地址:
https://gateway.theturbo.ai/v1/images/generations
3. 请求参数
3.1 Header 参数
Content-Type
string
是
设置请求头类型,必须为 application/json
application/json
Accept
string
是
设置响应类型,建议统一为 application/json
application/json
Authorization
string
是
身份验证所需的 API_KEY,格式 Bearer $YOUR_API_KEY
Bearer $YOUR_API_KEY
3.2 Body 参数 (application/json)
prompt
string
是
一段描述所需图像的文字。dall-e-2 描述最大长度为 1000 字符, dall-e-3 描述最大长度为 4000 字符,gpt-image-1 描述最大长度为 32000 字符。
A cute baby sea otter
n
number
否
生成图像的数量,必须在 1 到 10 之间。dall-e-3 仅支持 n=1。
1
size
string
否
生成图像的尺寸。dall-e-2 支持256x256、512x512、 1024x1024,dall-e-3支持1024x1024、1792x1024、1024x1792,gpt-image-1支持1024x1024、1536x1024、1024x1536。
1024x1024
quality
string
否
生成图像的质量选项。hd会创建具有更精细细节和更高一致性的图像。gpt-image-1支持high 、medium 、low。dall-e-3支持standard 、hd。
standard
style
string
否
生成图像的风格。vivid倾向于生成超现实且戏剧性的图像,natural倾向于生成更自然、不那么超现实的图像。此参数仅适用于dall-e-3。
vivid
response_format
string
否
使用dall-e-2和dall-e-3生成的图像返回的格式。支持url和b64_json,gpt-image-1不支持该参数,永远为b64_json。
b64_json
4. 请求示例
POST /v1/images/generations
Content-Type: application/json
Accept: application/json
Authorization: Bearer $YOUR_API_KEY
{
"model": "dall-e-3",
"prompt": "A cute baby sea otter",
"n": 1,
"size": "1024x1024"
}curl https://gateway.theturbo.ai/v1/images/generations \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Authorization: Bearer $YOUR_API_KEY" \
-d "{
\"model\": \"dall-e-3\",
\"prompt\": \"A cute baby sea otter\",
\"n\": 1,
\"size\": \"1024x1024\"
}"package main
import (
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
"strings"
)
const (
YOUR_API_KEY = "sk-123456789012345678901234567890123456789012345678"
REQUEST_PAYLOAD = `{
"model": "dall-e-3",
"prompt": "A cute baby sea otter",
"n": 1,
"size": "1024x1024",
"response_format": "b64_json"
}`
EXAMPLE_FILE_PATH = "example.png"
)
type Data struct {
B64Json string `json:"b64_json"`
}
type ResponseJSON struct {
Data []Data `json:"data"`
}
func main() {
requestURL := "https://gateway.theturbo.ai/v1/images/generations"
requestMethod := "POST"
requestPayload := strings.NewReader(REQUEST_PAYLOAD)
req, err := http.NewRequest(requestMethod, requestURL, requestPayload)
if err != nil {
fmt.Println("Create request failed, err: ", err)
return
}
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("Authorization", "Bearer "+YOUR_API_KEY)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Do request failed, err: ", err)
return
}
defer resp.Body.Close()
respBodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Read response body failed, err: ", err)
return
}
if resp.StatusCode != 200 {
fmt.Printf("status code: %d\n", resp.StatusCode)
fmt.Println(string(respBodyBytes))
return
}
var responseJSON ResponseJSON
if err := json.Unmarshal(respBodyBytes, &responseJSON); err != nil {
fmt.Println("Parse response body failed, err: ", err)
return
}
if len(responseJSON.Data) == 0 || responseJSON.Data[0].B64Json == "" {
fmt.Println("Parse response body failed, err: empty b64_json")
return
}
imageData, err := base64.StdEncoding.DecodeString(responseJSON.Data[0].B64Json)
if err != nil {
fmt.Println("Parse b64_json failed, err: ", err)
return
}
imageFile, err := os.Create(EXAMPLE_FILE_PATH)
if err != nil {
fmt.Printf("Create file %s failed, err: %v\n", EXAMPLE_FILE_PATH, err)
return
}
if _, err := imageFile.Write(imageData); err != nil {
fmt.Printf("Write to file %s failed, err: %v\n", EXAMPLE_FILE_PATH, err)
imageFile.Close()
return
}
imageFile.Close()
fmt.Println("success to write to file ", EXAMPLE_FILE_PATH)
}5. 响应示例
{
"created": 1589478378,
"data": [
{
"url": "https://..."
},
{
"url": "https://..."
}
]
}{
"created": 1589478378,
"data": [
{
"b64_json": "..."
},
{
"b64_json": "..."
}
]
}最后更新于