Code Monkey home page Code Monkey logo

ai-beehive's Introduction

ai-beehive

服务器购买:亚洲云 7.8 折优惠码:aibeehive

介绍

  • chatgpt-web-java 2.0 版本,更名为 ai-beehive(爱蜂巢、AI 蜂巢),体验站:https://front.aibeehive.icu
  • chatgpt-web-java 1.0 最终版分支地址,体验地址:https://front3.stargpt.top/#/
  • 前端开发:https://github.com/mjjh1717
  • 前端项目地址:https://github.com/mjjh1717/chatgpt-shuowen
  • 描述:ai-beehive 项目的名字取自蜂巢,这源于我们构建房间的方式,即通过图纸塑造出独特的模块化房间,每个房间都是一个具有个性的聊天室,类似于蜂巢中的单独蜂窝。六边形的蜂窝设计启示我们,系统具有无限的扩展能力。在我们的 ai-beehive项目中,我们提供了一种方式,即通过添加新的图纸来扩展和丰富房间类型.

框架

部署运行

  • 数据库在 beehive-bootstrap/src/main/resources/db/schema-mysql.sql
  • 数据库中存在默认的账号密码是 [email protected]——123456
  • 部署运行方式待完善 ing......,Java 开发者运行应该不成问题
  • 先安装 MySQL 和 Redis

IDEA 运行

  • 待更新......

功能介绍

登录注册

1.邮箱登录注册

使用 satoken 实现 token 存储,token 目前存在 redis

1

2.权限校验

  • 增加登录和注册邮箱后缀校验,可以选择允许哪种邮箱后缀的邮箱登录

  • 增加是否开启注册,未开启情况下不允许注册

  • 增加注册审核,开启后,用户注册完状态为待审核,需管理员将用户的状态改为通过才可登录

  • 增加用户登录状态,包含禁止登录、待审核以及正常。禁止登录状态的用户无法登录,可以通过移除 Redis 用户 Token 强制退出。

3.相关参数

通过 bh_sys_param 表的 email-registerLoginConfig param key 实现控制

{
	"registerVerificationRedirectUrl": "http://localhost:1002/#/emailValidation?type=email&verifyCode=",
	"registerVerifyCodeExpireMinutes": "验证码过期时间(分钟)",
	"registerTemplateSubject": "邮件标题",
	"registerAllowSuffix": "@qq.com,*",  // 允许注册的邮箱后缀,多个用逗号分隔
	"registerEnabled": true,         // 是否开启注册
	"loginAllowSuffix": "@qq.com,*", // 允许登录的邮箱后缀,多个用逗号分隔
	"registerCheckEnabled": true // 是否开启注册审核
}

图纸管理

  • 目前已经实现的图纸有 OpenAi GPT 3.5、OpenAi GPT 4、官网 ChatGPT 3.5、、官网 ChatGPT 4、OpenAi Image 绘图、Midjourney、NewBing,可能存在一些问题待修复。图纸和配置项管理目前都得手动改数据库。

图纸状态

  • 包含了图纸的状态,不同图纸对应前端的展示不一样,只有 published 状态的图纸才可以被使用,如果图纸状态不为 published,那么就算是已经创建好的房间也无法发送内容。用于图纸出现问题时可以即使停止使用。

图纸权限

  • 基于 published 状态的图纸可以控制权限,分配哪些用户可以使用图纸或者全体用户都可以使用,通过 bh_cell_permission 表控制
  • cell_code 表示图纸编码,type 表示权限类型,1 表示浏览权限 2 表示使用权限,权限 2 包含 1。浏览权限表示能看到图纸,使用权限表示可以使用状态为 published 的图纸。user_id 为 0 表示任意用于都拥有该权限。
类型 Not Null 注释
id bigint true 主键
user_id int true 用户 id
cell_code varchar true cell code
type tinyint true 类型
create_time datetime true 创建时间
update_time datetime true 更新时间

图纸配置项管理

  • 每种图纸都拥有其配置项,配置项是在数据库维护,基本图纸的所有参数都可以存在配置项表里,初始化 SQL 中包含了已使用到的一些图纸配置项。
  • 配置项表的字段有点多,每个配置项也可以配置权限,不过因为配置项有点多,所以用到情况应该很少。
  • 配置项样式后续更新,房间编辑配置项功能后续更新。
  • 配置项支持配置默认值、是否必填、用户是否可以使用默认值、用户是否可见、用户是否可见默认值、用户是否可修改、用户创建房间后是否可修改等等。
  • 后续更新......

