讲师:北辰老师
文档地址:https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/readme.md
B站视频课程地址:https://www.bilibili.com/video/BV1QA4m1F7t4/?spm_id_from=333.788&vd_source=0857df4802ce9a14ce09f1a529b8a6e8
internstudio地址:https://sso.openxlab.org.cn/login?redirect=https://studio.intern-ai.org.cn/console/instance/new&clientId=plzdwkzlqe33bkrgoxq3
3.3.1配置部署茴香豆
3.3.1.1创建开发机
2.进入开发机后,从官方环境复制运行 InternLM 的基础环境,命名为 InternLM2_Huixiangdou
,在命令行模式下运行:
studio-conda -o internlm-base -t InternLM2_Huixiangdou
复制完成后,在本地查看环境。
conda env list
运行 conda 命令,激活 InternLM2_Huixiangdou
python 虚拟环境:
conda activate InternLM2_Huixiangdou(关机退出环境后常用)
3.3.1.2下载基础文件
复制茴香豆所需模型文件,为了减少下载和避免 HuggingFace 登录问题,所有作业和教程涉及的模型都已经存放在 Intern Studio
开发机共享文件中。本教程选用 InternLM2-Chat-7B 作为基础模型。
创建模型文件夹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
ll root / models
3.3.1.3 下载安装茴香豆
安装茴香豆运行所需依赖。
安装 python 依赖# pip install -r requirements.txt
pip install protobuf==4.25.3 accelerate==0.28.0 aiohttp==3.9.3 auto-gptq==0.7.1 bcembedding==0.1.3 beautifulsoup4==4.8.2 einops==0.7.0 faiss-gpu==1.7.2 langchain==0.1.14 loguru==0.7.2 lxml_html_clean==0.1.0 openai==1.16.1 openpyxl==3.1.2 pandas==2.2.1 pydantic==2.6.4 pymupdf==1.24.1 python-docx==1.1.0 pytoml==0.1.21 readability-lxml==0.8.1 redis==5.0.3 requests==2.31.0 scikit-learn==1.4.1.post1 sentence_transformers==2.2.2 textract==1.6.5 tiktoken==0.6.0 transformers==4.39.3 transformers_stream_generator==0.0.5 unstructured==0.11.2
因为 Intern Studio 不支持对系统文件的永久修改,在 Intern Studio 安装部署的同学不建议安装 Word 依赖,后续的操作和作业不会涉及 Word 解析。## 想要自己尝试解析 Word 文件的同学,uncomment 掉下面这行,安装解析 .doc .docx 必需的依赖# apt update && apt -y install python-dev python libxml2-dev libxslt1-dev antiword unrtf poppler-utils pstotext tesseract-ocr flac ffmpeg lame libmad0 libsox-fmt-mp3 sox libjpeg-dev swig libpulse-dev
3.3.1.4从茴香豆官方仓库下载茴香豆。
cd /root
下载 repo
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 447c6f7e68a1657fce1c4f7c740ea1700bde0440
茴香豆工具在 Intern Studio
开发机的安装工作结束。如果部署在自己的服务器上,参考上节课模型下载内容或本节 3.4 配置文件解析 部分内容下载模型文件。
部署成功
3.3.2使用茴香豆搭建 RAG 助手
3.3.2.1修改配置文件
用已下载模型的路径替换 /root/huixiangdou/config.ini
文件中的默认模型,需要修改 3 处模型地址,分别是:
命令行输入下面的命令,修改用于向量数据库和词嵌入的模型
sed -i '6s#.*#embedding_model_path = "/root/models/bce-embedding-base_v1"#' /root/huixiangdou/config.ini
用于检索的重排序模型
sed -i '7s#.*#reranker_model_path = "/root/models/bce-reranker-base_v1"#' /root/huixiangdou/config.ini
和本次选用的大模型
sed -i '29s#.*#local_llm_path = "/root/models/internlm2-chat-7b"#' /root/huixiangdou/config.ini
3.3.2.2 创建知识库
本示例中,使用 InternLM 的 Huixiangdou 文档作为新增知识数据检索来源,在不重新训练的情况下,打造一个 Huixiangdou 技术问答助手。
首先,下载 Huixiangdou 语料:
cd /root/huixiangdou && mkdir repodir
git clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou
再创建一个测试用的问询列表,用来测试拒答流程是否起效:
cd /root/huixiangdou
echo '["huixiangdou 是什么?","你好,介绍下自己"]' > ./test_queries.json
3.3.2.3创建知识向量库
在确定好语料来源后,运行下面的命令,创建 RAG 检索过程中使用的向量数据库:
创建向量数据库存储目录cd /root/huixiangdou && mkdir workdir
分别向量化知识语料、接受问题和拒绝问题中后保存到 workdir
python3 -m huixiangdou.service.feature_store --sample ./test_queries.json
向量数据库的创建需要等待一小段时间,过程约占用 1.6G 显存。
完成后,Huixiangdou 相关的新增知识就以向量数据库的形式存储在 workdir
文件夹下。
检索过程中,茴香豆会将输入问题与两个列表中的问题在向量空间进行相似性比较,判断该问题是否应该回答,避免群聊过程中的问答泛滥。确定的回答的问题会利用基础模型提取关键词,在知识库中检索 top K
相似的 chunk
,综合问题和检索到的 chunk
生成答案。
3.3.3 运行茴香豆知识助手
我们已经提取了知识库特征,并创建了对应的向量数据库。现在,让我们来测试一下效果:
命令行运行:
填入问题
sed -i '74s/.*/ queries = ["huixiangdou 是什么?", "茴香豆怎么部署到微信群", "今天天气怎么样?"]/' /root/huixiangdou/huixiangdou/main.py
运行茴香豆cd /root/huixiangdou/
python3 -m huixiangdou.main --standalone