0 前言

之前文章中我们聊过怎么注册使用最近很火的ChatGPT?这期我们来看看怎么在Java中调用ChatGPT接口。

传送门 花了1块钱体验一把最近很火的ChatGPT

之后又有大佬将ChatGPT接入微信,以微信机器人的身份出来给我们提供服务。

传送门 ChatGPT新玩法来了,微信聊天机器人



但是出于各种原因,微信上的机器人已经暂时用不了了(不是她高冷哈。。。),至于后面还能不能恢复还不知道。

1 还想体验的小伙伴可以试试

处于种种原因,还是有不少小伙伴跟我一样遇到各种坑,没能体验上ChatGPT。

  • 没有魔法工具
  • 手机号注册不上





    就在昨天,收到CSDN猿如意官方账号的通知,大概意思就是【猿如意】上线了GhatGPT功能,邀请去测评,在这里也可以体验ChatGPT。



    官方地址在这:猿如意下载地址

    支持Mac、Windows、Linux各个平台下载



    安装完成后就可以体验了



不管怎么说,Chat GPT还是给我们带来了很多惊喜,尤其对于我们程序员来说,是一个不错的助手。接下来,我们说一说怎么用Java程序接入Chat GPT

2 Java接入前准备

我们需要在如下网址获取获取API keys,之前注册过ChatGPT账号的可以直接用之前账号登录就可以了,没有的需要去申请一个账号

https://beta.openai.com/account/api-keys



点击上面截图按钮后官方会帮我们创建一个密钥,这个密钥十分重要,自己保存好。后面接口调用都会用到它

3 官方支持接入语言

我们登录下面网址,可以看到ChatGPT 已经支持很多语言接入了

https://beta.openai.com/docs/libraries/community-libraries



点击上方连接,可以跳转到一个GitHub地址openai-java,Theo Kanning开发者已经帮我们写好了例子,我们参考他开源的项目调用即可

4 调用费用

程序接入到 chatGPT,所调用的接口,要收费的

不过新注册的账号,前3 个月免费使用,总消费额度不超过 18 美元

我的账号是到2023年4月1日,这期间只要调用费用不超过18美元相当于是免费使用

5 接口调用说明

以上准备工作做好之后,我们就可以开始接入ChatGPT了。

下面是官网给出的调用例子(只是其中一个使用场景),这些参数我们应该都很熟悉了吧

curl https://api.openai.com/v1/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "text-davinci-003",
"prompt": "I am a highly intelligent question answering bot. If you ask me a question that is rooted in truth, I will give you the answer. If you ask me a question that is nonsense, trickery, or has no clear answer, I will respond with \"Unknown\".\n\nQ: What is human life expectancy in the United States?\nA: Human life expectancy in the United States is 78 years.\n\nQ: Who was president of the United States in 1955?\nA: Dwight D. Eisenhower was president of the United States in 1955.\n\nQ: Which party did he belong to?\nA: He belonged to the Republican Party.\n\nQ: What is the square root of banana?\nA: Unknown\n\nQ: How does a telescope work?\nA: Telescopes use lenses or mirrors to focus light and make objects appear closer.\n\nQ: Where were the 1992 Olympics held?\nA: The 1992 Olympics were held in Barcelona, Spain.\n\nQ: How many squigs are in a bonk?\nA: Unknown\n\nQ: Where is the Valley of Kings?\nA:",
"temperature": 0,
"max_tokens": 100,
"top_p": 1,
"frequency_penalty": 0.0,
"presence_penalty": 0.0,
"stop": ["\n"]
}'

这里我们不展开说了,就说一说其中几个比较重要的

  • model 接入模型

    OpenAI API提供了一系列具有不同功能和价格点的模型 可以到如下地址查看

    https://beta.openai.com/docs/models



    其中,GPT-3是最为智能的模型,也是收费最高的,后面代码中我们将使用其中的text-davinci-003

  • 使用场景

    官网给我们列出来很多使用场景,可以在如下地址查看

    https://beta.openai.com/examples

    ①Answers(问答场景)



    ②Classification(分类场景)



    ③Code(代码场景)



    ④ Conversation(谈话场景)



    ⑤Translation(翻译场景)

⑥Transformation(转换场景)

6 代码实现

以上说到的场景很多,数了数,有49种场景。代码中,我们就挑其中的几种场景实现以下,

其他的场景感兴趣的小伙伴自己去实现。

我们已Q&A 场景为例,只要点场景图标,就可以跳到该场景调用实例了。具体如下



6.1 postman调用

我们先来用postman工具调用试试,看看能不能调通。

如果没有postman工具的小伙伴可以到下面地址下载,我帮你们准备好了

链接:https://pan.baidu.com/s/1ASJgyMRAw7RFmteiPXmzSA

提取码:v3ca

①选择请求方式,接入地址,添加自己账号创建的Token



② 请求头中添加Content-Type类型为json



③拼接json格式的入参



④ 调用成功,返回我们想要的结果了

6.2 Java调用

postman工具中调用成功了,那么代码中怎么实现呢?