房间类型

Midjourney

Imagine

文生图功能,默认从输入框发送的消息就是 imagine 指令,需要输入英文提示词,过程中会显示进度条。如果输入非法内容,不会有提示,此时消息相当于异常,通过定时任务重置任务状态。默认展示的图片是缩放的,减少流量传输,有需要时点击查看原图。

Upscale

放大其中一张图片,Imagine 生成的图片 Upscale 只能点一次,不能重复点击

Variation

基于一张图片生成新的四张图片

Describe

图生文

点击图标上传图片

会生成四句提示语,1234 四个选项分别代表这四句提示语,点击即可自动将对应的提示语发送 Imagine 消息

OpenAi Image

  • 图生文的功能,直接输入提示语

OpenAi GPT 3.5 & 4

  • 将调用 OpenAi 接口的所有参数都封装成了配置项,可以根据情况是否让用户可配置参数

官网 ChatGPT

  • 与原先相比增加了返回值错误的类型判断

NewBing

  • 本地可行,线上不可行,查找问题修复中

计划功能

  • 管理端图纸管理、图纸配置项管理
  • 其他图纸,文心一眼、通义千问、chatglm 等等
  • 绘图的图片画廊
  • 配置项样式处理,openai 的提示词商店
  • 等等

实现方案

  • 增加了 OpenAi ApiKey 轮询
  • 待更新......,

联系方式

加群添加微信备注 Github

ai-beehive's People

Contributors

codeleven avatar hncboy avatar lizhongyuan3 avatar stephenhuge 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

ai-beehive's Issues

最新代码,charroom加了user_id但是没有给值,违反非空约束

@service("FrontChatRoomServiceImpl")
public class ChatRoomServiceImpl extends ServiceImpl<ChatRoomMapper, ChatRoomDO> implements ChatRoomService {

@Override
public ChatRoomDO createChatRoom(ChatMessageDO chatMessageDO) {
    ChatRoomDO chatRoom = new ChatRoomDO();
    chatRoom.setId(IdWorker.getId());
    chatRoom.setApiType(chatMessageDO.getApiType());
    chatRoom.setIp(WebUtil.getIp());
    chatRoom.setFirstChatMessageId(chatMessageDO.getId());
    chatRoom.setFirstMessageId(chatMessageDO.getMessageId());
    // 取一部分内容当标题
    chatRoom.setTitle(StrUtil.sub(chatMessageDO.getContent(), 0, 50));
    chatRoom.setCreateTime(new Date());
    chatRoom.setUpdateTime(new Date());
    save(chatRoom);
    return chatRoom;
}

}

但是你们的测试环境没有报错不知道为什么

使用的是gpt-4吗?

使用的是gpt-4吗?你们的演示的地址感觉的和我这gpt-3.5接口不太一样

docker-compose部署方式

  - CHAT_OPENAI_API_KEY=xxx
  - CHAT_OPENAI_ACCESS_TOKEN=xxx
这两个是必填项吗,我两个都填写了运行后提示TOKEN有问题,向大佬请教一下如何配置

报Failed to connect to api.openai.com/[2a03:2880:f126:83:face:b00c:0:25de]:443

java.net.ConnectException: Failed to connect to api.openai.com/[2a03:2880:f126:83:face:b00c:0:25de]:443 at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:297) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na] at com.unfbx.chatgpt.interceptor.HeaderAuthorizationInterceptor.intercept(HeaderAuthorizationInterceptor.java:51) ~[chatgpt-java-1.0.11.jar:na] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201) ~[okhttp-4.10.0.jar:na] at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517) ~[okhttp-4.10.0.jar:na] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na] Suppressed: java.net.ConnectException: Failed to connect to api.openai.com/174.37.154.236:443 ... 21 common frames omitted Caused by: java.net.ConnectException: Connection timed out: no further information at java.base/sun.nio.ch.Net.pollConnect(Native Method) at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549) at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) 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) ... 20 common frames omitted

交流群

添加微信备注 GitHub 进群。
image

DockerFile创建镜像部署,验证码无法显示

在原始的dockerfile中采用的是openjdk,但是这好像不会包含fontconfig,导致字体缺失,然后就无法显示验证码了。
后续,我在Dockerfile中加入这个后解决了

RUN apt-get update
RUN apt-get install -y fontconfig

几个偶发问题, 汇总一下

java.lang.IllegalStateException: ResponseBodyEmitter has already completed
at org.springframework.util.Assert.state(Assert.java:97)
at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.send(ResponseBodyEmitter.java:196)
at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.send(ResponseBodyEmitter.java:184)
at com.hncboy.chatgpt.api.listener.ResponseBodyEmitterStreamListener.onError(ResponseBodyEmitterStreamListener.java:49)
at com.hncboy.chatgpt.api.listener.ParsedEventSourceListener.onFailure(ParsedEventSourceListener.java:185)
at okhttp3.internal.sse.RealEventSource.processResponse(RealEventSource.kt:78)
at okhttp3.internal.sse.RealEventSource.onResponse(RealEventSource.kt:46)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)


org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309)
at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:271)
at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:118)
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:297)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at org.springframework.util.StreamUtils.copy(StreamUtils.java:148)
at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:126)
at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:44)
at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:227)
at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitterReturnValueHandler$HttpMessageConvertingHandler.sendInternal(ResponseBodyEmitterReturnValueHandler.java:212)
at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitterReturnValueHandler$HttpMessageConvertingHandler.send(ResponseBodyEmitterReturnValueHandler.java:205)
at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.sendInternal(ResponseBodyEmitter.java:204)
at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.send(ResponseBodyEmitter.java:198)
at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.send(ResponseBodyEmitter.java:184)
at com.hncboy.chatgpt.api.listener.ResponseBodyEmitterStreamListener.onMessage(ResponseBodyEmitterStreamListener.java:33)
at com.hncboy.chatgpt.api.listener.ParsedEventSourceListener.onEvent(ParsedEventSourceListener.java:156)
at okhttp3.internal.sse.RealEventSource.onEvent(RealEventSource.kt:101)
at okhttp3.internal.sse.ServerSentEventReader.completeEvent(ServerSentEventReader.kt:108)
at okhttp3.internal.sse.ServerSentEventReader.processNextEvent(ServerSentEventReader.kt:52)
at okhttp3.internal.sse.RealEventSource.processResponse(RealEventSource.kt:75)
at okhttp3.internal.sse.RealEventSource.onResponse(RealEventSource.kt:46)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

java.net.ConnectException: 拒绝连接问题

  1. 我的nginx配置是这样的
server{
    listen 80;
    server_name 127.0.0.1;
    index index.html;
    proxy_buffering off;
    root /opt/software/front/www/dist;
    location /api/ {
        proxy_pass http://localhost:3002/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        add_header X-Cache $upstream_cache_status;
    }
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) {
        return 404;
    }
}
server{
    listen 8080;
    server_name 127.0.0.1;
    index index.html;
    root /opt/software/front/admin/dist;
    location /api/ {
        proxy_pass http://localhost:3002/admin/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        add_header X-Cache $upstream_cache_status;
    }
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) {
        return 404;
    }
}
  1. 服务器是国内阿里云
  2. 在服务器上使用docker安装clash
  3. 将代理ip写入代码配置文件
  4. 发送聊天总是报拒绝连接
  5. 我尝试了很多方法都不行?是不是哪里有什么问题?
    辛苦大佬指点一二

nginx代理时流式输出的问题

修改nginx配置信息即可实现流式输出。
Java后台已经实现了流式输出,数据到nginx 的时候进行了一次缓存,这时就需要关闭nginx的缓冲流。
如下:
http{
server{
xxxx xxx;
proxy_buffering off;
xxx xxxx;
}
}

放开限流限制后,连续通过apikey发送20多个消息后,提示报错

[问题描述]放开限流限制后,连续通过apikey发送20多个消息后,提示报错,报错信息如下:

2023-04-04 19:43:01.886  WARN 23814 --- [.openai.com/...] c.h.c.f.a.l.ParsedEventSourceListener    : 消息发送异常,当前已接收消息:,响应内容:{
 "error": {
    "message": "This model's maximum context length is 4097 tokens. However, you requested 4283 tokens (3283 in the messages, 1000 in the completion). Please reduce the length of the messages or completion.",
    "type": "invalid_request_error",
    "param": "messages",
    "code": "context_length_exceeded"
  }
}
,异常堆栈:
Exception in thread "OkHttp Dispatcher" java.lang.IllegalArgumentException: argument "content" is null
        at com.fasterxml.jackson.databind.ObjectMapper._assertNotNull(ObjectMapper.java:4829)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3596)
        at com.hncboy.chatgpt.base.util.ObjectMapperUtil.fromJson(ObjectMapperUtil.java:44)
        at com.hncboy.chatgpt.front.api.parser.ChatCompletionResponseParser.parseSuccess(ChatCompletionResponseParser.java:23)
        at com.hncboy.chatgpt.front.api.parser.ChatCompletionResponseParser.parseSuccess(ChatCompletionResponseParser.java:18)
        at com.hncboy.chatgpt.front.api.storage.ApiKeyDatabaseDataStorage.populateMessageUsageToken(ApiKeyDatabaseDataStorage.java:44)
        at com.hncboy.chatgpt.front.api.storage.ApiKeyDatabaseDataStorage.onErrorMessage(ApiKeyDatabaseDataStorage.java:34)
        at com.hncboy.chatgpt.front.api.storage.AbstractDatabaseDataStorage.onError(AbstractDatabaseDataStorage.java:121)
        at com.hncboy.chatgpt.front.api.listener.ParsedEventSourceListener.onFailure(ParsedEventSourceListener.java:167)
        at okhttp3.internal.sse.RealEventSource.processResponse(RealEventSource.kt:52)
        at okhttp3.internal.sse.RealEventSource.onResponse(RealEventSource.kt:46)
        at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:833)

后续再次发送消息时,则所有消息都是返回Request failed with status code 504,后台的错误信息如下:

2023-04-04 19:47:49.232 ERROR 23814 --- [nio-8699-exec-6] c.h.c.f.service.impl.ChatServiceImpl     : 请求参数:{"prompt":"你是谁?","options":{"conversationId":"e41f46e7-b05e-4dc4-a47e-25160817d265","parentMessageId":"9bfed09b-db52-4c71-9100-ed815139b153"},"systemMessage":null},Back-end closed the emitter connection.
2023-04-04 19:47:49.244 ERROR 23814 --- [nio-8699-exec-6] c.h.c.b.e.RestExceptionTranslator        : 服务器异常

org.springframework.web.context.request.async.AsyncRequestTimeoutException: null
        at org.springframework.web.context.request.async.TimeoutDeferredResultProcessingInterceptor.handleTimeout(TimeoutDeferredResultProcessingInterceptor.java:42) ~[spring-web-5.3.26.jar!/:5.3.26]
        at org.springframework.web.context.request.async.DeferredResultInterceptorChain.triggerAfterTimeout(DeferredResultInterceptorChain.java:79) ~[spring-web-5.3.26.jar!/:5.3.26]
        at org.springframework.web.context.request.async.WebAsyncManager.lambda$startDeferredResultProcessing$5(WebAsyncManager.java:438) ~[spring-web-5.3.26.jar!/:5.3.26]
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) ~[na:na]
        at org.springframework.web.context.request.async.StandardServletAsyncWebRequest.onTimeout(StandardServletAsyncWebRequest.java:151) ~[spring-web-5.3.26.jar!/:5.3.26]
        at org.apache.catalina.core.AsyncListenerWrapper.fireOnTimeout(AsyncListenerWrapper.java:44) ~[tomcat-embed-core-9.0.73.jar!/:na]
        at org.apache.catalina.core.AsyncContextImpl.timeout(AsyncContextImpl.java:133) ~[tomcat-embed-core-9.0.73.jar!/:na]
        at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:137) ~[tomcat-embed-core-9.0.73.jar!/:na]
        at org.apache.coyote.AbstractProcessor.dispatch(AbstractProcessor.java:240) ~[tomcat-embed-core-9.0.73.jar!/:na]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) ~[tomcat-embed-core-9.0.73.jar!/:na]
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) ~[tomcat-embed-core-9.0.73.jar!/:na]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) ~[tomcat-embed-core-9.0.73.jar!/:na]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.73.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.73.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.73.jar!/:na]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.73.jar!/:na]
        at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

nginx反向代理问题

使用nginx反向代理java api,前端在调用/api/session时出现404错误,而在用node启动项目时并未出现该错误,打包后的项目就会出现该错误

