第四期书生大模型实战营【进阶岛】—— 茴香豆:企业级知识库问答工具


在这里插入图片描述

茴香豆介绍

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

茴香豆特点:

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

Web版茴香豆

创建 Web 版茴香豆账户和密码

Web 版茴香豆部署在浦源平台,可以让大家零编程体验茴香豆的各种功能。这里有作者大神亲自的视频演示。

啊哦,不巧Web版茴香豆正在修复中。
在这里插入图片描述


茴香豆本地标准版搭建

环境搭建

使用 VScode 远程连接 Internstuio 的开发机,这里不再赘述。

studio-conda -o internlm-base -t huixiangdou
conda activate huixiangdou

在这里插入图片描述

安装茴香豆

下载茴香豆

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下载模型文件

茴香豆默认会根据配置文件自动下载对应的模型文件,为了节省时间,本次教程所需的模型已经提前下载到服务器中,我们只需要为本次教程所需的模型建立软连接,然后在配置文件中设置相应路径就可以:

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

在这里插入图片描述

更改配置文件

茴香豆的所有功能开启和模型切换都可以通过 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

在这里插入图片描述
也可以用编辑器手动修改,文件位置为 /root/huixiangdou/config.ini
修改后的配置文件如下:
在这里插入图片描述

注意!配置文件默认的模型和下载好的模型相同。如果不修改地址为本地模型地址,茴香豆将自动从 huggingface hub 拉取模型。如果选择拉取模型的方式,需要提前在命令行中运行 huggingface-cli login 命令,验证 huggingface 权限。

知识库创建

修改完配置文件后,就可以进行知识库的搭建,本次教程选用的是茴香豆和 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
python3 -m huixiangdou.service.feature_store

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 参数指定了特征提取后向量知识库存放的位置。如果有多个知识库快速切换的需求,可以通过更改该参数实现。

测试知识助手

命令行运行

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

通过命令行的方式可以看到对话的结果以及中间的过程,便于我们确认知识库是否覆盖需求,正反例是否合理。
在这里插入图片描述
在这里插入图片描述

Gradio UI 界面测试

在运行茴香豆助手的服务器端,输入下面的命令,启动茴香豆 Web UI:

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

在这里插入图片描述
如图说明 Gradio 服务启动成功,在本地浏览器中输入 127.0.0.1:7860 打开茴香豆助手测试页面:
在这里插入图片描述


茴香豆高阶应用

开启网络搜索

对于本地知识库没有提到的问题或是实时性强的问题,可以开启茴香豆的网络搜索功能,结合网络的搜索结果,生成更可靠的回答。
开启网络搜索功能需要用到 Serper 提供的 API:

  1. 登录 Serper 注册。
  2. 进入 Serper API 界面,复制自己的 API-key。
    在这里插入图片描述
  3. 替换 /huixiangdou/config.ini 中的 ${YOUR-API-KEY} 为自己的API-key。
    在这里插入图片描述
    其中 domain_partial_order 可以设置网络搜索的范围。

有点奇怪,网页回答为什么是不相关的呢,检索的文档也不对,对应检索结果的文档也是空的。明明也检索到了InternLM 2.5 的相关内容。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
又换了一个问题,结果还是不尽如人意。这是为什么呢?
在这里插入图片描述
在这里插入图片描述

但是查看搜索到的文件内容这确实与页面输出结果是一致的。说明联网搜索功能确实可以正常使用。
在这里插入图片描述

远程模型

除了将 LLM 模型下载到本地,茴香豆还可以通过调用远程模型 API 的方式实现知识问答助手。支持从 CPU-only、2G、10G、20G、到 80G 不同的硬件配置,满足不同规模的企业需求。
在这里插入图片描述
茴香豆中有 3 处调用了模型,分别是 嵌入模型(Embedding)、重排模型(Rerank)和 大语音模型(LLM)。

远程向量&重排序模型

其中特征提取部分(嵌入、重排)本地运行需要 2G 显存。如果运行的服务器没有显卡,也可以选择调用硅基流动 的 API。将 API,填入到 /huixiangdou/config.ini 文件中 api_token 处,同时注意如图所示修改嵌入和重排模型地址(embedding_model_path, reranker_model_path):
在这里插入图片描述

目前茴香豆只支持 siliconflow 中向量&重排 bce 模型的调用,后续会增加其他向量&重排模型的支持。

远程大模型

想要启用远端大语言模型,首先修改 /huixiangdou/config.ini 本地和远程LLM 开关。
在这里插入图片描述
接着,如下图所示,修改 remote_ 相关配置,填写 API key、模型类型等参数,茴香豆支持 OpenAI 的 API格式调用。
在这里插入图片描述

  • remote_llm_model 为 “auto” 时,会根据提示词长短选择模型大小,以节省开支
  • Siliconcloud 支持的模型请查看 https://siliconflow.cn/zh-cn/models

如果同时开启 local 和 remote 模型,茴香豆将采用混合模型的方案,详见技术报告,效果更好。

posted @ 2025-02-15 23:31  。。。714  阅读(67)  评论(0)    收藏  举报  来源