书生大模型实战营(第三期闯关大挑战)- 进阶岛 第五关 茴香豆:企业级知识库问答工具

茴香豆本地标准版搭建

茴香豆介绍

茴香豆 是由书生·浦语团队开发的一款开源、专门针对国内企业级使用场景设计并优化的知识问答工具。在基础 RAG 课程中我们了解到,RAG 可以有效的帮助提高 LLM 知识检索的相关性、实时性,同时避免 LLM 训练带来的巨大成本。在实际的生产和生活环境需求,对 RAG 系统的开发、部署和调优的挑战更大,如需要解决群应答、能够无关问题拒答、多渠道应答、更高的安全性挑战。因此,根据大量国内用户的实际需求,总结出了三阶段Pipeline的茴香豆知识问答助手架构,帮助企业级用户可以快速上手安装部署。

茴香豆特点

  • 三阶段 Pipeline (前处理、拒答、响应),提高相应准确率和安全性
  • 打通微信和飞书群聊天,适合国内知识问答场景
  • 支持各种硬件配置安装,安装部署限制条件少
  • 适配性强,兼容多个 LLM 和 API
  • 傻瓜操作,安装和配置方便

image-20240826154336043

本地环境搭建-使用InternStudio

首先登录 InternStudio ,选择30%A100 资源

image-20240825234147949

启动

image-20240825234242171

点击进入开发机

搭建茴香豆虚拟环境

studio-conda -o internlm-base -t huixiangdou
# 激活虚拟环境(注意:后续的所有操作都需要在这个虚拟环境中进行)
conda activate huixiangdou
cd /root
# 克隆代码仓库
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 79fa810
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
pip install BCEmbedding==0.1.5 cmake==3.30.2 lit==18.1.8 sentencepiece==0.2.0 protobuf==5.27.3 accelerate==0.33.0
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

下载模型文件

# 创建模型文件夹
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

完成后可以在相应目录下看到所需模型文件

image-20240825235724754

更改配置文件

执行下面的命令更改配置文件,让茴香豆使用本地模型:

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

修改后的配置文件如下:

image-20240826000046255

我们看到模型路径已经被替换本地模型路径地址了

知识库创建

修改完配置文件后,就可以进行知识库的搭建,本次教程选用的是茴香豆和 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 用来存放原始文档特征提取到的向量知识库。
在这里插入图片描述

执行后效果

image-20240826144725890

workdir 出现向量化数据
在这里插入图片描述

测试知识助手

运行下面的命令,可以用命令行对现有知识库问答助手进行测试:

conda activate huixiangdou
cd /root/huixiangdou
python -m huixiangdou.main --standalone

image-20240826135612740

我们可以看到知识库助手测试验证可以使用的。

Gradio UI 界面测试

茴香豆也用 gradio 搭建了一个 Web UI 的测试界面,用来测试本地茴香豆助手的效果,启动茴香豆 Web UI

conda activate huixiangdou
cd /root/huixiangdou
python3 -m huixiangdou.gradio

image-20240826135350263

看到如上界面,启动完成。

接下来我们使用 启用端口转发到本地7860 端口

ssh -p 40552 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no

image-20240826135955075

在本地浏览器中输入 127.0.0.1:7860 打开茴香豆助手测试页面
在这里插入图片描述

这里我们使用到知识库 是前面已经创建好的,正反例的信息可以在正例位于 /root/huixiangdou/resource/good_questions.json 文件夹中,反例位于/root/huixiangdou/resource/bad_questions.json 查找

image-20240826141755945

我们的问题 “如何将mmdetection2.28.2的retinanet配置文件改为单尺度的呢?” 模型给我们返回信息如下

image-20240826145918618

在问一个问题“如何使用mmpose检测人体关键点?”

image-20240826150018145

以上信息是基于知识库检索出来 然后在发给后端LLM 大模型进行推理的。上面我们主要是官方提供的例子实现的RAG增加检索。有的小伙伴可能会问了如果使用自己列子呢? 下面我们介绍一下这块如何实现。

