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. July 2023 (version 1.81)

    July 2023 (version 1.81) 更新后显示发行说明 Update 1.81.1: The update addresses these issues. Welcome to the ...

  2. IDEA工具第一篇:细节使用-习惯设置

    安装好Idea后,直接上手clone代码进入编码时代,有没有那么一刻你会觉用起来没有那么顺手流畅呢? 下面是关于 [Windows] 下安装idea的一些习惯设置[ Mac大致一样 ] 一.修改系统文 ...

  3. 我试图扯掉这条 SQL 的底裤。

    你好呀,我是歪歪. 这次带大家盘一个我觉得有点意思的东西,也是之前写<一个烂分页,踩了三个坑!>这篇文章时,遇到的一个神奇的现象,但是当时忙着做文章搞定这个主线任务,就没有去深究这个支线任 ...

  4. Chromium 通过IDL方式添加扩展API

    基于chromium103版本 1. 自定义扩展API接口 chromium默认扩展api接口中有chrome.runtime.*,和chrome.send.*等,现在我们就仿照chrome.runt ...

  5. C++函数如何具有多个返回值?

      本文介绍在C++语言中,使用一个函数,并返回两个及以上.同类型或不同类型的返回值的具体方法.   对于C++语言而言,其不能像Python等语言一样在一个函数中返回多个返回值:但是我们也会经常遇到 ...

  6. Ubuntu22.04 rc-local 配置开机自启动脚本

    1. rc-local服务简介Linux中的rc-local服务是一个开机自动启动的,调用开发人员或系统管理员编写的可执行脚本或命令的,它的启动顺序是在系统所有服务加载完成之后执行. ubuntu22 ...

  7. ACTF 2023 部分WP

    来自密码手的哀嚎: 玩不了一点,太难了. CRYPTO MDH Description Malin's Diffile-Hellman Key Exchange. task.sage from has ...

  8. Web Woeker和Shared Worker的使用以及案例

    目录 1.前言 2.介绍 Web Worker 3.使用须知及兼容性 3.1.使用须知 3.2.兼容性 4.使用 Web Worker 4.1.创建 Web Worker 4.2.与主线程通信 4.3 ...

  9. DiscuzQ官方最新v3.0.220211源码编译搭建教程和官方部署教程,适合二开(已本地编译通过,无任何错误)

    经过长达半个月的研究! 完成这篇DiscuzQ官方最新版本v3.0.220211的源码编译和官方部署教程.适合喜欢二次开发的小伙伴们,已经通过本地编译测试,保证没有任何错误. 具体教程在我搭建的dzq ...

  10. CTA策略介绍

    CTA策略更多的时候是一种投资方法,更准确的说,主要投资于衍生品的.比较系统化规则化的投资方法都可以称作CTA投资,它并不拘泥于量化或是主动,其具有相当的生命力,会长期存在. CTA策略的收入来源是多 ...