在线聊天的总体架构与工具介绍:Flask web、Redis、Gunicorn服务组件、Supervisor服务监控器、Neo4j图数据库

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


智能对话系统:Unit对话API

在线聊天的总体架构与工具介绍:Flask web、Redis、Gunicorn服务组件、Supervisor服务监控器、Neo4j图数据库

linux 安装 neo4jlinux 安装 Redissupervisor 安装

neo4j图数据库:Cypher

neo4j图数据库:结构化数据流水线、非结构化数据流水线

命名实体审核任务:BERT中文预训练模型

命名实体审核任务:构建RNN模型

命名实体审核任务:模型训练

命名实体识别任务:BiLSTM+CRF part1

命名实体识别任务:BiLSTM+CRF part2

命名实体识别任务:BiLSTM+CRF part3

在线部分:werobot服务、主要逻辑服务、句子相关模型服务、BERT中文预训练模型+微调模型(目的:比较两句话text1和text2之间是否有关联)、模型在Flask部署

系统联调测试与部署

离线部分+在线部分:命名实体审核任务RNN模型、命名实体识别任务BiLSTM+CRF模型、BERT中文预训练+微调模型、werobot服务+flask


2.1 在线医生的总体架构

  • 学习目标:
    • 了解在线医生项目的总体架构

  • 项目整体架构图:

  • 架构图分析:
    • 整个项目分为: 在线部分和离线部分
    • 在线部分包括: werobot服务模块, 主要逻辑服务模块, 句子相关模型服务模块, 会话管理模块(redis), 图数据库模块以及规则对话/Unit模块.
    • 离线部分包括: 结构与非结构化数据采集模块, NER模型使用模块, 以及实体审核模型使用模块.
    • 在线部分数据流: 从用户请求开始, 通过werobot服务, 在werobot服务内部请求主服务, 在主服务中将调用会话管理数据库redis, 调用句子相关模型服务, 以及调用图数据库, 最后将查询结果输送给对话规则模版或者使用Unit对话API回复.
    • 离线部分数据流: 从数据采集开始, 将获得结构化和非结构化的数据, 对于结构化数据将直接使用实体审核模型进行审核, 然后写入图数据库; 对于非结构化数据, 将使用NER模型进行实体抽取, 然后通过实体审核后再写入图数据库.

2.2 总体架构中的工具介绍


  • 学习目标:
    • 了解总体架构中使用了哪些工具.
    • 掌握总体架构中各个工具的简介, 作用, 安装和基本使用方法.

  • 总体架构中使用的工具:
    • Flask web服务框架
    • Redis数据库
    • Gunicorn服务组件
    • Supervisor服务监控器
    • Neo4j图数据库

  • Flask web服务框架:

简介:

  • Flask框架是当下最受欢迎的python轻量级框架, 也是pytorch官网指定的部署框架. Flask的基本模式为在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值,其工作过程见图.

  • 作用:
    • 在项目中, Flask框架是主逻辑服务和句子相关模型服务使用的服务框架.

  • 安装:
# 使用pip安装Flask
pip install Flask==1.1.1
  • 基本使用方法:
# 导入Flask类
from flask import Flask
# 创建一个该类的实例app, 参数为__name__, 这个参数是必需的,
# 这样Flask才能知道在哪里可找到模板和静态文件等东西.
app = Flask(__name__)

# 使用route()装饰器来告诉Flask触发函数的URL
@app.route('/')
def hello_world():
    """请求指定的url后,执行的主要逻辑函数"""
    # 在用户浏览器中显示信息:'Hello, World!'
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000)

  • 启动服务:
python app.py

  • 启动效果:
    • 通过浏览器打开地址http://0.0.0.0:5000可看见打印了'Hello, World'.

# 导入Flask类
from flask import Flask
# 创建一个该类的实例app, 参数为__name__, 这个参数是必需的,
# 这样Flask才能知道在哪里可找到模板和静态文件等东西.
app = Flask(__name__)

# 使用route()装饰器来告诉Flask触发函数的URL
@app.route('/')
def hello_world():
    """请求指定的url后,执行的主要逻辑函数"""
    # 在用户浏览器中显示信息:'Hello, World!'
    return 'Hello, World!'

if __name__ == '__main__':
    """
    1.第一种方式启动flask:直接右键运行当前文件,然后即可以访问 http://192.168.88.26:5000/
    2.第一种方式启动flask:
        通过使用gunicorn来加载flask来运行的命令:nohup gunicorn -w 1 -b 192.168.88.26:5000 Flaskweb:app &
        然后即可以访问 http://192.168.88.26:5000/
        关闭gunicorn的方式:
                通过搜索运行的py文件名:ps aux|grep Flaskweb
                kill -9 xxx
    """
    app.run(host="192.168.88.26", port=5000)