创建自己知识库

首先我们需要找一个知识库,这里我们就以《少年歌行》小说为蓝本做测试,因为考虑这个本小说书较大,所以我们节选了小说的一部分内容。

image-20240826160332755

节选小说内容大概 3512行,总字数有153355字

image-20240826160426012

我们上面提到我们在创建知识库文档向量化的是用到了 正反例的信息。 也就是我们需要修改原项目中的/root/huixiangdou/resource/good_questions.json 和/root/huixiangdou/resource/bad_questions.json

我们打开原来的good_questions.json 和bad_questions.json

image-20240826160807656

这里的提示词信息不是我们少年歌行小说书里面的内容,这块我们需要修改。因为编写这个正反例提示词工作量也比较大,我们可以借助gpt 等大模型来实现。

使用claude3.5 生成正反例的数据

我们将要少年歌行2.txt 和good_questions.json 和bad_questions.json 三个文件发给claude3.5 让他参考文档内容改写我们要的good_questions.json 和bad_questions.json在这里插入图片描述

claude3.5 接受到消息后理解了我的意思 ,给我整理和小说内容的信息的正反提示词

image-20240826161320840

整理的结果

good_questions.json

[
  "少年歌行的主角是谁?",
  "小说中的素衣女子是什么角色?",
  "萧瑟在故事中扮演什么角色?",
  "少年歌行的主要标签是什么?",
  "小说中的红衣少年有什么特殊能力?",
  "故事中提到的'天启乘龙位'是什么?",
  "小说中描述的战斗场景有哪些特点?",
  "少年歌行的故事背景是什么样的?",
  "小说中的逆袭元素体现在哪里?",
  "作者周木楠在小说中塑造了什么样的人物形象?",
  "少年歌行的主题思想是什么?",
  "小说中的友情元素如何体现?",
  "故事中的武器描写有哪些?",
  "少年歌行的结局是怎样的?",
  "小说中的热血场景有哪些?"
]

bad_questions.json

[
  "少年歌行和哈利波特有什么关系?",
  "小说中有外星人吗?",
  "萧瑟喜欢吃什么食物?",
  "作者周木楠的生日是哪天?",
  "少年歌行的故事发生在2023年吗?",
  "小说中有没有描写现代科技?",
  "红衣少年会使用手机吗?",
  "素衣女子的衣服是哪个品牌的?",
  "小说中有没有提到COVID-19?",
  "少年歌行的故事是不是发生在美国?",
  "作者写这本书用了多长时间?",
  "小说中有没有出现汽车?",
  "故事里的角色会上网吗?",
  "少年歌行的电影版什么时候上映?",
  "小说中有没有描写太空旅行?"
]

替换正反提示词

整理的还不错,我们也只是测试,所以不需要太多提示词。将以上2个json 文件上传/root/huixiangdou/resource 目录替换原来的2个json文件

image-20240826161741222

修改测试代码

打开/root/huixiangdou/huixiangdou/service/feature_store.py 第297行test_reject 代码中把原来提示词换成我们上面的部分提示词

image-20240826162634529

重新创建知识库

​ 我们将节选小说上传到/root/huixiangdou/repodir 目录下

image-20240826162831376

输入如下命令重新创建知识库

conda activate huixiangdou
cd /root/huixiangdou
python -m huixiangdou.service.feature_store

Gradio UI 界面测试

我们参考上面的内容执行如下代码把Gradio UI 运行起来

conda activate huixiangdou
cd /root/huixiangdou
python3 -m huixiangdou.gradio

启动完成后,页面输入127.0.0.1:7860` 打开茴香豆助手测试页面

image-20240826164251951

在测试一个问题

image-20240826164710696

以上就是我们使用茴香豆创建自己知识库来实现文档检索功能。感兴趣的小伙伴可以参考文档自己做一遍。

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值