1 Star 0 Fork 6

wssam / faq-qa-sys-v2

forked from lerry_lca / faq-qa-sys-v2 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

FAQ问答系统

采用了微服务架构,是对单体架构的升级。

项目采用了Spring Boot,Spring Cloud Alibaba,MyBatis等核心技术,同时提供了前端界面用于访问系统。

系统架构图

系统架构

组织结构

faq-qa-sys-v2
├── gateway                 -- 基于Spring Cloud Gateway的微服务API网关服务
├── microservice-dialogue   -- 对话微服务
└── microservice-management -- 管理微服务

项目功能

对话系统

对话系统已实现的功能如下:

  • 单轮/多轮问答
  • 记录未识别问题
  • 历史记录
  • 收集用户反馈

管理系统

管理系统已实现的功能如下:

  • 全量同步
  • 批量导入问答对/相似问对
  • 更新问答对/相似问对
  • 删除问答对/相似问对
  • 记录未识别问题

技术选型

数据库

技术 说明
MySQL 关系型数据库
Redis 缓存数据库
Elasticsearch 检索引擎/文档型数据库

后端

技术 说明
Spring Boot Java应用框架
Spring Cloud 微服务框架
Spring Cloud Alibaba 微服务框架
MyBatis ORM框架
MyBatis Generator 数据层代码生成器
Lombok 简化对象封装工具
Log4j2 日志管理
SpringFox Swagger2 API文档框架
Rest high level client Elasticsearch Java客户端

工具中间件

工具 说明
Nginx Web服务器
Kibana 数据可视化工具
Nacos 服务发现与注册中心
Sentinel 流量控制组件
Ribbon 客户端负载均衡工具
RocketMQ 消息中间件

前端

技术 说明
ChatUI 搭建智能对话机器人的前端框架
LayUI 前端框架

环境搭建

开发环境

工具 版本
JDK 1.8
MySQL 8.0
Redis 5.0
Elasticsearch 6.8.13
Kibana 6.8.13
Nginx -
Nacos Server 1.4.1
Sentinel Dashboard 1.8.0
RocketMQ 4.8.0

搭建步骤

JDK

关于JDK的配置可参考该教程

Redis

关于Redis的下载安装和启动可参考该教程

Elasticsearch6.x(6.8.13)

  1. 关于Elasticsearch6.x的下载安装和启动可参考该教程
  #cd到es目录
  bin/elasticsearch
  1. 配置中文分词插件

下载和es对应版本的ik分词插件,解压里面的内容到es根目录的plugins/ik

新建用户自定义词典data/dictionary/user_word.dic放在es根目录的plugins/ik/config/user_word.dic

user_word.dic内容示例如下(一个自定义词一行):

兰陵王入阵曲

然后在用户自定义词典的统计目录下,修改ik配置vim IKAnalyzer.cfg.xml

    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">user_word.dic</entry>
  1. 配置同义词库

新建同义词库data/dictionary/synonym.txt放在es根目录的config/analysis/synonym.txt

synonym.txt内容示例如下(使用最简单的表达形式)

jump,leap,hop

如果遇到这些词项中的任何一项,则将其替换为所有列出的同义词。关于其他同义词形式参考官方文档

MySQL

  1. 关于MySQL的下载安装和启动可参考该教程

  2. 启动成功后,通过命令use qadb; 进入qadb数据库,若没有可通过如下语句创建

CREATE DATABASE IF NOT EXISTS qadb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
  1. 导入项目根目录下/sql/qadb.sql,将在qadb数据库中创建4张表stdq_stdastdq_simqfeedbackhistory,使用以下命令导入
source qadb.sql;

Nginx

Nginx是高性能的Web和反向代理服务器 ,关于Nginx的安装配置可参考该教程

  #cd到nginx目录,启动
  sudo sbin/nginx -c conf/nginx.conf
  #cd到nginx目录,平滑重启
  sudo sbin/nginx -c conf/nginx.conf -s reload
  1. 拦截静态页面
    # 编辑nginx.conf
   server {
        listen       8600;
        server_name  localhost;
        # 配置对话页面的请求路由
        location /qa-ui {
            alias /home/lca/code/ui/qa-ui/;
            index dialogue.html;
        }
    }
  1. 转发其他请求
   server {
        listen       8600;
        server_name  localhost;
        # 转发其他请求到服务网关
        location / {
            proxy_pass http://localhost:8900;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
        }
    }
  1. 配置相似度服务代理
    # 假定启动两个相似度模型服务,端口号分别为6661和6662,weight表示访问权重
    upstream sim_server {
        server localhost:6101 weight=1;
        server localhost:6102 weight=1;
        keepalive 30;
    }
    # 6100端口的/sim请求将被转发到sim_server上
    server {
        listen       6100;
        server_name  localhost;
        # 转发其他请求到服务网关
        location /sim {
            proxy_pass http://sim_server;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
        }
    }

重启nginx,可通过localhost:8600/qa-ui访问对话页面

Nacos Server

搭建Nacos Server,可参考官方文档

  1. 下载和Spring Cloud Alibaba版本对应的Nacos

  2. 启动服务器

        # Linux/Unix/Mac 启动命令(standalone代表着单机模式运行,非集群模式):
        sh startup.sh -m standalone
        
        # 如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
        bash startup.sh -m standalone
        
        # Windows启动命令(standalone代表着单机模式运行,非集群模式):
        startup.cmd -m standalone
  3. 访问localhost:8848/nacos,使用nacos/nacos登陆控制台

Sentinel Dashboard

  1. 下载Sentinel控制台Dashboard

  2. 启动控制台java -jar sentinel-dashboard.jar,启动成功后通过浏览器访问localhost:8080,使用sentinel/sentinel登陆

RocketMQ

  1. 下载RocketMQ,按照官方文档启动Name Server和Broker
  #启动name server
  sh bin/mqnamesrv
  #启动broker
  sh bin/mqbroker -n localhost:9876
  1. 下载控制台源码

    1. 用IDE打开rocketmq-console,编辑配置文件application.properties
    # console端口
    server.port=17890
    # nameserver地址
    rocketmq.config.namesrvAddr=localhost:9876
    1. 修改pom依赖

    在pom.xml中找到该行,修改版本为你rocketmq的版本

       <rocketmq.version>4.8.0</rocketmq.version>
    1. 打包

    进入rocketmq-console目录,输入下面命令

       mvn clean package -Dmaven.test.skip=true
    1. 启动

    进入target目录,启动jar

       java -jar rocketmq-console-ng-2.0.0.jar
    1. 访问控制台

    通过浏览器访问localhost:17890/#/

项目启动

确保在上一步骤已经完成了环境的搭建,接下来分别启动相似度服务、网关服务、对话微服务和管理微服务

相似度服务启动

关于相似度服务的启动参考readme

网关服务启动

关于网关服务的启动参考readme

对话微服务启动

关于对话微服务的启动参考readme

管理微服务启动

关于管理微服务的启动参考readme

附录

前端演示UIQA-UI

关于开发过程中的微服务技术的整合、配置步骤,参考这里

MIT License Copyright (c) 2022 lerry_lca Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

FAQ问答系统,使用微服务架构。 展开 收起
Java
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/wsgtzn/faq-qa-sys-v2.git
git@gitee.com:wsgtzn/faq-qa-sys-v2.git
wsgtzn
faq-qa-sys-v2
faq-qa-sys-v2
main

搜索帮助