茴香豆:企业级知识问答工具实践
【书生大模型实战营】茴香豆:企业级知识问答工具实践
茴香豆Demo:地址
任务
在 InternStudio 中利用 Internlm2-7b 搭建标准版茴香豆知识助手,并使用 Gradio 界面完成 2 轮问答(问题不可与教程重复,作业截图需包括 gradio 界面问题和茴香豆回答)。知识库可根据根据自己工作、学习或感兴趣的内容调整,如金融、医疗、法律、音乐、动漫等(优秀学员必做)。
茴香豆本地标准版搭建
一般使用
环境:30% A100,Cuda 12.2
使用studio-conda -o internlm-base -t huixiangdou
激活环境。
然后clone相关仓库并切换分支:
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
复制相关的模型:
ln -s /root/share/new_models/maidalun1020/bce-embedding-base_v1 /root/model/bce-embedding-base_v1
ln -s /root/share/new_models/maidalun1020/bce-reranker-base_v1 /root/model/bce-reranker-base_v1
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b /root/model/internlm2-chat-7b
然后更改配置文件config.ini
,在huixiangdou文件夹下,执行如下命令更改配置文件:
sed -i '9s#.*#embedding_model_path = "/root/model/bce-embedding-base_v1"#' /root/Project/huixiangdou/config.ini
sed -i '15s#.*#reranker_model_path = "/root/model/bce-reranker-base_v1"#' /root/Project/huixiangdou/config.ini
sed -i '43s#.*#local_llm_path = "/root/model/internlm2-chat-7b"#' /root/Project/huixiangdou/config.ini
进入创建的huixiangdou,创建repodir文件夹,将两个仓库clone到这里:
git clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou
git clone https://github.com/open-mmlab/mmpose --depth=1 repodir/mmpose
然后创建一个工作目录workdir,并执行如下命令:
python3 -m huixiangdou.service.feature_store
其中:repodir 文件夹,用来储存知识库原始文档,文件夹 workdir 用来存放原始文档特征提取到的向量知识库。
结果为:
正例和反例信息在resource
文件夹下。
每次更新原始知识文档和正反例,都需要重新运行 python3 -m huixiangdou.service.feature_store
命令进行向量知识库的重新创建和应答阈值的更新。
配置文件中的 work_dir
参数指定了特征提取后向量知识库存放的位置。如果有多个知识库快速切换的需求,可以通过更改该参数实现。
使用如下命令和茴香豆在命令行进行交互:
python3 -m huixiangdou.main --standalone
然后询问mmpose怎么使用,得到的回复如下:
然后尝试使用gradio创建可视化界面:
python3 -m huixiangdou.gradio
然后询问mmpose相关的问题,结果如下:
联网
进入serper注册一个账号,然后进入API-Key界面,复制自己的 API-key。
替换 /huixiangdou/config.ini
中的 ${YOUR-API-KEY} 为自己的API-key:
[web_search]
engine = "serper"
serper_x_api_key = "YOUR-API-KEY-HERE"
domain_partial_order = ["arxiv.org", "openai.com", "pytorch.org", "readthedocs.io", "nvidia.com", "stackoverflow.com", "juejin.cn", "zhuanlan.zhihu.com", "www.cnblogs.com"]
save_dir = "logs/web_search_result"
其中 domain_partial_order
可以设置网络搜索的范围。
然后运行gradio界面,问它Pytorch怎么安装
,虽然在gradio里面依然没有显示正确结果,但是在save_dir
变量对应的文件夹下面,有它搜索的文件:
远程大模型
远程向量&重排序模型的修改:SiliconFlow创建账号,然后进入体验中心,创建个人 API 密匙,复制将其填入huixiangdou/config.ini
的api_token中。
大模型的修改:首先修改 huixiangdou/config.ini
本地和远程LLM 开关:
[worker]
enable_web_search = 0
enable_sg_search = 1
然后更改remote_ 相关配置,填写 API key、模型类型等参数,茴香豆支持 OpenAI 的 API格式调用:
remote_type = "kimi"
remote_api_key = "YOUR-API-KEY-HERE"
remote_llm_max_text_length = 128000
remote_llm_model = "auto"
闯关任务
以中国的诗词构建知识库,使用chinese-poetry作为知识来源:
git clone https://github.com/chinese-poetry/chinese-poetry.git
clone到repodir
文件夹,然后进行知识更新:
python3 -m huixiangdou.service.feature_store
但茴香豆似乎只对README.md进行了处理,下面的json都没有读取:
于是选取其中的元曲作为知识库,只在文件夹中放元曲的内容,然后进行知识更新。
先看一下没有加载知识库之前的模型回答:
然后我们创建一个元曲.md
文件,茴香豆只能识别md或者txr,json文件无法识别,将这两首曲放上去,然后进行知识库更新。
# 元曲
## 关汉卿
(1)诈妮子调风月・胜葫芦
怕不依随蒙君一夜恩,争奈忒达地、忒知根,兼上亲上成亲好对门。
觑了他兀的模样,这般身分。
若脱过这好郎君。
## 马致远
(1)邯郸道省悟黄粱梦・煞尾
你正果正是修行果,你灾咎皆因我度脱。
早则绝忧愁、没恼聒,行处行,坐处坐,闲处闲,陀处陀。
屈着指,自数过,真神仙,是七座,添伊家,总八个。
道与哥哥,非是风魔,这个爱吃酒的钟离便是我。
## 郑光祖
(1)虎牢关三战吕布・那吒令
不是这个张冀德,我觑吕温侯似等闲;(关末云)他使一枝方天画杆戟,好生利害也。
(正末唱)则我这条丈八矛,将方天戟来小看。
(关末云)骑一匹卷毛赤兔马,好生奔劣也。
(正末唱)跨下这匹豹月乌,不剌刺把赤兔马来当翻。
(刘末云)破吕布凭着你些甚么那?(正末唱)凭着我这捉将手、挟人惯,两条臂有似的这栏关。
最终的结果为:
但有时候不太稳定,有时候可以从知识库里面找,有时候又没有。