PS:此文默认拥有魔法书能访问OpenAI网站!!!
最近Gpt4很火,笔者也是很想去玩玩这个AI,但是基于不可抗力访问不到。
这几天找到了一本魔法书,它可以帮助我阅读OpenAi的文档
可以看到OpenAI提供了有非常多的功能,这里主要是说一下图片Images这个功能的入门。
准备工作
如果你已拥有账号,可以跳过注册此步骤
注册账号
访问OpenAI开发者官网(OpenAI API)
注意!访问此网站前请清空浏览器缓存或者开启无痕浏览模式,以免出现地区不支持的问题。
注册点击 Sign Up 按钮进入注册页面
此处可以使用谷歌邮箱或者微软邮箱注册,也可以用其他邮箱进行注册。
但是要注意一点,QQ邮箱等非海外邮箱不适用!!!!
注册成功会对生成的账号进行一个手机验证,此步骤不可跳过,当时笔者我也是卡在这一步。在朋友的帮助下笔者成功通过验证。
此处验证需要海外手机号!!如果你所在持手机的地区不支持OpenAI服务,则不能进行验证。
具体解决方法请自行解决,此处不提供解决办法。
登陆账号
使用上述注册的账号或者你原有的账号进行登陆。如果是第一次注册账号并且通过手机验证后自动登陆,可跳过此步骤。
使用上面注册的账号密码登陆
笔者此处是使用谷歌邮箱登陆
获取key
登陆并且通过验证后来到开发者网站首页,并且点击APIKeys
点击下方的Create new secret key按钮
特别注意!特别注意!特别注意!特别注意!
此处的Key仅仅只能查看一次,请马上复制并且妥善保存。确保保存好后再按ok按钮!!
官方弹窗也高亮特别说明了,"为了安全起见,你不能再次查看此key"。如果你丢失了这个key,可以重新创建一个,但是笔者还是推荐妥善保存.
OpenAI文档
右侧有官方提供的example,我们可以参考此curl命令进行分析。
此curl命令包括以下几点:
- 设置响应体
-H "Content-Type: application/json" \
- 设置请求头
-H "Authorization: Bearer $OPENAI_API_KEY" \
- 设置载体
-d '{
"prompt": "A cute baby sea otter",
"n": 2,
"size": "1024x1024"
}'
参数
prompt
A text description of the desired image(s). The maximum length is 1000 characters.
此参数最为重要,描述你需要生成的图片的具体样子,比如"a beautiful girl"这种简单的描述并且不大于1000个字符。必填参数
n
The number of images to generate. Must be between 1 and 10.
生成的图片张数,默认为1,大小在1到10之间
size
The size of the generated images. Must be one of 256x256
, 512x512
, or 1024x1024
.
生成的图片大小,必须在 256x256, 512x512 和 1024x1024
直接选一个。默认是1024x1024
response_format
The format in which the generated images are returned. Must be one of url
or b64_json
.
返回的图片格式,必须是url或者base64_json直接选择一个
user
A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.
代表最终用户的唯一标识符,可帮助 OpenAI 监控和检测滥用行为。
核心代码
此处门选择使用SpringBoot来对接OpenAI接口。
创建项目过程省略,一般的Springboot项目即可。
使用RestTempate进行http访问
RestTemplate配置
@Configuration
public class RestemplateConfig {
@Autowired
private RestTemplateBuilder restTemplateBuilder;
@Bean
public RestTemplate restTemplate() {
return restTemplateBuilder.build();
}
}
核心方法
@Component
public class openAIUtils {
private static final String OPENAI_URL = "https://api.openai.com/v1/images/generations";
private final String apiKey = "your_OpenAiKey";
private final RestTemplate restTemplate = new RestTemplate();
/**
* 主要调取方法
* @param prompt
* @param temperature
* @param maxTokens
* @param stop
* @param logprobs
* @param n
* @return
*/
public String generateImages(String prompt, float temperature, int maxTokens, String stop, final int logprobs /*, final boolean echo*/, int n) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer " + apiKey);
String requestJson = "{"prompt":"" + prompt + "","n":" + n + "}";
System.out.println(requestJson);
HttpEntity<String> request = new HttpEntity<>(requestJson, headers);
ResponseEntity<String> response = restTemplate.postForEntity(OPENAI_URL, request, String.class);
return response.getBody();
}
}
vo类
public class openAiVo {
private String prompt;
private float temperature;
private int maxTokens;
private String stop;
private int logprobs;
private boolean echo;
private int n;
}
控制器类
@PostMapping("takeImg")
public String generateImage(@RequestBody openAiVo open) throws InterruptedException {
System.out.println(open);
return openaiUtils.generateImages(open.getPrompt(),open.getTemperature(),open.getMaxTokens(),open.getStop(),open.getLogprobs(),open.getN());
}
测试
启动项目然后打开Apifox进调试
此处使用"A black chicken" 来简单画一只黑鸡(才不是小黑子
),可以看到返回了2个结果,接下来我们来访问一下这两个url
总体来说效果还是挺ok的,不知道画复杂的画作会怎么样,各位可以试试。
注意事项
调用api时请去确保魔法书
是全局代理状态,并且idea以及windows做一些代理配置,否则有可能出现链接超时现象。
windows
idea
写在最后
请不要使用OpenAI绘画用作不良用途。
OpenAI官方会对prompt字段进行检测,如果检测到特殊字段
会拒绝此处服务
请求被安全系统拒绝
,如果在调试过程中遇到这个问题,不妨试试换个方面描述prompt字段。
如果笔者有什么错误的地方,请在评论区写下,会进行更新修改,让我们共同进步!