第二期书生浦语大模型实战营第三次课程笔记----茴香豆:搭建你的 RAG 智能助理

本节课介绍了检索增强RAG的概念,应用框架茴香豆,以及实践演示。
视频地址:https://www.bilibili.com/video/BV1QA4m1F7t4/
文档地址:https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/readme.md

RAG

大模型优化方法

按模型适配(能力)和知识适配(知识)两个维度来分析,可以分为四种:
提示词工程(prompt engineering):仅使用提示词诱导输出,在能力和知识适配维度都很弱;
检索增强RAG(retrieval augmented generation):外挂知识库,依赖检索外部知识库+大模型生成答案能力,在知识适配维度比较强,在能力适配维度比较弱;
微调(fine-tuning):用新数据集训练大模型,使得大模型的某些任务的能力增强,知识适配却不一定很强;
检索微调(retriever fine-tuning):综合检索增强和微调,在能力和知识适配维度都很强。

RAG

效果:可以看出外挂了知识库,可以检索到基座大模型不知道的知识,并生成答案。
基座大模型和外挂了知识库的检索增强问答效果对比:
在这里插入图片描述
应用:问答习题、文本生成、信息检索、图片描述
要素:索引(将知识文档分割编码成向量,并存储在向量数据库中)、检索(接收用户的问题后,将问题也编码成向量,并在向量数据库中找到与之相关的top-k文档块)、生成(将检索到的文档块与原始问题一起作为提示输入到大语言模型中,生成最终的回答)
范式:Naive RAG、Advanced RAG、Modular RAG
在这里插入图片描述
评估框架和基准测试:既评估检索也评估生成,
在这里插入图片描述
小结:感觉这里说的三个关键问题挺有意思,检索什么,什么时候检索,如何检索。可以说RAG算法技术的更新都在这三个问题的处理上。
在这里插入图片描述

茴香豆

茴香豆是基于LLMs的RAG应用框架,
包括多源知识检索、混合大模型、多重评分拒答工作流、安全检查全链路,
web端使用:https://openxlab.org.cn/apps/detail/tpoisonooo/huixiangdou-web
自己代码部署:https://github.com/InternLM/HuixiangDou
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自己代码部署(terminal终端代码)
运行平台:https://studio.intern-ai.org.cn/console/instance/

备注:三大知名向量化模型比较分析——m3e,bge,bce

M3E 是 Moka Massive Mixed Embedding 的缩写,
BGE是由北京智源人工智能研究院提出的新的embedding模型。 源码地址:https://github.com/FlagOpen/FlagEmbedding,BGE-M3支持超过100种语言,并且能够高效实现不同粒度的检索任务。BGE系列模型包括中英文模型和多语言模型,其跨语言能力全面领先。
BCE来源网易有道,BCEmbedding模型的GitHub官网 https://github.com/netease-youdao/BCEmbedding,
#创建环境并激活
studio-conda -o internlm-base -t InternLM2_Huixiangdou
conda activate InternLM2_Huixiangdou

# 创建模型文件夹
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
# 安装 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
cd /root
# 下载代码仓库
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 447c6f7e68a1657fce1c4f7c740ea1700bde0440
#修改模型路径
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

#创建知识库
cd /root/huixiangdou && mkdir repodir
git clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou
#新建接受问题列表
cd /root/huixiangdou
mv resource/good_questions.json resource/good_questions_bk.json
echo '[
    "mmpose中怎么调用mmyolo接口",
    "mmpose实现姿态估计后怎么实现行为识别",
    "mmpose执行提取关键点命令不是分为两步吗,一步是目标检测,另一步是关键点提取,我现在目标检测这部分的代码是demo/topdown_demo_with_mmdet.py demo/mmdetection_cfg/faster_rcnn_r50_fpn_coco.py checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth   现在我想把这个mmdet的checkpoints换位yolo的,那么应该怎么操作",
    "在mmdetection中,如何同时加载两个数据集,两个dataloader",
    "如何将mmdetection2.28.2的retinanet配置文件改为单尺度的呢?",
    "1.MMPose_Tutorial.ipynb、inferencer_demo.py、image_demo.py、bottomup_demo.py、body3d_pose_lifter_demo.py这几个文件和topdown_demo_with_mmdet.py的区别是什么,\n2.我如果要使用mmdet是不是就只能使用topdown_demo_with_mmdet.py文件,",
    "mmpose 测试 map 一直是 0 怎么办?",
    "如何使用mmpose检测人体关键点?",
    "我使用的数据集是labelme标注的,我想知道mmpose的数据集都是什么样式的,全都是单目标的数据集标注,还是里边也有多目标然后进行标注",
    "如何生成openmmpose的c++推理脚本",
    "mmpose",
    "mmpose的目标检测阶段调用的模型,一定要是demo文件夹下的文件吗,有没有其他路径下的文件",
    "mmpose可以实现行为识别吗,如果要实现的话应该怎么做",
    "我在mmyolo的v0.6.0 (15/8/2023)更新日志里看到了他新增了支持基于 MMPose 的 YOLOX-Pose,我现在是不是只需要在mmpose/project/yolox-Pose内做出一些设置就可以,换掉demo/mmdetection_cfg/faster_rcnn_r50_fpn_coco.py 改用mmyolo来进行目标检测了",
    "mac m1从源码安装的mmpose是x86_64的",
    "想请教一下mmpose有没有提供可以读取外接摄像头,做3d姿态并达到实时的项目呀?",
    "huixiangdou 是什么?",
    "使用科研仪器需要注意什么?",
    "huixiangdou 是什么?",
    "茴香豆 是什么?",
    "茴香豆 能部署到微信吗?",
    "茴香豆 怎么应用到飞书",
    "茴香豆 能部署到微信群吗?",
    "茴香豆 怎么应用到飞书群",
    "huixiangdou 能部署到微信吗?",
    "huixiangdou 怎么应用到飞书",
    "huixiangdou 能部署到微信群吗?",
    "huixiangdou 怎么应用到飞书群",
    "huixiangdou",
    "茴香豆",
    "茴香豆 有哪些应用场景",
    "huixiangdou 有什么用",
    "huixiangdou 的优势有哪些?",
    "茴香豆 已经应用的场景",
    "huixiangdou 已经应用的场景",
    "huixiangdou 怎么安装",
    "茴香豆 怎么安装",
    "茴香豆 最新版本是什么",
    "茴香豆 支持哪些大模型",
    "茴香豆 支持哪些通讯软件",
    "config.ini 文件怎么配置",
    "remote_llm_model 可以填哪些模型?"
]' > /root/huixiangdou/resource/good_questions.json
#新建测试问询列表,用来测试拒答流程是否起效
cd /root/huixiangdou
echo '[
"huixiangdou 是什么?",
"你好,介绍下自己"
]' > ./test_queries.json

