Coder Social home page Coder Social logo

grt1228 / chatgpt-java Goto Github PK

View Code? Open in Web Editor NEW
3.3K 39.0 809.0 466 KB

ChatGPT Java SDK支持流式输出、Gpt插件、联网。支持OpenAI官方所有接口。ChatGPT的Java客户端。OpenAI GPT-3.5-Turb GPT-4 Api Client for Java

Home Page: https://chatgpt-java.unfbx.com

License: Apache License 2.0

Java 100.00%
chatgpt gpt-35-turbo gpt-4 java chatgpt-java openai-api openai-images openai-whisper whisper openai-chatgpt

chatgpt-java's Introduction

chatgpt-java's People

Contributors

freesme avatar grt1228 avatar livghit avatar plexpt avatar zzy-life avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chatgpt-java's Issues

1.0.4版本貌似会有okhttp包冲突问题

引入okHttp 3.8.1版本中的HttpUrl.get方法参数为get(URL url),但是在Retrofit中调用HttpUrl.get(String url),会报NoSuchMethodError: okhttp3.HttpUrl.get(Ljava/lang/String;)Lokhttp3/HttpUrl;
手动引入okHttp3.12.0之后,不再报错

但是使用流展示的实例时,又会遇到新的版本冲突问题,具体原因没有找到,貌似是因为okHttp-see这个包的版本有问题

催更websocket连接

您好,请问websocket连接在实现了嘛~小程序实现不了sse,催催~~~~~

这个报错有人遇到嘛

Caused by: java.io.IOException: unexpected end of stream on unknown
java.io.EOFException: \n not found: limit=0 content=…

请求超时问题

为什么用了梯子能通过浏览器访问chatgpt接口,然而使用hutools发送请求超时(访问国内的网站能够响应得到数据)
800_LI (2)
userAvater

代理报错 Malformed reply from SOCKS server

00:35:22.701 [http-nio-9209-exec-1] ERROR c.t.c.s.h.GlobalExceptionHandler - [handleRuntimeException,82] - 请求地址'/chat/getQuestion',发生未知异常.
java.lang.RuntimeException: java.net.SocketException: Malformed reply from SOCKS server
at io.reactivex.internal.util.ExceptionHelper.wrapOrThrow(ExceptionHelper.java:46)
at io.reactivex.internal.observers.BlockingMultiObserver.blockingGet(BlockingMultiObserver.java:93)
at io.reactivex.Single.blockingGet(Single.java:2870)
at com.unfbx.chatgpt.OpenAiClient.completions(OpenAiClient.java:352)
at club.tduvr.message.controller.ChatGptController.getQuestion(ChatGptController.java:56)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:577)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1070)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:645)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.net.SocketException: Malformed reply from SOCKS server
at java.base/java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:128)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:429)
at java.base/java.net.Socket.connect(Socket.java:633)
at okhttp3.internal.platform.Platform.connectSocket(Platform.kt:128)
at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:295)
at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207)
at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226)
at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106)
at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74)
at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
at com.unfbx.chatgpt.OpenAiClient.lambda$okHttpClient$2(OpenAiClient.java:271)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
at com.unfbx.chatgpt.OpenAiClient.lambda$okHttpClient$1(OpenAiClient.java:268)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154)
at retrofit2.OkHttpCall.execute(OkHttpCall.java:204)
at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:46)
at io.reactivex.Observable.subscribe(Observable.java:12284)
at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:35)
at io.reactivex.Observable.subscribe(Observable.java:12284)
at io.reactivex.internal.operators.observable.ObservableSingleSingle.subscribeActual(ObservableSingleSingle.java:35)
at io.reactivex.Single.subscribe(Single.java:3666)
at io.reactivex.Single.blockingGet(Single.java:2869)
... 54 common frames omitted

请求开发者支持`gpt-3.5-turbo`模型提问

相关链接:https://openai.com/blog/introducing-chatgpt-and-whisper-apishttps://platform.openai.com/docs/guides/chat

目前指定模型为gpt-3.5-turbo构造Completion

        Completion completion = Completion.builder()
                .model("gpt-3.5-turbo")
                .prompt(text)
                .build();

会报错:

com.unfbx.chatgpt.exception.BaseException: Rate limit reached for default-gpt-3.5-turbo in organization org-dbZK脱敏脱敏 on tokens per min. Limit: 40000.000000 / min. Current: 40960.000000 / min. Contact [email protected] if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method.

实测应该没有达到这个速度限制,而且多次请求都提示Current: 40960.000000 / min,不太正常。

感谢

ChatGPTTest运行报错

[main] INFO com.unfbx.chatgpt.ChatGPTClient - 调用ChatGPT请求返回值:{
"error": {
"message": "Unrecognized request arguments supplied: bestOf, frequencyPenalty, maxTokens, presencePenalty, topP",
"type": "invalid_request_error",
"param": null,
"code": null
}
}

ChatGPTTest 替换 apiKey 报错

