# chat-plus **Repository Path**: tang_yang_zhuang/chat-plus ## Basic Information - **Project Name**: chat-plus - **Description**: AI 大语言模型 API 实现的 AI 助手全套开源解决方案,自带运营管理后台,开箱即用。集成了 OpenAI, Azure, ChatGLM,讯飞星火,文心一言等多个平台的大语言模型。集成了 MidJourney 和 Stable Diffusion AI绘画功能 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: https://ai.anshangba.com - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 99 - **Created**: 2024-02-21 - **Last Updated**: 2024-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目介绍 本项目是重构 [chatgpt-plus](https://gitee.com/blackfox/chatgpt-plus) 的后端Java重构版 本项目前端地址 https://gitee.com/hongjie95/chatgpt-plus 请使用 `chat-plus-java` 分支打包编译前端包,main分支保持和主仓库代码一致 ## 项目技术 - Springboot 3 - JDK 21 - Mybatis - MySQL - Redis - Websocket - ElasticSearch(已接入,默认关闭,未实际使用,后续看功能使用) ### 项目结构 ```yaml ├─application-api # 业务数据模型模块 ├─application-app # 业务接口Controller模块 ├─application-dao # 业务DAO模块 ├─application-openai-sdk # 各家的机器人SDK对接模块,统一入参出参 ├─application-service # 业务服务层模块 │ └─aiprocessor # 核心模块,对接open ai sdk 的方式,以及发消息的处理 ├─core # 核心模块 │ ├─common # 公共模块 │ ├─datasource # 数据源模块 │ ├─elasticsearch # es配置模块 │ ├─job # 定时任务模块 │ ├─file # 文件模块 │ ├─json # json序列化配置模块 │ └─web # web配置,和拦截器过滤器相关模块 └─tools # 代码生成工具模块 └─code-generator ``` ## 已完成功能 > 后续完成的功能会在此更新 ### 用户首页 TODO 还有`大量功能未开发`,目前已完成以下功能: - [x] 用户登录、注册、修改密码 - [x] 用户信息修改、用户邀请码功能 - [x] 图形码人机验证、短信验证码 - [x] ChatGPT机器人聊天 && 函数调用 - [x] 文心一言机器人聊天 && 函数调用 - [x] 讯飞星火机器人聊天 && 函数调用 - [x] ChatGLM机器人聊天 - [x] 阿里通义千问机器人聊天 - [x] 邀请码注册 - [x] 新增敏感词库,对用户输入敏感词检测过滤 - [x] 接口审计日志 - [x] 支付宝、微信支付 - [x] 订单下单 - [x] 用户扣费逻辑 - [x] 函数模块:函数DEMO,另外新增了:今日早报,微博热搜,dalle3画图 ### 管理员后台 - [x] 仪表盘 - [x] 用户管理 - [x] 角色管理 - [x] API-KEY - [x] 语言模型 - [x] 充值产品 - [x] 充值订单 - [x] 函数管理 - [x] 系统设置 - [x] 用户登录日志 ## OPEN AI SDK 架构 ![img.png](img.png) 详细介绍 https://bugstack.cn/md/zsxq/project/openai-sdk-java.html 我这边代码复制过来,做了大量的修改和兼容,可能和原项目有所不同 ## 注意事项 1. 本项目使用的是`Java 21`,如果你的Java版本不是21,请自行兼容修改 2. 本项目使用的是`Gradle 8`构建,如果你不会使用`Gradle`,请自行学习 3. 本项目修改和新增了`原项目的数据库表名,和部分字段名和类型`,如果你想使用原项目的数据库,请自行修改 ## 本地开发 1. 克隆本项目到本地 ```angular2html git clone https://gitee.com/hongjie95/chat-plus.git ``` 2. 使用IDEA打开本项目 3. 执行SQL文件`/doc/chat-plus.sql`,创建数据库和表,初始化数据,管理员账户:`15302789406/123456` 4. 修改`application.yml`中的`spring.profiles` ```yaml spring: profiles: group: default: - dev local: - local prod: - prod production: - production active: default ``` 根据选择的环境,修改`spring.profiles.active`的值,如`dev`、`local`、`prod`、`production` 5. 修改`application-dev.yml`中的数据库配置,Redis配置 6. 修改`application-dev.yml`中的短信验证码配置 ## 部署方式 1. 打包jar包 ```angular2html ./gradlew clean :application-app:bootJar -PbootJarArchiveId=chat-plus ``` jar包打包完成后,会在`application-app/build/libs`目录下生成`chat-plus.jar`文件 2. 创建Dockerfile文件 ```Dockerfile FROM openjdk:21-jdk-oracle MAINTAINER Angus RUN mkdir -p /opt/run \ /opt/run/temp \ ENV SERVER_PORT=8080 WORKDIR /opt/run EXPOSE ${SERVER_PORT} ADD ./chat-plus.jar.jar ./app.jar ENV JAVA_TOOL_OPTIONS="-Xms1024m -Xmx2048m" ENV SPRING_PROFILES_ACTIVE="prod" ENTRYPOINT ["java","-jar","app.jar"] ``` 这里我打包的配置文件后缀为`prod`,所以线上我的配置文件为`application-prod.yml` 3. 构建Docker镜像 ```angular2html docker build -t angus/chat-plus:latest . ``` 4. 创建docker-compose.yml文件 ```yaml version: '3' services: anshangba-cms: image: "angus/chat-plus:latest" container_name: chat-plus environment: # 时区上海 TZ: Asia/Shanghai SERVER_PORT: 8080 JAVA_TOOL_OPTIONS: -XX:InitialRAMPercentage=40.0 -XX:MinRAMPercentage=20.0 -XX:MaxRAMPercentage=80.0 cap_add: - SYS_PTRACE ports: - "8080:8080" - "9999:9999" deploy: resources: limits: memory: 2048M volumes: # 日志文件挂载 - /opt/backend/logs:/opt/run/logs # 配置文件挂载 - /opt/backend/config:/opt/run/config ``` ## 使用须知 本项目基于 MIT 协议,免费开放全部源代码,可以作为个人学习使用或者商用。 如需商用必须保留版权信息,请自觉遵守。确保合法合规使用,在运营过程中产生的一切任何后果自负,与作者无关。