博客 / 詳情

返回

GoChatIAI -Go語言AI應用服務平台

項目描述

基於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服務器賦予可執行權限

chmod +x ./GoChatAI

編寫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.圖像文字識別功能

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.