错误信息:
{
"error": {
"message": "Unrecognized request arguments supplied: bestOf, frequencyPenalty, maxTokens, presencePenalty, topP",
"type": "invalid_request_error",
"param": null,
"code": null
}
}

感觉返回时间有点过长

我用单独发送http请求的方式,大概3s内就可以收到返回,但是相同的内容调用您的包,发现返回时间大概要10s甚至更久,不知道这个时长是产生在了哪里?

如何实现记住上下文

流式的方式很酷,但是有个困难,我在多次调用streamChatCompletion方法的时候他不能记住上下文,有什么好的思路解决这个问题吗

请教大佬,通过chatGPT生成的图片,一般怎么下载呀,我通过URL下载的时候会报错

chatGPT生成的url为:
https://oaidalleapiprodscus.blob.core.windows.net/private/org-x2tDof6L8GQcT9HVev8uEEvq/user-QKO2z3TMxUYqYwTpR55INmEC/img-qBCyuxcVP2RHrpvmUUU3AjkP.png?st=2023-03-10T14%3A45%3A30Z&se=2023-03-10T16%3A45%3A30Z&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=2023-03-10T03%3A35%3A18Z&ske=2023-03-11T03%3A35%3A18Z&sks=b&skv=2021-08-06&sig=lCj9fQwr6USg1ryf4wNB3HSRiAdpDE1XEmV9y9eKluQ%3D

Linux上的代码为:
`public static void download(String urlString, String filename, String savePath) {

URL url = null;
HttpsURLConnection con = null;
try {
    url = new URL(urlString);
    try {
        // trust all hosts
        trustAllHosts();
        HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
        //如果请求是https,忽略证书校验
        if (url.getProtocol().toLowerCase().equals("https")) {
            https.setHostnameVerifier(DO_NOT_VERIFY);
            con = https;
        } else {
            con = (HttpsURLConnection) url.openConnection();
        }
        
        //设置请求超时为5s
        con.setConnectTimeout(50 * 1000);
        // 输入流
        InputStream is = con.getInputStream();
        
        // 1K的数据缓冲
        byte[] bs = new byte[1024];
        // 读取到的数据长度
        int len;
        // 输出的文件流
        File sf = new File(savePath);
        if (!sf.exists()) {
            sf.mkdirs();
        }
    /* 获取图片的扩展名(我没用到,所以先注释了)
    String extensionName = urlString.substring(urlString.lastIndexOf(".") + 1);*/
        OutputStream os = new FileOutputStream(sf.getPath() + "/" + filename);
        // 开始读取
        while ((len = is.read(bs)) != -1) {
            os.write(bs, 0, len);
        }
        // 完毕,关闭所有链接
        os.close();
        is.close();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
} catch (MalformedURLException e) {
    e.printStackTrace();
}

}`
报错信息如下:超时时间设置很长也没有作用
java.net.ConnectException: Connection timed out (Connection timed out)

请问如何实现才能实现上下文有联系的AI对话?

如题,比如我连续提问,后面的答非所问:
`
@test
public void chat() {
//聊天模型:gpt-3.5
Message message = Message.builder().role(Message.Role.USER).content("现在的光刻机最先进的型号是什么!").build();
ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();
ChatCompletionResponse chatCompletionResponse = v2.chatCompletion(chatCompletion);
chatCompletionResponse.getChoices().forEach(e -> {
System.out.println(e.getMessage());
});

CompletionResponse completions = v2.completions("那么**企业在用的是什么型号?");
for (Choice choice : completions.getChoices()) {
  System.out.println(choice.getText());
}
completions = v2.completions("是哪家企业?");
for (Choice choice : completions.getChoices()) {
  System.out.println(choice.getText());
}

}

`

在使用ChatGPT 3.5 类模型时遇到的报错

`try {

        val client = buildClient()
        val eventSourceListener = ChatEventSourceListener(chat, Model.CHATGPT_3_5_TURBO)
        val message = Message.builder().role(Message.Role.USER).content(text).build()
        val chatCompletion = ChatCompletion.builder().messages(listOf(message)).build()
        client!!.streamChatCompletion(chatCompletion, eventSourceListener)
        val countDownLatch = CountDownLatch(1)

        try {
            countDownLatch.await()
        } catch (e: InterruptedException) {
            e.printStackTrace()
        }
    } catch (e: Exception) {
        chat.msgs.add(Msg(chat.friend, mutableStateOf(e.stackTraceToString()), dateFormat))
    }`

错误显示

OpenAI SSE链接异常 data: {
"error": {
"message": "Invalid URL (POST /v1/chat/completions)",
"type": "invalid_request_error",
"param": null,
"code": null
}
} 异常 null

报错

Exception in thread "main" java.lang.ExceptionInInitializerError
at com.ChatGPT.main(ChatGPT.java:16)
Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j
at org.apache.logging.slf4j.Log4jLoggerFactory.validateContext(Log4jLoggerFactory.java:49)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:39)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:30)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:53)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:30)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388)
at com.unfbx.chatgpt.OpenAiClient.(OpenAiClient.java:54)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.