① 我们用idea创建一个maven项目



② 添加依赖

依赖只需引入Hutool即可,我们使用Hutool工具发送http post请求,json对象封装等等。

Hutool官方地址:https://hutool.cn/docs/

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.10</version>
</dependency>

③Java 代码

注:下面贴出的代码中,.bearerAuth("填写自己注册的token") 需要替换成自己创建的Token密钥

import cn.hutool.http.*;
import cn.hutool.json.JSONObject; import java.util.HashMap;
import java.util.Map; public class ChatGptDemo {
public static void main(String[] args) {
Map<String,String> headers = new HashMap<String,String>();
headers.put("Content-Type","application/json;charset=UTF-8"); JSONObject json = new JSONObject();
//选择模型
json.set("model","text-davinci-003");
//添加我们需要输入的内容
json.set("prompt","Oracle 计算年龄,精确到天,格式为xx岁xx月xx天?");
json.set("temperature",0.9);
json.set("max_tokens",2048);
json.set("top_p",1);
json.set("frequency_penalty",0.0);
json.set("presence_penalty",0.6); HttpResponse response = HttpRequest.post("https://api.openai.com/v1/completions")
.headerMap(headers, false)
.bearerAuth("填写自己注册的token")
.body(String.valueOf(json))
.timeout(5 * 60 * 1000)
.execute(); System.out.println(response.body());
}
}

//调用结果返回

choices节点下text节点即为我们想要的结果

