首页 > 编程语言 >Java程序接入ChatGPT

Java程序接入ChatGPT

时间:2023-05-08 16:55:05浏览次数:48  
标签:调用 Java 接入 场景 json set https ChatGPT

目录

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,接入,场景,json,set,https,ChatGPT
From: https://www.cnblogs.com/xiezhr/p/17344811.html

相关文章

  • JAVA快速开发框架 一键生成表单模板代码
    从计算机诞生开始,虽然编程的形式随着硬件及软件的不断进步而不停迭代,但是从事计算机技术行业的人员始终与编写代码的任务紧密联系在一起。因此如何提高软件开发的效率和质量,一直是软件工程领域的重要问题之一。这一方面是由于在不同软件开发过程中存在大量相似代码复用的情况,多次......
  • JAVA快速开发框架 一键生成表单模板代码
    从计算机诞生开始,虽然编程的形式随着硬件及软件的不断进步而不停迭代,但是从事计算机技术行业的人员始终与编写代码的任务紧密联系在一起。因此如何提高软件开发的效率和质量,一直是软件工程领域的重要问题之一。这一方面是由于在不同软件开发过程中存在大量相似代码复用的情况,多次编......
  • Javascript异步编程的4种方法
    你可能知道,Javascript语言的执行环境是"单线程"(singlethread)。所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须......
  • java netty socket实例:报文长度+报文内容,springboot
    前言说实话,javanetty方面的资料不算多,尤其是自定义报文格式的,少之又少自己写了个简单的收发:报文长度+报文内容发送的话,没有写自动组装格式,自己看需求吧,需要的话,自己完善服务端启动可以直接用类文件启动,也可以通过springboot。我这里写的是用springboot启动的,可以自己按照需求自......
  • GSON -- convert java object to json
    Library:gson(2.2.4) <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.2.4</version></dependency>  (1)SimpleJava“POJO”/JSON packagecom.hmkco......
  • javasript定义类的几种方法(推荐)
    1.工厂模式functioncreateObject(name,age){varobj=newObject();obj.name=name;obj.age=age;obj.getName=function(){returnthis.name;};obj.getAge=function(){returnthis.age;}returnobj;}varobj2=createObject("王五",19);......
  • java获取json字符串中json对象
    StringruleDetail=paperRule.getRuleDetail();if(ruleDetail!=null){JSONObjectjsonObject=JSONObject.fromObject(ruleDetail);//转json对象ObjectpaperRules=jsonObject.get("paper......
  • 32基于java的小区物业管理系统或智慧社区管理系统
    本章节给大家介绍一个基于java的小区物业管理系统或智慧社区管理系统,可用于小区物业的管理系统,或者智慧社区的管理系统。系统概要随着科学技术的飞速发展,计算机技术已延伸倒我们日常生活的各个方面。在工业、农业、商业等方面起着巨大的作用。计算机已成为我们日常生活中不可......
  • Java学习笔记(十一)
     1、请描述abstractclass和interface的区别?(1)实现方式抽象类是一个类,可以像普通类一样拥有属性和方法,但是它的部分方法没有具体实现,需要由子类来实现。抽象类使用关键字abstract来定义。在Java中,一个类只能继承一个抽象类。接口没有属性,只有方法和常量,所有的方法都是抽象的......
  • 直播系统搭建,java二维码 生成二维码
    直播系统搭建,java二维码生成二维码 packageBasicsTest;importcom.swetake.util.Qrcode;importjavax.imageio.ImageIO;importjava.awt.*;importjava.awt.image.BufferedImage;importjava.io.File;/***二维码生成 *Createdbyxson2017/2/6. */publicclassQRCode......