0 AnyQ对话框架介绍
AnyQ(即 Answer your Question)是由百度开发的对话框架,也是首个基于语义计算的 FAQ 问答系统,GitHub项目链接:baidu/AnyQ 。
![3859a2c81e37c3072f0013f607ee2051.png](https://i-blog.csdnimg.cn/blog_migrate/3886039fde7bba799f0ced395840423f.jpeg)
下面介绍如何使用AnyQ并运行Demo文件
1 Docker 安装与镜像下载
因为很多包都是linux的环境下才可以用的,所以建议windows或者Mac用户用docker的方式运行,否则很多包会用不了,Docker安装链接。
如何保证Docker安装成功,可以采用以下代码:
docker version
若同时显示Client与Server的版本和相关信息则为安装正常,有可能出现Server的版本号无法显示出来,则需要采用其他方案修修补补。
完成安装后,下载paddlepaddle镜像,飞浆开源深度学习平台介绍。
- paddle官方镜像
docker pull paddlepaddle/paddle:latest-dev
- paddle国内镜像
docker pull docker.paddlepaddlehub.com/paddle:latest-dev
(本人实测发现国内镜像下载有问题,而使用官方镜像未报错)
2 容器创建与运行
2.0 容器与镜像的区别
- 镜像(Image)就是一堆只读层(read-only layer)的统一视角。
- 容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
- 要点:容器 = 镜像 + 读写层,并且容器的定义并没有提及是否要运行容器。
- 参考资料:10张图带你深入理解Docker容器和镜像
2.1 容器创建与进入
docker run -p 8999:8999 -p 8900:8900 -ti paddlepaddle/paddle:latest-dev bash
命令解释:docker run <相关参数> <镜像 ID> <初始命令>
- -p:表示可以指定要映射的端口,在一个指定端口上只可以绑定一个容器。支持的格式为hostPort:containerPort。
- 这里表示将宿主机的8999和8900端口和docker容器中的8999和8900互通。因为这两个端口将在demo中用到。8999端口用于anyq服务的端口,8900则是Solr的服务端口。
- -i:表示以“交互模式”运行容器
- -t:表示容器启动后会进入其命令行
- -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
(这一步经过了很多尝试,上述命令为创建容器的最终命令)
之后如果需要重新进入,需要首先运行容器,
docker start bccc4a87c278 (container ID)
之后进入容器内部就可以了。
docker exec -it bccc4a87c278 (container ID) bash
查看正在运行的容器
docker ps
(如果容器运行成功,此处会显示容器信息)
查看容器列表
docker ps -a
查看镜像情况
docker images
清除未运行的容器
docker container prune
这个命令可以直接删除停止的容器(会询问,-f 选项强制),不过删除需谨慎,请确认后再操作。
2.2 Docker中AnyQ框架下载与应用
(1)首先需要在Docker中将项目clone下来
git clone https://github.com/baidu/AnyQ.git
期间可能出现安装包无法下载的问题,一般有两个解决方案:
- 由于git默认缓存大小不足导致的,使用下面的命令增加缓存大小
$ git config --global http.postBuffer 2000000000
- 重新安装git
$ sudo apt-get purge git
$ sudo apt-get install git
当然,可能还是无法运行成功,最终采用了百度AnyQ的编译部署 中的方案,将external文件全部替换,external文件链接:https://pan.baidu.com/s/1lDLKwZcvtzgG9jXbFw3h4Q 密码: e0se。
替换过程,首先将该压缩文件下载后,通过如下命令复制到容器内
docker cp 文件路径 CONTAINER ID:文件路径
接下来在容器内解压,并逐步更换到容器内原本external文件的位置,需要注意的是,一定要区分本机的文件夹与容器内文件夹。
(2)接下来需要执行cmake与make命令
cd AnyQ
mkdir build && cd build && cmake .. & make
该段命令可能需要很多很多次的重复执行才成功,建议可以将最后的cmake命令与make命令分开执行,如果发现make命令始终报错,可以使用make -i
后续若还有相关问题无法解决,见百度AnyQ的编译部署
(3)安装JDK
wget http://anyq.bj.bcebos.com/jdk-8u171-linux-x64.tar.gz # 下载
tar xzvf jdk-8u171-linux-x64.tar.gz # 解压
export PATH=`pwd`/jdk1.8.0_171/bin:$PATH # 加载系统路径 (容器内路径)
判断JDK安装是否成功可以采用
java -version
如果不想每次进去都安装JDK,则可以使用以下命令(需要提前安装vim)
vi ~/.bashrc # 编辑.bashrc文件
export PATH=AnyQ/build/jdk1.8.0_171/bin:$PATH # 在该文件末尾添加该配置
source ~/.bashrc # 需要使用source命令,让环境变量生效
(4)获取AnyQ定制solr,并将数据导入到Solr库中,启动solr
cp ../tools/anyq_deps.sh .
sh anyq_deps.sh
cp ../tools/solr -rp solr_script
sh solr_script/anyq_solr.sh solr_script/sample_docs # 如果运行失败,就在Build目录下运行
删除build文件夹
rm -rf build
(5)运行Demo
./run_server
打开浏览器,输入
http://localhost:8900/solr/#/
可以查看Solr搜索引擎的admin页面,也可以在Postman中调用接口localhost:8999/anyq?question=需要使用什么账号登录 查看调用结果。