请问下, 改为科学上网端口后,出现java.io.IOException: unexpected end of stream on... 是哪里出了问题了吗

java.lang.RuntimeException: java.io.IOException: unexpected end of stream on https://api.openai.com/...
at io.reactivex.internal.util.ExceptionHelper.wrapOrThrow(ExceptionHelper.java:46) ~[rxjava-2.2.21.jar:na]
at io.reactivex.internal.observers.BlockingMultiObserver.blockingGet(BlockingMultiObserver.java:93) ~[rxjava-2.2.21.jar:na]
at io.reactivex.Single.blockingGet(Single.java:2870) ~[rxjava-2.2.21.jar:na]
at com.unfbx.chatgpt.OpenAiClient.creditGrants(OpenAiClient.java:845) ~[chatgpt-java-1.0.7.jar:na]
at com.hncboy.chatgpt.front.service.impl.ChatServiceImpl.getChatConfig(ChatServiceImpl.java:37) ~[classes/:na]
at com.hncboy.chatgpt.front.controller.ChatController.chatConfig(ChatController.java:38) ~[classes/:na]
at com.hncboy.chatgpt.front.controller.ChatController$$FastClassBySpringCGLIB$$f1911854.invoke() ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.26.jar:5.3.26]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.26.jar:5.3.26]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.26.jar:5.3.26]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.26.jar:5.3.26]
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) ~[spring-aop-5.3.26.jar:5.3.26]
at com.hncboy.chatgpt.base.handler.aspect.PreAuthAspect.checkAuth(PreAuthAspect.java:46) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]

消息发送异常,当前已接收消息:,响应内容:null,异常堆栈:

2023-06-16T17:36:37.285+08:00 WARN 16708 --- [.openai.com/...] c.h.c.f.a.l.ParsedEventSourceListener : 消息发送异常,当前已接收消息:,响应内容:null,异常堆栈:

java.io.IOException: Unexpected response code for CONNECT: 501
at okhttp3.internal.connection.RealConnection.createTunnel(RealConnection.kt:483) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.connection.RealConnection.connectTunnel(RealConnection.kt:262) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:201) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na]
at com.unfbx.chatgpt.interceptor.HeaderAuthorizationInterceptor.intercept(HeaderAuthorizationInterceptor.java:51) ~[chatgpt-java-1.0.11.jar:na]
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201) ~[okhttp-4.10.0.jar:na]
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517) ~[okhttp-4.10.0.jar:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

能介绍下限流功能的详细使用规则么,我看配置参数有5项

[问题描述] 请介绍下限流功能的详细使用规则

  # 全局时间内最大请求次数
  maxRequest: 60
  # 全局最大请求时间间隔(秒)
  maxRequestSecond: 1800
  # ip 时间内最大请求次数
  ipMaxRequest: 5
  # ip 最大请求时间间隔(秒)
  ipMaxRequestSecond: 3600
  # 限制上下文对话的数量
  limitQuestionContextCount: 3

以上几项的限流规则,全局、IP和限制上下文的对话数量是什么关系,谢谢。

issue

亲爱的开发者~
请问 有计划研发
用户端:文生图/图修复(replicate、Stable Diffusion等API方式)
管理端:配置管理
等功能嘛

敏感词导入问题

1.根据README文档介绍新建sensitive_word_base64.txt文件如图所示:
image
2. 敏感词文件路径/chatgpt-bootstrap/src/main/resources/sensitive_word_base64.txt,如下图所示:
image
3. 项目启动后敏感词信息并未加载到数据库,工程代码中也未找到相关路径配置请问是不是我哪里操作不对?辛苦有知道的大神解答一下谢谢!

docker部署读不到sensitive_word_base64.txt

读取sensitive_word_base64.txt的方式可以修改下,docker部署的时候文件在jar包中读不到。或者得在docker build的时候将这个文件从jar包解压出来。

科学上网:java.io.IOException: unexpected end of stream on https://api.openai.com/...

我的问题与 #6 @heisexiong 一样,来一张截图如下:
image
我的配置如下:

  1. nginx配置
server{
    listen 80;
    server_name 127.0.0.1;
    index index.html;
    proxy_buffering off;
    root /opt/software/front/www/dist;
    location /api/ {
        proxy_pass http://localhost:3002/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        add_header X-Cache $upstream_cache_status;
    }
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) {
        return 404;
    }
}
server{
    listen 8080;
    server_name 127.0.0.1;
    index index.html;
    root /opt/software/front/admin/dist;
    location /api/ {
        proxy_pass http://localhost:3002/admin/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        add_header X-Cache $upstream_cache_status;
    }
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) {
        return 404;
    }
}
  1. 服务器是国内阿里云
  2. 在服务器上使用docker安装clash
  3. 将代理ip写入代码配置文件
  4. 发送聊天消息就开始报错
  5. 我尝试了很多方法都不行?是不是哪里有什么问题?
    辛苦大佬指点一二

