chatgpt java环境调用源码实现demo

目录
  • chatgpt java环境调用源码
    • 1、启动环境
    • 2、创建工程
    • 3、编译工程
    • 4、引入依赖
    • 5、调用接口
  • 扩展:Java实现调用ChatGPT
    • 1、导入依赖
    • 2、demo
    • 3、测试
    • 4、总结:

chatgpt java环境调用源码

1、启动环境

开发工具:

jdk1.8

maven3.5.0

命令行工具:

curl

php

2、创建工程

mvn archetype:generate -DgroupId=com.example.gpt -DartifactId=gpt-demo

3、编译工程

mvn compile

4、引入依赖

<dependency>

<groupId>com.alibaba</groupId> <artifactId>chatgpt</artifactId> <version>1.0.0</version> </dependency>

5、调用接口

String url = "http://localhost:8080/chatgpt/api/v1.0/user/sendmessage";
ChatGPT chatGPT = ChatGPT.create();
byte[] message = "Hello, world!";
try {
chatGPT.sendMessage(url, message);
} catch (Exception e) {
e.printStackTrace();
}

扩展:Java实现调用ChatGPT

1、导入依赖

<dependency>
            <groupId>com.theokanning.openai-gpt3-java</groupId>
            <artifactId>client</artifactId>
            <version>0.10.0</version>
        </dependency>

2、demo

(前提有账号token,本人余额不多了T-T,还可以玩几次,但是网络服务器问题容易timeout或者429拦截)

import com.theokanning.openai.OpenAiService;
import com.theokanning.openai.completion.CompletionChoice;
import com.theokanning.openai.completion.CompletionRequest;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class Demo {
    public static final String token = "私我";
    public static final String model = "text-davinci-003";
    public static final String retries = "20";

    public static void main(String[] args) {
        ChatGPTProperties chatGPTProperties = new ChatGPTProperties();
        chatGPTProperties.setModel(model);
        chatGPTProperties.setToken(token);
        chatGPTProperties.setRetries(Integer.valueOf(retries));

        OpenAiService openAiService = new OpenAiService(token);

        boolean flag = true;
        while (flag) {
            System.out.println("Q(exit结束):\t");
            Scanner scanner = new Scanner(System.in);
            String promote = scanner.nextLine();
            if ("exit".equals(promote)) {
                flag = false;
            } else {
                getReq(openAiService, chatGPTProperties, promote);
            }
        }
    }

    public static void getReq(OpenAiService openAiService, ChatGPTProperties chatGPTProperties, String promote) {
        System.out.println("please wait a fell seconds...");
        List<CompletionChoice> choices = new ArrayList();
        int i = 0;
        Random random = new Random();
        CompletionRequest completionRequest = CompletionRequest.builder()
                .model(model)
                .prompt(promote)
                .user("DEFAULT USER")
                .temperature(0.9D)
                .topP(1.0D)
                .maxTokens(4000)
                .build();
        while (i < chatGPTProperties.getRetries()) {
            try {
                if (i > 0) {
                    Thread.sleep((long) (500 + random.nextInt(500)));
                }
//                System.out.println("loading");
                System.out.println("第" + (i + 1) + "次请求");
                choices = openAiService.createCompletion(completionRequest).getChoices();
                break;
            } catch (Exception var4) {
                System.out.println(new StringBuilder().append("answer failed ").append(i + 1).append(" times, the error message is: ").append(var4.getMessage()).toString());
                if (i == chatGPTProperties.getRetries() - 1) {
                    System.out.println((i + 1) + "次请求失败");
                    throw new RuntimeException(var4);
                }
                ++i;
            }
        }
        for (CompletionChoice choice : choices) {
            String text = choice.getText();
            System.out.println(text);
        }
    }

}

class ChatGPTProperties {
    private String token;
    private String model = "text-davinci-003";
    private Integer retries = 5;

    public ChatGPTProperties() {
    }

    public String getToken() {
        return this.token;
    }

    public String getModel() {
        return this.model;
    }