"""
1.简介:
    Gunicorn是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务组件(WSGI: Web Server Gateway Interface),移植自Ruby的独角兽(Unicorn )项目,具有使用非常简单,轻量级的资源消耗,以及高性能等特点.
2.作用:
    在项目中, Gunicorn和Flask框架一同使用, 能够开启服务, 处理请求,因其高性能的特点能够有效减少服务丢包率.
3.安装:
    # 使用pip安装gunicorn
    pip install gunicorn
4.基本使用方法:
    使用其启动Flask服务:
        gunicorn -w 1 -b 0.0.0.0:5000 Flaskweb:app
        gunicorn -w 1 -b 192.168.88.26:5000 Flaskweb:app
        -w 代表开启的进程数, 我们只开启一个进程
        -b 服务的IP地址和端口
    Flaskweb:app 是指执行的主要对象位置, 在Flaskweb.py.py中的app对象
    如果使其在后台运行可使用:
        nohup gunicorn -w 1 -b 0.0.0.0:5000 Flaskweb:app &
        nohup gunicorn -w 1 -b 192.168.88.26:5000 Flaskweb:app &
    然后即可以访问 http://192.168.88.26:5000/
    关闭gunicorn的方式:
            通过搜索运行的py文件名:ps aux|grep Flaskweb
            kill -9 xxx
"""


  • Redis数据库:

  • 简介:
    • Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API.

  • 作用:
    • 在项目中, Redis用于会话管理数据库, 保存用户聊天历史.

  • 安装:
# 使用yum安装redis
yum install redis -y

  • 基本使用方法:
    • Redis支持四种数据结构的存储: String(字符串), Hash(散列), List(列表), Set(集合), Sorted Set(有序集合).
    • 在这里我们将着重介绍如何在python中使用Hash(散列)进行读写.

  • 安装python中的redis驱动:
# 使用pip进行安装
pip install redis

  • 启动redis服务:
# 启动redis-server, 这里使用了默认配置, 端口是6379.
redis-server

  • 在python中使用Hash(散列)进行读写:
# coding=utf-8
# redis配置
REDIS_CONFIG = {
     "host": "0.0.0.0",
     "port": 6379
}

# 导入redis驱动
import redis

# 创建一个redis连接池
pool = redis.ConnectionPool( **REDIS_CONFIG)
# 从连接池中初始化一个活跃的连接对象
r = redis.StrictRedis(connection_pool=pool)
# hset表示使用hash数据结构进行数据写入
# uid代表某个用户的唯一标识
uid = "8888"
# key是需要记录的数据描述
key = "该用户最后一次说的话:".encode('utf-8')
# value是需要记录的数据具体内容
value = "再见, 董小姐".encode('utf-8')
r.hset(uid, key, value)


# hget表示使用hash数据结构进行数据读取
result = r.hget(uid, key)
print(result.decode('utf-8'))

  • 输出效果:
再见, 董小姐

# 导入redis驱动:pip install redis
import redis

# coding=utf-8
# redis配置
REDIS_CONFIG = {
     "host": "192.168.88.26",
     "port": 6379
}

# 创建一个redis连接池
pool = redis.ConnectionPool( **REDIS_CONFIG)
# 从连接池中初始化一个活跃的连接对象
r = redis.StrictRedis(connection_pool=pool)
# hset表示使用hash数据结构进行数据写入
# uid代表某个用户的唯一标识
uid = "8888"
# key是需要记录的数据描述
key = "该用户最后一次说的话:".encode('utf-8')
# value是需要记录的数据具体内容
value = "再见, 董小姐".encode('utf-8')
r.hset(uid, key, value)

# hget表示使用hash数据结构进行数据读取
result = r.hget(uid, key)
print(result.decode('utf-8'))


  • Gunicorn服务组件:

  • 简介:
    • Gunicorn是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务组件(WSGI: Web Server Gateway Interface),移植自Ruby的独角兽(Unicorn )项目,具有使用非常简单,轻量级的资源消耗,以及高性能等特点.

  • 作用:
    • 在项目中, Gunicorn和Flask框架一同使用, 能够开启服务, 处理请求,因其高性能的特点能够有效减少服务丢包率.

  • 安装:
# 使用pip安装gunicorn
pip install gunicorn==20.0.4

  • 基本使用方法:
# 使用其启动Flask服务:
gunicorn -w 1 -b 0.0.0.0:5000 app:app
# -w 代表开启的进程数, 我们只开启一个进程
# -b 服务的IP地址和端口
# app:app 是指执行的主要对象位置, 在app.py中的app对象
# 如果使其在后台运行可使用:
# nohup gunicorn -w 1 -b 0.0.0.0:5001 app:app &

"""
简介:
    Gunicorn是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务组件(WSGI: Web Server Gateway Interface),移植自Ruby的独角兽(Unicorn )项目,具有使用非常简单,轻量级的资源消耗,以及高性能等特点.
作用:
    在项目中, Gunicorn和Flask框架一同使用, 能够开启服务, 处理请求,因其高性能的特点能够有效减少服务丢包率.
安装:
    # 使用pip安装gunicorn
    pip install gunicorn
"""

#基本使用方法:
#   使用其启动Flask服务:
#       gunicorn -w 1 -b 0.0.0.0:5000 app:app
#           -w 代表开启的进程数, 我们只开启一个进程
#           -b 服务的IP地址和端口
# app:app 是指执行的主要对象位置, 在app.py中的app对象
# 如果使其在后台运行可使用:
# nohup gunicorn -w 1 -b 0.0.0.0:5001 app:app &
"""
基本使用方法:
    使用其启动Flask服务:
        命令格式:gunicorn -w 1 -b IP:端口 py文件名:app
        gunicorn -w 1 -b 0.0.0.0:5000 Flaskweb:app
        gunicorn -w 1 -b 192.168.88.26:5000 Flaskweb:app
        -w 代表开启的进程数, 我们只开启一个进程
        -b 服务的IP地址和端口
    Flaskweb:app 是指执行的主要对象位置, 在Flaskweb.py.py中的app对象
    如果使其在后台运行可使用:
        nohup gunicorn -w 1 -b 0.0.0.0:5000 Flaskweb:app &
        nohup gunicorn -w 1 -b 192.168.88.26:5000 Flaskweb:app &
    然后即可以访问 http://192.168.88.26:5000/
    关闭gunicorn的方式:
            通过搜索运行的py文件名:ps aux|grep Flaskweb
            kill -9 xxx
"""


  • Supervisor服务监控:
  • 简介:
    • Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。它可以很方便的监听、启动、停止、重启一个或多个进程, 并守护这些进程。

  • 作用:
    • 在项目中, Supervisor用于监控和守护主要逻辑服务和redis数据库服务.

  • 安装:
# 使用yum安装supervisor
yum install supervisor -y

  • 基本使用方法:
# 编辑配置文件, 指明监控和守护的进程开启命令, 
# 请查看/data/doctor_online/supervisord.conf文件
# 开启supervisor, -c用于指定配置文件
sueprvisord -c /data/doctor_online/main_server/supervisord.conf

# 查看监控的进程状态:
supervisorctl status

# main_server                      RUNNING   pid 31609, uptime 0:32:20
# redis                            RUNNING   pid 31613, uptime 0:32:18

# 关闭supervisor
supervisorctl shutdown 

  • 还可以通过浏览器查看可视化监控页面: http://0.0.0.0:9001


Neo4j图数据库:

  • 因为在项目中, Neo4j图数据库作为核心的存储和查询数据库。

本章总结:

  • 学习了架构图分析:
    • 整个项目分为: 在线部分和离线部分
    • 在线部分包括: werobot服务模块, 主要逻辑服务模块, 句子相关模型服务模块, 会话管理模块(redis), 图数据库模块以及规则对话/Unit模块.
    • 离线部分包括: 结构与非结构化数据采集模块, NER模型使用模块, 以及实体审核模型使用模块.

  • 学习了总体架构中使用的工具:
    • Flask web服务框架
    • Redis数据库
    • Gunicorn服务组件
    • Supervisor服务监控器
    • Neo4j图数据库

  • Flask web服务框架:
    • 作用: 在项目中, Flask框架是主逻辑服务和句子相关模型服务使用的服务框架.

  • Redis数据库:
    • 作用: 在项目中, Redis用于会话管理数据库, 保存用户聊天历史.

  • Gunicorn服务组件:
    • 作用: 在项目中, Gunicorn和Flask框架一同使用, 能够开启服务, 处理请求,因其高性能的特点能够有效减少服务丢包率.

  • Supervisor服务监控:
    • 作用: 在项目中, Supervisor用于监控和守护主要逻辑服务和redis数据库服务.

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

あずにゃん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值