cn.hutool.crypto.CryptoException: SecurityException: JCE cannot authenticate the provider BC

windows下面正常,发布到CentOS 8.5.2111之后登录接口就报错。
最后没办法在项目启动的时候SecureUtil.disableBouncyCastle()禁用了BouncyCastle临时解决了,大家有没有碰到过,有没有更好的解决办法?

JAVA版本如下:
java version "17.0.7" 2023-04-18 LTS
Java(TM) SE Runtime Environment (build 17.0.7+8-LTS-224)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.7+8-LTS-224, mixed mode, sharing)

错误信息如下:
cn.hutool.crypto.CryptoException: SecurityException: JCE cannot authenticate the provider BC
at cn.hutool.crypto.digest.mac.DefaultHMacEngine.init(DefaultHMacEngine.java:105) ~[hutool-all-5.8.18.jar!/:5.8.18]
at cn.hutool.crypto.digest.mac.DefaultHMacEngine.(DefaultHMacEngine.java:56) ~[hutool-all-5.8.18.jar!/:5.8.18]
at cn.hutool.crypto.digest.mac.MacEngineFactory.createEngine(MacEngineFactory.java:42) ~[hutool-all-5.8.18.jar!/:5.8.18]
at cn.hutool.crypto.digest.HMac.(HMac.java:86) ~[hutool-all-5.8.18.jar!/:5.8.18]
at cn.hutool.crypto.digest.HMac.(HMac.java:74) ~[hutool-all-5.8.18.jar!/:5.8.18]
at cn.hutool.crypto.digest.HMac.(HMac.java:63) ~[hutool-all-5.8.18.jar!/:5.8.18]
at cn.hutool.jwt.signers.HMacJWTSigner.(HMacJWTSigner.java:28) ~[hutool-all-5.8.18.jar!/:5.8.18]
at cn.hutool.jwt.signers.JWTSignerUtil.createSigner(JWTSignerUtil.java:239) ~[hutool-all-5.8.18.jar!/:5.8.18]
at cn.hutool.jwt.signers.JWTSignerUtil.hs256(JWTSignerUtil.java:36) ~[hutool-all-5.8.18.jar!/:5.8.18]
at cn.hutool.jwt.JWT.setKey(JWT.java:126) ~[hutool-all-5.8.18.jar!/:5.8.18]
at cn.dev33.satoken.jwt.SaJwtTemplate.generateToken(SaJwtTemplate.java:119) ~[sa-token-jwt-1.34.0.jar!/:?]
at cn.dev33.satoken.jwt.SaJwtTemplate.createToken(SaJwtTemplate.java:109) ~[sa-token-jwt-1.34.0.jar!/:?]
at cn.dev33.satoken.jwt.SaJwtUtil.createToken(SaJwtUtil.java:100) ~[sa-token-jwt-1.34.0.jar!/:?]
at cn.dev33.satoken.jwt.StpLogicJwtForStateless.createTokenValue(StpLogicJwtForStateless.java:60) ~[sa-token-jwt-1.34.0.jar!/:?]
at cn.dev33.satoken.jwt.StpLogicJwtForStateless.createLoginSession(StpLogicJwtForStateless.java:99) ~[sa-token-jwt-1.34.0.jar!/:?]
at cn.dev33.satoken.stp.StpLogic.login(StpLogic.java:331) ~[sa-token-core-1.34.0.jar!/:?]
at cn.dev33.satoken.stp.StpUtil.login(StpUtil.java:174) ~[sa-token-core-1.34.0.jar!/:?]
at com.hncboy.chatgpt.front.service.strategy.user.EmailAbstractRegisterStrategy.login(EmailAbstractRegisterStrategy.java:177) ~[classes!/:0.0.1-SNAPSHOT]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]

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.