    public Integer getRetries() {
        return this.retries;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public void setRetries(Integer retries) {
        this.retries = retries;
    }

//    protected boolean canEqual(Object other) {
//        return other instanceof io.github.asleepyfish.config.ChatGPTProperties;
//    }

    public String toString() {
        return "ChatGPTProperties(token=" + this.getToken() + ", model=" + this.getModel() + ", retries=" + this.getRetries() + ")";
    }
}

3、测试

4、总结:

上下文承接时间是9s作用,猜测服务器有session超时过期设置。
老是超时或者被拦截,看脸。
有更好的操作望分享

到此这篇关于chatgpt java环境调用源码实现的文章就介绍到这了,更多相关Java实现调用ChatGPT内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在QQ群中接入ChatGPT机器人的操作方法

    目录 环境介绍 所需工具 前期准备 引入yunzai-bot 最近ChatGPT很火,但是每次要在浏览器上输入显得很麻烦.那么能不能在我们日常使用的软件中接入它让我们能方便的使用它呢?下面为你介绍如何在QQ群中接入chatgpt. 环境介绍 今天我们的分享主要围绕着大部分用户Windows电脑.基于nodejs. 所需工具 nodejs(版本>18) pnpm yunzai-bot(q群机器人) git openai的apikey redis(本地环境建议使用php_study等集成的redis

  • ChatGPT教你用Python实现BinarySearchTree详解

    目录 前言 ChatGPT 截图 对 ChatGPT 的一些感悟 1.ChatGPT 成为下一代搜索引擎,毋庸置疑 2.上下文关联能力强 3.未来的可能性 前言 至今,ChatGPT 已经火了很多轮,我在第一轮的时候注册了账号,遗憾的是,没有彻头彻尾好好地体验过一次.最近这一次火爆,ChatGPT 确实出圈了,各行各业的人们都在晒,趁着周末,我也小试了一把. 这篇文会介绍我使用 ChatGPT 的过程以及使用时的一些感悟,最后浅谈下我对 ChatGPT 的一些理解,不喜勿喷哈~ 我的问题是:我是

  • ChatGPT在信息安全中的应用浅析

    目录 前言 自身定位 构造恶意代码 漏洞源码分析 信息收集 结语 前言 ChatGPT是美国人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,最近ChatGPT又出圈了,之前已经在技术社区火了一把现在传播到了大众面前,我不禁又对这个神奇的AI产生了一些思考,在之前我只是让其辅助写一些简单的逻辑程序,于是我想知道它是否也能在网络安全领域实现一些它的价值呢,本文就这个话题来探讨一下它在网络安全里面一些应用和实践. 自身定位 在实践之前,我想向ChatGPT问一下它自己对于

  • chatgpt国内镜像 pycharm idea插件使用详解

    ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序,于2022年11月30日发布   .ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件.视频脚本.文案.翻译.代码,写论文等任务. 本文重点介绍chatgpt国内镜像 pycharm idea插件,一起看看吧! 这里是引用python可以

  • 让chatgpt将html中的图片转为base64方法示例

    目录 前言 思路 实现过程 递归读取指定目录下的所有 html 文件路径 htmlPaths 获取每个 html 里面的图片 src 获取 html 字符串的所有图片 src 忽略注释的代码 本身是 base64,则忽略 忽略 Thymeleaf 语法 结合起来,封装成一个函数 src 转 base64 最后将新的 html 替换旧的 html 性能优化 总的代码 总结 前言 故事要从我们公司的新官网说起,新官网是叫外包做的,前后端没有分离,对,你没听错,都到了 2023 年的今天,新项目依然是

  • chatgpt java环境调用源码实现demo

    目录 chatgpt java环境调用源码 1.启动环境 2.创建工程 3.编译工程 4.引入依赖 5.调用接口 扩展:Java实现调用ChatGPT 1.导入依赖 2.demo 3.测试 4.总结: chatgpt java环境调用源码 1.启动环境 开发工具: jdk1.8 maven3.5.0 命令行工具: curl php 2.创建工程 mvn archetype:generate -DgroupId=com.example.gpt -DartifactId=gpt-demo 3.编译工

  • Java集合框架源码分析之LinkedHashMap详解

    LinkedHashMap简介 LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashmap的节点一一串成了一个双向循环链表,因此它保留了节点插入的顺序,可以使节点的输出顺序与输入顺序相同. LinkedHashMap可以用来实现LRU算法(这会在下面的源码中进行分析). LinkedHashMap同样是非线程安全的,只在单线程环境下使用. LinkedHashMap源码剖析 LinkedHashM

  • Java struts2请求源码分析案例详解

    Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定.性能优异.设计成熟的WEB框架. 我这里的struts2源码是从官网下载的一个最新的struts-2.3.15.1-src.zip,将其解压即可.里面的目录页文件非常的多,我们只需要定位到struts-2.3.15.1\src\core

  • java 中Buffer源码的分析

    java 中Buffer源码的分析 Buffer Buffer的类图如下: 除了Boolean,其他基本数据类型都有对应的Buffer,但是只有ByteBuffer才能和Channel交互.只有ByteBuffer才能产生Direct的buffer,其他数据类型的Buffer只能产生Heap类型的Buffer.ByteBuffer可以产生其他数据类型的视图Buffer,如果ByteBuffer本身是Direct的,则产生的各视图Buffer也是Direct的. Direct和Heap类型Buff

  • Java 中模仿源码自定义ArrayList

    Java 中模仿源码自定义ArrayList 最近看了下ArrayList的源码,抽空根据ArrayList的底层结构写了一个功能简单无泛型的自定义ArrayLsit,帮助自己更好理解ArrayList:,其实现的底层数据结构为数Object组,代码如下: /** * 自己实现一个ArrayList * */ public class MyArrayList { private Object[] elementData; private int size; public int size(){

  • Java从JDK源码角度对Object进行实例分析

    Object是所有类的父类,也就是说java中所有的类都是直接或者间接继承自Object类.比如你随便创建一个classA,虽然没有明说,但默认是extendsObject的. 后面的三个点"..."表示可以接受若干不确定数量的参数.老的写法是Objectargs[]这样,但新版本的java中推荐使用...来表示.例如 publicvoidgetSomething(String...strings)(){} object是java中所有类的父类,也就是说所有的类,不管是自己创建的类还是

  • Java Lambda 表达式源码解析

    Java Lambda 源码分析 问题: Lambda 表达式是什么?JVM 内部究竟是如何实现 Lambda 表达式的?为什么要这样实现? 一.基本概念 1.Lambda 表达式 下面的例子中,() -> System.out.println("1") 就是一个 Lambda 表达式.Java 8 中每一个 Lambda 表达式必须有一个函数式接口与之对应.Lambda 表达式就是函数式接口的一个实现. @Test public void test0() { Runnable

  • java中CopyOnWriteArrayList源码解析

    目录 简介 继承体系 源码解析 属性 构造方法 add(Ee)方法 add(intindex,Eelement)方法 addIfAbsent(Ee)方法 get(intindex) remove(intindex)方法 size()方法 提问 总结 简介 CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉老数组,这样保证了只阻塞写操作,不阻塞读操作,实现读写分离. 继承体系 public

  • Java Array.sort()源码分析讲解

    阅读起点: Arrays.sort(nums1); 使用ctrl+左键进入sort()方法 1.Arrays.sort() 关于sort()的方法一共有14个,就目前调用的来看是以下这种最基础的. public static void sort(int[] a) { DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0); } 2.DualPivotQuicksort DualPivotQuicksort即双轴快排,定义了七种原始类型的排序

  • Java OkHttp框架源码深入解析

    目录 1.OkHttp发起网络请求 可以通过OkHttpClient发起一个网络请求 通过Retrofit发起一个OkHttp请求 2.OkHttp的连接器 1.OkHttp发起网络请求 可以通过OkHttpClient发起一个网络请求 //创建一个Client,相当于打开一个浏览器 OkHttpClient okHttpClient = new OkHttpClient.Builder().build(); //创建一个请求. Request request = new Request.Bui

随机推荐