项目描述
基于Go语言实现AI应用服务平台,使用Gin框架构建Web服务,实现了用户注册登录,AI助手聊天主要功能。
功能要点
采用Vue.js开发用户界面,实现登录注册、AI聊天、等功能,提升用户体验。
搭建基于Gin框架的高性能HTTP服务器,支持并发请求处理,提升系统响应速度和吞吐量。
集成OpenAI模型,接入阿里云百炼模型SDK调用,实现本地部署。
实现JWT令牌认证和会话管理,支持用户登录状态维护和权限控制。
集成MySQL数据库和Redis缓存,使用连接池和ORM简化数据操作,提高查询效率。
采用RabbitMQ实现异步消息队列,支持高并发场景下的消息存储和消费。
采用zap记录操作日志,方便调试排查问题。
项目地址
https://gitee.com/oow3b/GoChatAI.git
参考文档
GopherAI(Go)开源代码:https://github.com/youngyangyang04/GopherAI
基于QQ邮箱实现验证码:https://blog.csdn.net/weixin_41957626/article/details/131386155
阿里云百炼:https://bailian.console.aliyun.com/cn-beijing/?tab=model#/api-key
进入此链接,获取自己本账号的api-key,后续会用到
https://bailian.console.aliyun.com/?spm=5176.29619931.J__Z58Z6CX7MY__Ll8p1ZOR.1.1369521crCDcVM&tab=api#/api
功能模块
用户模块
- package router
- import (
- "GoChatAI/controller/user"
- "github.com/gin-gonic/gin"
- )
- func InitUserRouter(r *gin.RouterGroup) {
- var userController = user.UserController{}
- // 注册
- r.POST("/register", userController.Register)
- // 登录
- r.POST("/login", userController.Login)
- // 发送邮箱验证码
- r.POST("/captcha", userController.HandleCaptcha)
- }
复制代码 AI模块
- package router
- import (
- "GoChatAI/controller/session"
- "github.com/gin-gonic/gin"
- )
- func InitAIRouter(r *gin.RouterGroup) {
- var sessionController = session.SessionController{}
- {
- // 获取用户所有的会话id和标题
- r.GET("/chat/sessions", sessionController.GetUserSessionsByUserName)
- // 创建会话
- r.POST("/chat/send-new-session", sessionController.CreateSessionAndSendMessage)
- // 发送消息
- r.POST("/chat/send", sessionController.ChatSend)
- // 同步历史消息
- r.POST("/chat/history", sessionController.ChatHistory)
- // r.POST("/chat/tts", AI.ChatSpeech) // ChatSpeechHandler
- // 创建会话--流式响应
- r.POST("/chat/send-stream-new-session", sessionController.CreateStreamSessionAndSendMessage)
- // 发送消息--流式响应
- r.POST("/chat/send-stream", sessionController.ChatStreamSend)
- }
- }
复制代码 项目部署
Docker安装
- # 更新
- yum update
- (1)yum 包更新到最新
- > yum update
- (2)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
- > yum install -y yum-utils device-mapper-persistent-data lvm2
- (3)设置yum源为阿里云
- > yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- (4)安装docker
- > yum install docker-ce -y
- (5)安装后查看docker版本
- > docker -v
- # 启动docker:
- systemctl start docker
- # 停止docker:
- systemctl stop docker
-
- # 重启docker:
- systemctl restart docker
- # 查看docker状态:
- systemctl status docker
- # 开机启动:
- systemctl enable docker
- # 查看docker概要信息
- docker info
- # 查看docker帮助文档
- docker --help
- # 配置修改
- sudo systemctl daemon-reexec
- # 重启docker
- sudo systemctl restart docker
复制代码 Go项目打包到Linux服务器中
- set CGO_ENABLED=0
- set GOARCH=amd64
- set GOOS=linux
- # go build main.go
- # 指定名字打包
- go build -o build/GoChatAI main.go
复制代码 文件传输到Linux服务器上
Linux服务器赋予可执行权限
编写Dockerfile
- # 依赖环境
- FROM alpine:latest
- # 安装bash和必要工具
- RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
- && apk update \
- && apk add --no-cache \
- bash \
- vim \
- nodejs \
- npm \
- curl \
- # pnpm 需要通过 npm 安装
- && npm install -g pnpm \
- && rm -rf /var/cache/apk/*
-
- # 先创建目录结构
- RUN mkdir -p /root/GoChatAI/conf
- # 复制执行文件到容器的根目录下
- COPY GoChatAI ./root/GoChatAI/
- COPY conf ./root/GoChatAI/conf/
- COPY web ./root/GoChatAI/web
- # 置顶容器服务的端口
- #EXPOSE 9090
- # 赋予权限
- RUN chmod +x /root/GoChatAI/GoChatAI
- # 安装前端依赖
- WORKDIR /root/GoChatAI/web
- RUN pnpm install
- # 创建启动脚本(前端和后端 一起启动)
- RUN echo "#!/bin/sh" > /start.sh && \
- echo "echo 'Starting GoChatAI backend...'" >> /start.sh && \
- echo "/root/GoChatAI/GoChatAI &" >> /start.sh && \
- echo "echo 'Starting frontend server...'" >> /start.sh && \
- echo "cd /root/GoChatAI/web && npm run serve &" >> /start.sh && \
- echo "echo 'Services started. Waiting...'" >> /start.sh && \
- echo "wait" >> /start.sh && \
- chmod +x /start.sh
- # 启动命令
- WORKDIR /root/GoChatAI
- CMD ["/start.sh"]
复制代码 生成镜像
- 生成镜像
- docker build -t gochatai:1.9 .
- # 查看打包镜像
- docker images
复制代码 创建容器
- docker run -d \
- --name gochatai \
- --network mynet \
- -p 8080:8080 \
- -p 9090:9090 \
- -e LD_LIBRARY_PATH="/root/onnxruntime-linux-x64-1.22.0/lib:$LD_LIBRARY_PATH" \
- -e OPENAI_API_KEY="sk-049180344ba84fb7b07d794d0c6f10db" \
- -e OPENAI_MODEL_NAME="qwen-plus" \
- -e OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1" \
- gochatai:1.9
- # 查看容器进程
- docker ps -a
- docker logs
复制代码 安装Mysql
- docker run -d -p 3306:3306 \
- -v /home/mysql/conf:/etc/mysql/conf.d \
- -v /home/mysql/data:/var/lib/mysql \
- -e MYSQL_ROOT_PASSWORD=123456 \
- --name mysql \
- mysql:5.7
- # 进入mysql容器
- docker exec -it 3f bash
- # 登录 MySQL
- mysql -u root -p
- -- 如果存在小写的,先删除(可选)
- DROP DATABASE IF EXISTS gochatai;
- -- 创建大写名称的数据库
- CREATE DATABASE GoChatAI
- CHARACTER SET utf8mb4
- COLLATE utf8mb4_unicode_ci;
- -- 验证
- SHOW DATABASES LIKE 'GoChatAI';
- # 退出 MySQL
- exit
复制代码 安装Redis
- # 创建数据目录
- mkdir -p /data/redis
- # 运行带持久化的 Redis
- docker run -d \
- --name redis \
- -p 6379:6379 \
- -v /data/redis:/data \
- -v /path/to/redis.conf:/usr/local/etc/redis/redis.conf \
- redis:latest redis-server /usr/local/etc/redis/redis.conf
复制代码 安装rabbitmq并部署网络配置
- //重新启动一个命令行窗口,执行如下:
- //创建一个网络,方便后续两个docker互联
- docker network create mynet
- //执行以下语句,创建一个rabbitmq容器(若本身有rabbitmq容器或端口被占用,自行删除即可)
- docker run -d --name rabbitmq --network=mynet \
- -p 5672:5672 -p 15672:15672 \
- rabbitmq:3-management
- //进入容器
- docker exec -it rabbitmq bash
- //启动消息队列,rabbitmq这一块可能需要等一会,没有那么快开启
- rabbitmq-server -detached
- //在rabbitmq中创建root用户&&给予config.toml中默认用户权限
- rabbitmqctl add_user root 123456
- rabbitmqctl set_user_tags root administrator
- rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
- # 打开RabbitMQWeb管理界面插件 rabbitmq 管理页面:http://ip:15672/#/
- rabbitmq-plugins enable rabbitmq_management
- //退出rabbitmq容器
- exit
- //将rabbitmq容器放入当前网络
- docker network connect mynet rabbitmq
- //将刚刚创建的容器也加入到当前网络中
- docker network connect mynet <你的项目容器>
- # redis,mysql,的容器 也要加入到网络中
- docker network connect mynet redis
- docker network connect mynet mysql
复制代码
后续功能开发
1.前端代码重构采用vue3写法。
2.会话支持搜索(曾经问过的问题可以快速查找,减少调用token频率)
3.ai回复支持流式响应返回(等待用户访问以为卡住了)
4.ai回复支持语音播放
5.图像文字识别功能
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |