文章目录
- 前言
- 注册过程
- 如何使得提示词更加的准确?
- api的简单调用
- 用httpclient去手动填充请求头
- 现成封装的方法
- 最终效果
前言
本文探讨的是从0到1,如何注册GPT账号,如何编写提示词(prompt),以及简单的java调用api的简单例子,如果有对GPT感兴趣,但是不知道如何开始上手的小伙伴可以看下这篇文章
注册过程
1、你能正常访问到官网:https://openai.com/
2、准备可用的国外邮箱 例如 gmail microsoft 邮箱等等。截止到目前qq邮箱,163等国内邮箱都是不可用的状态
3、准备可用的接受验证码的手机 (例如通过:sms-active)
以下是注册过程的截图,当前我使用的印度的手机号码亲自测试可以使用
4、登陆GPT官网,点击注册,使用海外邮箱,和你购买的手机号,经过短信验证后,你就可以正常使用GPT3.5了
如何使得提示词更加的准确?
如图见官网的描述,有以下6个基本测策略。例如:
差的提示词:请给我一段描述汽车的文章
好的提示词:请给我一段描述保时捷跑车的中文文章,文章50个词左右
简单来说,就是提供更精准的信息,从而大模型才会有更好的相应的匹配信息,而不是让AI去猜你想要的
api的简单调用
看到这里的小伙伴,肯定已经猜到,不就是给open-ai的服务器发送特定格式的http请求,然后我们去解析或者展示respond给我们的信息嘛,所以接下来我们来看下open-ai大致提供了哪些接口,以及如何编写java程序如何去请求这些接口的
前提:要申请密钥sk
用httpclient去手动填充请求头
第一种是手动使用HttpClients去构建请求对象,当然pom需要引入httpclient的依赖
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>XXX</version></dependency>
//问:请告诉我java序列化的方式@RequestMapping("/chat")public void streamChat()throws IOException {CloseableHttpClient httpclient = HttpClients.createDefault();try {HttpPost httpPost = new HttpPost("https://api.openai.com/v1/chat/completions");StringEntity requestEntity = new StringEntity("{\"model\": \"gpt-3.5-turbo\",\"messages\": [{ \"role\" : \"user\" , \"content\": \"请告诉我java序列化的方式\"}], \"temperature\": 0.7, \"max_tokens\": 100}","UTF-8");requestEntity.setContentType("application/json");//如果有用梯子 代理的端口 ip HttpHost proxy = new HttpHost("代理ip", 代理端口);RequestConfig requestConfig = RequestConfig.custom().setProxy(proxy).setConnectTimeout(10000).setSocketTimeout(10000).setConnectionRequestTimeout(3000).build();httpPost.setConfig(requestConfig);httpPost.setEntity(requestEntity);httpPost.addHeader("Authorization", "Bearer sk-你的密钥");httpPost.addHeader("Content-Type", "application/json");CloseableHttpResponse response = httpclient.execute(httpPost);try {HttpEntity entity = response.getEntity();if (entity != null) {String result = EntityUtils.toString(entity);System.out.println(result);}} finally {response.close();}} finally {httpclient.close();}}
现成封装的方法
例如官网指明的的java社区包
TheoKanning/openai-java
我发现了一个更好用更简洁的朋友二次封装的包,这是他的项目链接:
https://github.com/asleepyfish/chatgpt
你可以尝试下,引入这个项目的依赖,然后去测试
@RestControllerpublic class ChatGPTController {@GetMapping("/downloadImage")public void downloadImage(String prompt, HttpServletResponse response) {OpenAiUtils.downloadImage(prompt, response);}}@GetMapping("/streamChatWithWeb")public void streamChatWithWeb(String content, HttpServletResponse response) throws IOException {// 需要指定response的ContentType为流式输出,且字符编码为UTF-8response.setContentType("text/event-stream");response.setCharacterEncoding("UTF-8");OpenAiUtils.createStreamChatCompletion(content, response.getOutputStream());}
最终效果