{
"id": "cmpl-6ONatHFX9tCGfcxgMP6obP6lN1ROf",
"object": "text_completion",
"created": 1671268587,
"model": "text-davinci-003",
"choices": [
{
"text": "\n\nselect trunc(months_between(sysdate, date_of_birth)/12) 岁,\n trunc(mod(months_between(sysdate, date_of_birth), 12)) 月,\n trunc(sysdate-add_months(date_of_birth, trunc(months_between(sysdate, date_of_birth)))) 天\nfrom table_name;",
"index": 0,
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 43,
"completion_tokens": 89,
"total_tokens": 132
}
}

我们来玩个好玩的,让它帮我们生成两张漂亮小姐姐图片

import cn.hutool.http.*;
import cn.hutool.json.JSONObject; import java.util.HashMap;
import java.util.Map; public class ChatGptDemo001 {
public static void main(String[] args) {
Map<String,String> headers = new HashMap<String,String>();
headers.put("Content-Type","application/json;charset=UTF-8"); JSONObject json = new JSONObject();
//搜索关键字
json.set("prompt","漂亮小姐姐");
//生成图片数
json.set("n",2);
//生成图片大小
json.set("size","1024x1024");
//返回格式
json.set("response_format","url"); //发送请求
HttpResponse response = HttpRequest.post("https://api.openai.com/v1/images/generations")
.headerMap(headers, false)
.bearerAuth("填写自己注册的token")
.body(String.valueOf(json))
.timeout(5 * 60 * 1000)
.execute(); System.out.println(response.body());
}
}

//输出结果

{
"created": 1671269880,
"data": [
{
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-pdYv7jlVgMVLo21vFtr0RmLC/user-dWUudL2WFYo8MmkaYdTadc03/img-8fkcdDDEmpvI2ZedT6ddpig2.png?st=2022-12-17T08%3A38%3A00Z&se=2022-12-17T10%3A38%3A00Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2022-12-17T04%3A00%3A10Z&ske=2022-12-18T04%3A00%3A10Z&sks=b&skv=2021-08-06&sig=R7CiMZmMatTXE2%2B0hyQqypUBFKPlubggA2IIA9zBCQQ%3D"
},
{
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-pdYv7jlVgMVLo21vFtr0RmLC/user-dWUudL2WFYo8MmkaYdTadc03/img-JQl7Hor0vzScGEMSvhlnAWOd.png?st=2022-12-17T08%3A38%3A00Z&se=2022-12-17T10%3A38%3A00Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2022-12-17T04%3A00%3A10Z&ske=2022-12-18T04%3A00%3A10Z&sks=b&skv=2021-08-06&sig=y3j8QuYD%2Bzmym6DHrfJpLrutGDZGtbjKsug4O/kQpQ8%3D"
}
]
}

我们将上面调用返回的url 放到浏览器地址栏即可查看图片。接口参数中 "n" 不要设置太大哈,有时候返回的图片,怎么说呢。ai的审美不一定跟我们一致,不过第一个url的也还行 哈哈哈~(●'◡'●)

7 小结

通过上面的例子展示,Java调用ChatGpt 接口是不是很简单呢。如果大家遇到啥问题可以关注文章末尾公众号咨询哈 (●'◡'●)

简单归简单,但是每次请求都要花费money,不知道$18 能支撑多久。

经过一波测试调用后花费了$0.27,折合人名币¥1.88.大家省着点调用吧,长期下来也不便宜。



本期内容到这就结束了,各位小伙伴们,我们下期见 (●'◡'●)

Java程序接入ChatGPT的更多相关文章

  1. 轻松搭建CAS 5.x系列(4)-Java客户端程序接入CAS单点登录,Hello World版

    概述说明 按照本系列的前3篇文章描述的步骤,我们已经搭建好cas sso server.那应用程序怎么接入到实现sso呢? (如果您还没有搭建cas server,可以到<轻松搭建CAS 5.x ...

  2. 聊聊阿里社招面试,谈谈“野生”Java程序员学习的道路

    引言 很尴尬的是,这个类型的文章其实之前笔者就写过,原文章里,笔者自称LZ(也就是楼主,有人说是老子的简写,笔者只想说,这位同学你站出来,保证不打死你,-_-),原文章名称叫做<回答阿里社招面试 ...

  3. Java程序员职业生涯规划完整版:从程序员到CTO( 摘)

    在技巧方面无论我们怎么学习,总感觉需要晋升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样我们清楚的知道我们大概处于那个阶段和水平. Java程序员 高等特性 反射.泛型. ...

  4. [Java程序员面试宝典]读书笔记

    ClassLoader具备层次关系,且不止一种.不同的类装载器分布创建的同一个类的字节码数据属于完全不同的对象,没有任何关联 通过Class.forName(String className),能够动 ...

  5. 利用jdk中工具完成Java程序监控方法记录

    转载加自己整理的部分内容,转载自:http://jiajun.iteye.com/blog/810150 记录下JConsole使用方法 一.JConsole是什么    从Java 5开始 引入了 ...

  6. 如何创建JAR文件?如何运行.jar形式的Java程序?

    一.如何创建JAR文件? .jar是用来压缩档案或者解压档案的文件格式,其特点是具有无损压缩的功能.想知道如何创建这种程序?请访问 http://www.cnblogs.com/yjmyzz/p/ex ...

  7. [转载]一个标准java程序员的进阶过程

    第一阶段:Java程序员 技术名称 内                 容 说明 Java语法基础 基本语法.数组.类.继承.多态.抽象类.接口.object对象.常用类(Math\Arrarys\S ...

  8. Java 程序优化 (读书笔记)

    --From : JAVA程序性能优化 (葛一鸣,清华大学出版社,2012/10第一版) 1. java性能调优概述 1.1 性能概述 程序性能: 执行速度,内存分配,启动时间, 负载承受能力. 性能 ...

  9. Java程序员应该了解的10个面向对象设计原则

    面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorat ...

  10. To Java程序员:切勿用普通for循环遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

随机推荐

  1. android 反编译 apk 分享 smali2java 1.0.0.558

    smali2java 1.0.0.558 smali2java是一个将smali代码反编译成java代码的工具. 什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的一种 ...

  2. VS Code C# 开发工具包正式发布

    前言 微软于本月正式发布Visual Studio Code C#开发工具包,此前该开发套件已经以预览版的形式在6月份问世.经过4个月的测试和调整,微软修复了350多个问题,其中大部分是用户反馈导致的 ...

  3. 9.12 多校联测 Day2 总结

    还是有不少不该挂的分. 开考看了 T1 约 40min 仍然毫无思路,试着推 mod=2 无果.吸取昨天经验教训,赶紧扔掉看 T2. 在 9:00 想到了 dp 的可能性,苦于设计不出状态.9:20 ...

  4. Java 7之基础 - 强引用、弱引用、软引用、虚引用(转)

    载自:http://blog.csdn.net/mazhimazh/article/details/19752475 1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对 ...

  5. C++ 入门防爆零教程(上册)

    ## C++ 入门防爆零教程(上册) ######  C++ Introductory Explosion Proof Zero Tutorial(Volume $1$) 编写者:美公鸡(洛谷账号:b ...

  6. 【scipy 基础】--插值

    插值运算是一种数据处理方法,主要用来填补数据之间的空白或缺失值.因为在实际应用中,数据往往不是完整的,而是存在着空白或缺失值,这些空白或缺失值可能是由于数据采集困难.数据丢失或数据处理错误等原因造成的 ...

  7. 完蛋!我被 Out of Memory 包围了!

    是极致魅惑.洒脱自由的Java heap space? 是知性柔情.温婉大气的GC overhead limit exceeded? 是纯真无邪.活泼可爱的Metaspace? 如果以上不是你的菜,那 ...

  8. 如何将word格式的文档转换成markdown格式的文档

    如何将word格式的文档转换成markdown格式的文档 如何将word格式的文档转换成markdown格式的文档 前言 A. 介绍Markdown和Word格式文档 什么是Markdown? Mar ...

  9. 《实现领域驱动设计》笔记——DDD入门

    设计不只是感观,设计就是产品的工作方式. 我们的目标应该是创造一个可观测的.可伸缩的.组织良好的软件模型. DDD同时提供了战略上的战术上的建模工具. 我能DDD吗? DDD首先并不是关于技术的,而是 ...

  10. 万字解析XML配置映射为BeanDefinition的源码

    本文分享自华为云社区<Spring高手之路16--解析XML配置映射为BeanDefinition的源码>,作者:砖业洋__. 1. BeanDefinition阶段的分析 Spring框 ...