文章目录
【书生大模型实战营】进阶岛 第5关 茴香豆:企业级知识库问答工具
茴香豆介绍
茴香豆 是由书生·浦语团队开发的一款开源、专门针对国内企业级使用场景设计并优化的知识问答工具。在基础 RAG 课程中我们了解到,RAG 可以有效的帮助提高 LLM 知识检索的相关性、实时性,同时避免 LLM 训练带来的巨大成本。在实际的生产和生活环境需求,对 RAG 系统的开发、部署和调优的挑战更大,如需要解决群应答、能够无关问题拒答、多渠道应答、更高的安全性挑战。因此,根据大量国内用户的实际需求,总结出了三阶段Pipeline的茴香豆知识问答助手架构,帮助企业级用户可以快速上手安装部署。
茴香豆特点:
- 三阶段 Pipeline (前处理、拒答、响应),提高相应准确率和安全性
- 打通微信和飞书群聊天,适合国内知识问答场景
- 支持各种硬件配置安装,安装部署限制条件少
- 适配性强,兼容多个 LLM 和 API
- 傻瓜操作,安装和配置方便
1Web 版茴香豆
Web 版茴香豆部署在浦源平台,可以让大家零编程体验茴香豆的各种功能。这里[https://www.bilibili.com/video/BV1S2421N7mn/?vd_source=7e4756ceffb7b9a505e95401fc1c16cf] 有作者大神亲自的视频演示。
创建 Web 版茴香豆账户和密码
登录 https://openxlab.org.cn/apps/detail/tpoisonooo/huixiangdou-web,可以看到 Web 版茴香豆的知识库注册页面,在对应处输入想要创建的知识库名称和密码,该名称就是 Web 版茴香豆的账户和密码,请牢记,以后对该知识助手进行维护和修改都要使用这个账户和密码。
Web 版茴香豆部署在浦源平台,可以让大家零编程体验茴香豆的各种功能。
可以登录 https://openxlab.org.cn/apps/detail/tpoisonooo/huixiangdou-web使用,这里着重测试本地部署,所以略过。
2茴香豆本地标准版搭建
作为企业应用,非常重要的一点是本地部署。后面尝试将茴香豆从源码部署到本地服务器(以 InternlmStudio 为例),
并开发一款简单的知识助手 Demo。
2.1 环境搭建
2.1.1 配置服务器
登录 InternStudio ,后创建开发机。过程略。
2.1.2 搭建茴香豆虚拟环境
命令行中输入以下命令,创建茴香豆专用 conda 环境:
studio-conda -o internlm-base -t huixiangdou
#创建成功,用下面的命令激活环境:
conda activate huixiangdou
环境激活成功后,命令行前的括号内会显示正在使用的环境,请确保所有茴香豆操作指令在 huixiangdou 环境下运行。
2.2 安装茴香豆
下面开始茴香豆本地标准版的安装。
2.2.1 下载茴香豆
先从茴香豆仓库拉取代码到服务器:
cd /root
#克隆代码仓库
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 79fa810
拉取完成后进入茴香豆文件夹,开始安装。
首先安装茴香豆所需依赖:
conda activate huixiangdou
#parsing word
format requirements
apt update
apt install python-dev libxml2-dev libxslt1-dev antiword unrtf poppler-utils pstotext tesseract-ocr flac ffmpeg lame libmad0 libsox-fmt-mp3 sox libjpeg-dev swig libpulse-dev
#python requirements
pip install BCEmbedding0.15 cmake3.30.2 lit18.1.8 sentencepiece0.2.0 protobuf5.27.3 accelerate0.33.0
pip install -r requirements.txt
#python3.8 安装 faiss-gpu 而不是 faiss
2.2.3 下载模型文件
茴香豆默认会根据配置文件自动下载对应的模型文件,为了节省时间,本次教程所需的模型已经提前下载到服务器中,我们只需要为本次教程所需的模型建立软连接,然后在配置文件中设置相应路径就可以:
#创建模型文件夹
cd /root && mkdir models
#复制BCE模型
ln -s /root/share/new_models/maidalun1020/bce-embedding-base_v1 /root/models/bce-embedding-base_v1
ln -s /root/share/new_models/maidalun1020/bce-reranker-base_v1 /root/models/bce-reranker-base_v1
#复制大模型参数(下面的模型,根据作业进度和任务进行选择一个就行)
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b /root/models/internlm2-chat-7b
完成后可以在相应目录下看到所需模型文件
更改配置文件
执行下面的命令更改配置文件,让茴香豆使用本地模型:
sed -i ‘9s#.#embedding_model_path = “/root/models/bce-embedding-base_v1”#’ /root/huixiangdou/config.ini
sed -i '15s#.#reranker_model_path = “/root/models/bce-reranker-base_v1”#’ /root/huixiangdou/config.ini
sed -i ‘43s#.*#local_llm_path = “/root/models/internlm2-chat-7b”#’ /root/huixiangdou/config.ini
修改后的配置文件如下:
我们看到模型路径已经被替换本地模型路径地址了
知识库创建
修改完配置文件后,就可以进行知识库的搭建,本次教程选用的是茴香豆和 MMPose 的文档,利用茴香豆搭建一个茴香豆和 MMPose 的知识问答助手。
conda activate huixiangdou
cd /root/huixiangdou && mkdir repodir
git clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou
git clone https://github.com/open-mmlab/mmpose --depth=1 repodir/mmpose
#Save the features of repodir to workdir, and update the positive and negative example thresholds into config.ini
mkdir workdir
python -m huixiangdou.service.feature_store
在 huixiangdou 文件加下创建 repodir 文件夹,用来储存知识库原始文档。再创建一个文件夹 workdir 用来存放原始文档特征提取到的向量知识库。
执行后效果
workdir 出现向量化数据
测试知识助手
运行下面的命令,可以用命令行对现有知识库问答助手进行测试:
我们可以看到知识库助手测试验证可以使用的。
Gradio UI 界面测试
茴香豆也用 gradio 搭建了一个 Web UI 的测试界面,用来测试本地茴香豆助手的效果,启动茴香豆 Web UI
conda activate huixiangdou
cd /root/huixiangdou
python3 -m huixiangdou.gradio
看到如上界面,启动完成。
接下来我们使用 启用端口转发到本地7860 端口
ssh -p 40390 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
在本地浏览器中输入 127.0.0.1:7860 打开茴香豆助手测试页面
这里我们使用到知识库 是前面已经创建好的,正反例的信息可以在正例位于 /root/huixiangdou/resource/good_questions.json 文件夹中,反例位于/root/huixiangdou/resource/bad_questions.json 查找
我们的问题 “如何将mmdetection2.28.2的retinanet配置文件改为单尺度的呢?” 模型给我们返回信息如下
在问一个问题“如何使用mmpose检测人体关键点?”
以上信息是基于知识库检索出来 然后在发给后端LLM 大模型进行推理的。上面我们主要是官方提供的例子实现的RAG增加检索。有的小伙伴可能会问了如果使用自己列子呢? 下面我们介绍一下这块如何实现。
在 huixiangdou 文件加下创建 repodir 文件夹,用来储存知识库原始文档。再创建一个文件夹 workdir 用来存放原始文档特征提取到的向量知识库。
知识库创建成功后会有一系列小测试,检验问题拒答和响应效果,如图所示,关于“mmpose 安装”的问题,测试结果可以很好的反馈相应答案和对应的参考文件,但关于“std::vector 使用”的问题,因为属于 C++ 范畴,不再在知识库范围内,测试结果显示拒答,说明我们的知识助手工作正常。
和 Web 版一样,本地版也可以通过编辑正反例来调整茴香豆的拒答和响应,
正例位于 /root/huixiangdou/resource/good_questions.json 文件夹中
反例位于/root/huixiangdou/resource/bad_questions.json
这里增加一条反例问题做测试:【 “你喜欢玄幻小说吗”】
需要注意的是,每次更新原始知识文档和正反例,都需要重新运行 python3 -m huixiangdou.service.feature_store 命令进行向量知识库的重新创建和应答阈值的更新。
在运行过一次特征提取后,茴香豆的阈值从 -1.0 更新到了 0.33。 配置文件中的 work_dir 参数指定了特征提取后向量知识库存放的位置。如果有多个知识库快速切换的需求,可以通过更改该参数实现。
集成飞书&微信群聊
本地版茴香豆的群集成和 Web 版一样,需要有公网 IP 的服务器,微信仅支持特定 Android 版本。
飞书集成:
pip install -r requirements-lark-group.txt
教程 https://github.com/InternLM/HuixiangDou/blob/main/docs/add_lark_group_zh.md