# 创建向量数据库存储目录
cd /root/huixiangdou && mkdir workdir 
# 分别向量化知识语料、接受问题和拒绝问题中后保存到 workdir
python3 -m huixiangdou.service.feature_store --sample ./test_queries.json

# 填入问题
sed -i '74s/.*/    queries = ["huixiangdou 是什么?", "茴香豆怎么部署到微信群", "今天天气怎么样?"]/' /root/huixiangdou/huixiangdou/main.py
# 运行茴香豆
cd /root/huixiangdou/
python3 -m huixiangdou.main --standalone

代码解释

“ln -s /root/share/new_models/maidalun1020/bce-embedding-base_v1 /root/models/bce-embedding-base_v1”
这段代码是一个命令行指令,解释如下:

  • ln: 这是一个用于创建链接的命令。
  • -s: 这是 ln 命令的一个选项,它表示创建一个符号链接(symbolic link),也被称为软链接。
  • /root/share/new_models/maidalun1020/bce-embedding-base_v1: 这是源文件或目录的路径。在这个命令中,这个路径指向一个文件或目录,将被链接到目标位置。
  • /root/models/bce-embedding-base_v1: 这是链接的目标位置,也就是链接将被创建的位置。
    综合起来,这段代码的作用是在 /root/models/ 目录下创建一个名为 bce-embedding-base_v1 的符号链接,指向 /root/share/new_models/maidalun1020/bce-embedding-base_v1 路径下的文件或目录。

“sed -i ‘6s#.*#embedding_model_path = “/root/models/bce-embedding-base_v1”#’ /root/huixiangdou/config.ini”
这段代码是一个 sed 命令,用于在文本文件 /root/huixiangdou/config.ini 中编辑第 6 行,并将其替换为指定的内容。解释如下:

  • sed: 这是一个流编辑器,用于处理文本流。在这里,它被用来进行文本替换操作。
  • -i: 这是 sed 命令的选项,表示在原始文件上进行直接修改,而不是在标准输出中显示结果。
  • '6s#.*#embedding_model_path = "/root/models/bce-embedding-base_v1"#': 这是 sed 命令的编辑指令。
    • 6s: 这指定了要编辑的行数,即第 6 行。
    • #.*#: 这是一个正则表达式模式,用于匹配第 6 行的任何内容。
    • embedding_model_path = "/root/models/bce-embedding-base_v1": 这是要替换成的新内容。
  • /root/huixiangdou/config.ini: 这是要编辑的目标文件的路径。
    综合起来,这段代码的作用是将 /root/huixiangdou/config.ini 文件中的第 6 行内容替换为 embedding_model_path = "/root/models/bce-embedding-base_v1"

“git clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou”
这段代码是用于从 GitHub 上克隆一个代码仓库,并指定只克隆最新的一个提交,而不是克隆整个历史记录。解释如下:

  • git clone: 这是 Git 版本控制系统的一个命令,用于克隆远程代码仓库到本地。
  • https://github.com/internlm/huixiangdou: 这是要克隆的远程代码仓库的 URL 地址。
  • --depth=1: 这是 git clone 命令的选项之一,表示只克隆最新的一个提交,深度为 1,而不是克隆整个历史记录。这样做可以加快克隆速度,并减少所需的存储空间。
  • repodir/huixiangdou: 这是指定克隆代码仓库的目标目录路径。在这个例子中,huixiangdou 代码仓库将被克隆到名为 repodir 的目录中。
    综合起来,这段代码的作用是将名为 huixiangdou 的 GitHub 代码仓库克隆到本地的 repodir 目录中,并只克隆最新的一个提交。

