L2-茴香豆:企业级知识库问答工具

任务链接:https://github.com/InternLM/Tutorial/blob/camp3/docs/L2/Huixiangdou/task.md

文档链接:https://github.com/InternLM/Tutorial/tree/camp3/docs/L2/Huixiangdou

目录

0. 背景

1. Web 版茴香豆

1.1 茴香豆账户和密码

1.2 创建知识库

1.3 通过配置正反例调优知识助手效果 

1.4 在微信群或飞书群内使用茴香豆助手

2. 茴香豆本地标准版搭建

2.1 安装茴香豆

2.2 更改配置文件

2.3 知识库搭建

2.4 测试知识助手

2.4.1 命令行运行

2.4.2 Gradio UI 界面测试

2.5 集成飞书&微信群聊(略)

3 茴香豆高阶应用

3.1 开启网络搜索


0. 背景

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

1. Web 版茴香豆

1.1 茴香豆账户和密码

登录 OpenXLab浦源 - 应用中心,可以看到 Web 版茴香豆的知识库注册页面,在对应处输入想要创建的知识库名称和密码,该名称就是 Web 版茴香豆的账户密码

1.2 创建知识库

我们来创建一个民法典助手

问一个问题 

 

1.3 通过配置正反例调优知识助手效果 

茴香豆的架构中,除了利用 LLM 的功能判断问题相关性,也可以通过手动添加正例(希望模型回答的问题)和反例(希望模型拒答的问题)来调优知识助手的应答效果。

对于正例相似问题,茴香豆会在知识库中尽量搜寻相关解答,在没有相关知识的情况下,会推测答案,并在回答中提示我们该回答并不准确。这保证了回答的可追溯性;对于反例问题,茴香豆拒绝作答,这保证了在对话,尤其是企业级群聊中的闲聊、非问题和无关问题触发回答带来的回答混乱和资源浪费。

1.4 在微信群或飞书群内使用茴香豆助手

飞书教程:Docs

 

2. 茴香豆本地标准版搭建

2.1 安装茴香豆

# 环境创建
studio-conda -o internlm-base -t huixiangdou
conda activate huixiangdou

# 安装
cd /root
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 79fa810

# 安装依赖
# 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 BCEmbedding 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
# python3.8 安装 faiss-gpu 而不是 faiss


# 复制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

# 拷贝llm
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b /root/models/internlm2-chat-7b

2.2 更改配置文件

茴香豆的所有功能开启和模型切换都可以通过 /root/huixiangdou/config.ini 文件进行修改 

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

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

2.3 知识库搭建

知识库搭建选用的是茴香豆和 MMPose 的文档,利用茴香豆搭建一个茴香豆和 MMPose 的知识问答助手。 repodir 文件夹用来储存知识库原始文档; workdir 文件夹用来存放原始文档特征提取到的向量知识库。

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
python3 -m huixiangdou.service.feature_store

运行结果 ​​​​​​

知识库创建成功后会有一系列小测试,检验问题拒答和响应效果,如图所示,关于“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 参数指定了特征提取后向量知识库存放的位置。如果有多个知识库快速切换的需求,可以通过更改该参数实现。

2.4 测试知识助手

2.4.1 命令行运行

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

Example 中有两个问题:

1. 请问如何安装 mmpose ?

2. 请问明天天气如何?

显然第一个问题是可以在知识库中找到的,而第二个需要联网查询,让我们观察以下的输出: 

前面拼接了一系列的 prompt,这里开始在文档中进行查询

经过一系列步骤,最终正确回答了问题 

针对第二个问题 

网络搜索功能没有开启,查询失败 

 

2.4.2 Gradio UI 界面测试

启动 Gradio

python3 -m huixiangdou.gradio

启动成功 

 茴香豆助手搭建在远程服务器上,因此需要先建立本地和服务器之间的透传,透传默认的端口为 7860,在本地机器命令行中运行如下命令: 

ssh -CNg -L 7860:127.0.0.1:7860 root@ssh.intern-ai.org.cn -p <你的ssh端口号>

 Gradio 界面,来问它一个问题

 结果

看一下命令行的输出 

2.5 集成飞书&微信群聊(略)

本地版茴香豆的群集成和 Web 版一样,需要有公网 IP 的服务器,微信仅支持特定 Android 版本。

飞书集成:

 

3 茴香豆高阶应用

3.1 开启网络搜索

开启网络搜索功能需要用到 Serper 提供的 API:

  1. 登录 Serper ,注册:

  2. 进入 Serper API 界面,复制自己的 API-key

编辑 /root/huixiangdou/config.ini,替换为自己的 API-key。其中 domain_partial_order 可以设置网络搜索的范围。

开启网络搜索,再问一个问题 

 

可以看到,这里进行了一些搜索  

最后生成了我们需要的答案

再问一个问题

我们知道,网络搜索的范围主要有以下网站,没有用来查询天气的网站

domain_partial_order = ["arxiv.org", "openai.com", "pytorch.org", "readthedocs.io", "nvidia.com", "stackoverflow.com", "juejin.cn", "zhuanlan.zhihu.com", "www.cnblogs.com"]

检查一下命令行,是有搜索的结果的,但是没有被最终放入 prompt 中

 

原因是分数没有超过阈值,说明这个问题与知识库的相似度太低

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值