python3 -m huixiangdou.service.feature_store --sample ./test_queries.json
这段代码是一个 Python 命令行指令,解释如下:

  • python3: 这是用于运行 Python 3 版本的解释器的命令。
  • -m: 这是 Python 的一个选项,用于指定要运行的模块。
  • huixiangdou.service.feature_store: 这是要运行的 Python 模块的名称。模块通常是一个 Python 脚本文件,其中包含了函数、类和变量等代码。
  • --sample: 这是一个参数,它告诉 feature_store 模块要执行的操作或者要传递给它的信息。在这里,--sample 可能是一个指示模块执行样本数据操作的选项。
  • ./test_queries.json: 这是另一个参数,它是一个文件路径,用于指定要处理的 JSON 格式的测试查询数据文件。
    综合起来,这段代码的作用可能是运行名为 huixiangdou.service.feature_store 的 Python 模块,并且指示该模块使用位于当前目录下名为 test_queries.json 的文件中的测试查询数据进行某种操作。

python3 -m huixiangdou.main --standalone
这段代码是一个命令行指令,解释如下:

  • python3: 这是用于运行 Python 3 版本的解释器的命令。
  • -m: 这是 Python 的一个选项,用于指定要运行的模块。
  • huixiangdou.main: 这是要运行的 Python 模块的名称。通常情况下,这个模块包含了主要的程序逻辑。
  • --standalone: 这是一个参数,它告诉 main 模块以独立模式运行。参数的具体含义取决于程序的设计,但通常会影响程序的行为或配置。
    综合起来,这段代码的作用是使用 Python 3 解释器运行名为 huixiangdou.main 的 Python 模块,并以独立模式运行。

茴香豆接入微信

web端茴香豆地址:https://openxlab.org.cn/apps/detail/tpoisonooo/huixiangdou-web
教程:https://zhuanlan.zhihu.com/p/686579577
三个操作界面
电脑web端茴香豆:(https://openxlab.org.cn/apps/detail/tpoisonooo/huixiangdou-web)创建个人知识库—》创建微信应用–》复制回调地址
手机端:安装茴香豆app—》复制回调地址—》开启“茴香豆llm rag回复”
手机端:微信聊天窗口—》对方发消息—》机器人自动回复

注:安装茴香豆app教程,注意不是从手机应用端下载app,没有上架,应该从电脑端下载https://github.com/InternLM/HuixiangDou/releases/tag/v0.1.0rc1这个文件huixiangdou-20240409.apk,
微信给自己发送文件huixiangdou-20240409.apk,
用浏览器打开安装茴香豆app,
把茴香豆web端微信回调地址粘贴进去,打开应用,去微信端让小伙伴发送消息过来,机器人就会自动回复,
主要是手机微信聊天窗口开着,对方发来消息就会自动回复,然后立刻关掉应用,否则就会消息泛滥,有被封号的危险。

茴香豆接入飞书

教程:https://aicarrier.feishu.cn/docx/H1AddcFCioR1DaxJklWcLxTDnEc
三个操作界面
1)飞书开放平台(https://open.feishu.cn/app?lang=zh-CN)—》创建企业自建应用–》添加机器人作为群聊bot,
2)在茴香豆web知识库(https://openxlab.org.cn/apps/detail/tpoisonooo/huixiangdou-web)和企业应用进行连接配置并发布(照着教程操作即可)(操作1和2在这个教程很详细:https://aicarrier.feishu.cn/docx/H1AddcFCioR1DaxJklWcLxTDnEc)
应用凭证中 App ID和App Secret:飞书开放平台—》茴香豆web飞书创建界面
加密策略:茴香豆web飞书创建界面—》飞书开放平台(开发配置-事件与回调tab下)
事件回调地址:茴香豆web飞书创建界面—》飞书开放平台(开发配置-事件与回调tab下的事件配置,选择默认的【将事件发送至开发者服务器】即可)
飞书开放平台:订阅事件(继续点击当前页面的【添加事件】按钮,搜索【接收消息】事件,并申请开通对应权限)
飞书开放平台:权限配置(点击开发配置-权限管理tab下,申请开通权限:im:chat:readonly 和 im:message:send_as_bot)
飞书开放平台:创建版本–》已发布
3)电脑端飞书app端,将刚刚创建并发布的应用机器人添加到群聊中,这句话比较困难,先在飞书群里添加机器人,注意不是添加自定义机器人,而是在下拉列表中找到创建的应用添加,然后还要删除飞书助手,再@创建的机器人,否则轮不到创建的机器人回答问题,
说明:详细操作页面截图,见第二期书生浦语大模型实战营 第三次作业https://blog.csdn.net/haidizym/article/details/137469433?
比较:飞书和微信都是【茴香豆web界面】创建,将某种回调凭证复制到【电脑飞书企业应用/手机茴香豆app】,然后飞书是加聊天机器人,而微信则是自动开启答复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值