赞
踩
目录
实战:Intern Studio上部署茴香豆技术助手(基础作业)
定义:RAG(Retrieval-Augmented Generation),即"检索增强生成",主要用于提升语言模型在特定任务上的表现,尤其是需要广泛知识支持的任务。RAG概念最早由Meta的Lewis等人在2020年提出,它的核心思想是将传统的语言生成模型与外部知识库检索相结合。RAG技术为解决需要广泛知识支持的复杂语言任务提供了一种有效的解决方案。通过结合检索和生成,RAG模型能够在保持语言生成的流畅性和连贯性的同时,引入外部知识,提高回答的准确性和相关性。
解决问题:LLMs在处理知识密集型任务时可能遇到的挑战(生成幻觉、过时知识、缺乏透明可追溯的推理过程),提供更准确的回答、降低推理成本、实现外部记忆。
工作原理:
作用:让基础模型实现非参数知识更新,无需增训就能掌握新领域的知识,实现新增知识问答。
RAG的优势:
RAG的发展进程和应用:
关于向量数据库(Vector-DB)
RAG | 微调 | |
特点 | * 非参数记忆(无需训练),数据实时更新(外部知识库)。 * 能处理知识密集型任务,提供准确的事实性回答。 * 通过检索增强,生成更多样化的内容。 | * 参数记忆,通过在特定任务数据上训练,模型更好适应该任务。 * 需要大量标注数据来有效微调。 * 微调后模型可能过拟合,导致泛化能力下降。 |
使用场景 | 需要结合最新信息和实时数据的任务:如开放领域问答、实时新闻摘要等。 | 数据可用且需要模型高度专业化的任务,如特定领域的文本分析、情感分析、文本生成等。 |
优势 | 动态知识更新,处理长尾知识问题 | 模型性能针对特定任务优化 |
局限 | 依赖于外部知识库的质量和覆盖范围 | 需要大量标注数据,且对新任务适应性(泛化能力)较差。 |
RAG:外部知识要求高,模型自适应要求低
微调:外部知识要求低,模型自适应要求高
经典评估指标:准确率Accuracy,召回率Recall,F1分数,BLEU分数(用于机器翻译和文本生成)、ROUGE分数(用于文本生成)
RAG评测框架:
RAG 总结
RAG 生态、三种范式、RAG优化方法、RAG关键问题(检索什么?何时检索?如何检索?)、RAG 发展前景、RAG评测(目标、评测维度、评测框架)
茴香豆是基于LLMs的领域知识助手,由书生浦语团队开发的开源大语言模型的应用。
专为即时通讯工具IM中的群聊场景优化的工作流,提供及时准确的技术支持和自动化问答服务。
应用RAG技术,茴香豆能理解和高效准确回应与特定知识领域相关的复杂查询。
应用场景 & 场景难点
应用场景:
场景难点:
茴香豆的核心特性
茴香豆的构建
茴香豆的工作流:
群聊 → 输入语句预处理 → 查询 → 拒答工作流(如果不拒答) → 回答工作流 → 群聊回复
创建开放机 → 配置基础虚拟环境InternLM2_Huixiangdou → 下载茴香豆所需的基础模型InternLM2-Chat-7B → 下载茴香豆的依赖环境 → 从茴香豆官方仓库下载茴香豆
1.配置基础虚拟环境InternLM2_Huixiangdou
Intern Studio 服务器上部署茴香豆
创建开发机:Cuda11.7-conda 镜像、30% * A100 计算资源
进入开发机后,从官方环境复制运行InternLM的基础环境,命名为InternLM2_Huixiangdou。这一步的时间比较长,需耐心等待。
- # 命令行模式运行
- studio-conda -o internlm-base -t InternLM2_Huixiangdou
- # 在本地查看环境
- conda env list
-
- # 结果如下所示
- # conda environments:
- #
- # base * /root/.conda
- # InternLM2_Huixiangdou /root/.conda/envs/InternLM2_Huixiangdou
运行conda命令激活InternLM2_Huixiangdou python虚拟环境
conda activate InternLM2_Huixiangdou
注意!!!!后续都在InternLM2_Huixiangdou环境中进行。但凡重启都要再次激活InternLM2_Huixiangdou环境。
2.下载茴香豆所需的基础模型InternLM2-Chat-7B
复制茴香豆所需的模型文件,该教程涉及的模型已存放在Intern Studio开发机共享文件/share中,教程选用的基础模型是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
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
从茴香豆官方仓库下载茴香豆
- cd /root
- # 克隆代码仓库
- git clone https://github.com/internlm/huixiangdou && cd huixiangdou
- git checkout b9bc427
至此,茴香豆工具在 Intern Studio 开发机的安装工作结束。
1.修改配置文件
用已下载模型的路径替换 /root/huixiangdou/config.ini 文件中的默认模型,需修改3处模型地址
① 如下命令行,修改用于向量数据库和词嵌入的模型
- sed -i '6s#.*#embedding_model_path = "/root/models/bce-embedding-base_v1"#' /root/huixiangdou/config.ini
-
- # 代码打开文件/root/huixiangdou/config.ini。在文件的第6行,查找匹配模式.*(即第6行的任何内容)。
- # 将第6行的全部内容替换为embedding_model_path = "/root/models/bce-embedding-base_v1"。
- # 直接在原文件上进行修改,不创建新的文件。
用于检索的重排列模型
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
修改好的配置文件如图:
2.创建知识库
使用 InternLM 的 Huixiangdou 文档作为新增知识数据检索来源,不重新训练/增训得情况下,打造一个 Huixiangdou 技术问答助手。
下载 Huixiangdou 语料:
- cd /root/huixiangdou && mkdir repodir
-
- git clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou
提取知识库特征,创建向量数据库。数据库向量化过程中应用了LangChain相关模块,默认嵌入和重新排序模型调用的网易BCE双语模型。如果没有在config.ini文件中指定本地模型路径,茴香豆将自动从HuggingFace拉取默认模型。
除了①语料知识的向量数据库,茴香豆建立②接受和③拒答两个向量数据库,用来在检索的过程中更加精确的判断提问的相关性,这两个数据库的来源分别是:
huixiangdou/resource/good_questions.json
中huixiangdou/resource/bad_questions.json
中以下命令增加茴香豆相关的问题到接受问题示例中:
- 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
语料来源确定好后,创建RAG检索过程中的向量数据库
涉及工作:将①外部知识语料、②接受问题示例、③拒答问题示例 这三种新增知识分别向量化后,保存到 workdir 文件夹中
- # 创建向量数据库存储目录
- cd /root/huixiangdou && mkdir workdir
-
- # 分别向量化知识语料、接受问题和拒绝问题中后保存到 workdir
- python3 -m huixiangdou.service.feature_store --sample ./test_queries.json
上述创建向量数据库 过程约占1.6G显存,需耐心等待一段时间。
检索过程的工作机制:
茴香豆会将input与接受&拒答列表的问题,在向量空间上进行相似性比较,判断是否应回答(拒答机制避免群聊中的问答泛滥)。接受回答问题 → 利用基础模型提取关键词,在知识库中检索 top k个相似的chunk,初始问题 + 检索到的chunk 一同用于生成答案。
3、运行茴香豆知识助手
完成知识库特征提取、创建对应向量数据库后,即可运行检验效果。
- # 填入问题
- sed -i '74s/.*/ queries = ["huixiangdou 是什么?", "茴香豆怎么部署到微信群", "今天天气怎么样?"]/' /root/huixiangdou/huixiangdou/main.py
-
- # 运行茴香豆
- cd /root/huixiangdou/
- python3 -m huixiangdou.main --standalone
报错一,缺少duckduckgo_search等模块。
解决办法是 pip install -r ./requirements.txt ,补全所需环境依赖。
报错二,config.ini文件中“local_llm_path”变量出现不止一次。
解决办法是 config.ini文件中多余的有冲突的“local_llm_path”变量注释掉。
成功运行结果截图:
“茴香豆怎么部署到微信群”问题 被判定为接受问题,进行回答。
“今天天气怎么样” 被判定为非相关问题,拒答。
“huixiangdou 是什么?” 被判定为not a question,一开始打2分,后来debug又打了8分,但最后也没有给出回答,不是很懂。
茴香豆Web 网址:OpenXLab浦源 - 应用中心
外部知识库:各地婚假产假政策、员工体检须知及流程文档
多轮对话截图:
一个小bug:反例里添加了“今天星期几”应该拒答,但实际问“今天星期几”时还是会回答,不太懂。
因为没有测试手机和测试微信号,所以选择了茴香豆零编程集成到 飞书。
使用茴香豆Web版(即OpenXLab)进行部署,首先进入OpenXLab:OpenXLab浦源 - 应用中心
1. 填写知识库名称、密码(如果不存在即自动创建)
2.创建成功后,上传知识文档、正反例问题(如果上传知识文档多次不成功,建议刷新一下)
接下来,跟着“零开发集成飞书”的教程逐步设置,教程地址:茴香豆零编程接入飞书
①准备工作:
1. 进入飞书开放平台,创建企业自建应用
2. 添加机器人,作为群聊bot
② 飞书机器人配置
1. 进入“凭证与基础信息”栏目,复制应用凭证中 App ID和App Secret,填入到右侧OpenXLab表单的对应位置。
2. 进入“事件与回调”栏目下,点击“加密策略”页,将茴香豆Web(OpenXLab)中表单提供的加密策略复制填到对应地 Encrypt Key和Verification Token
3. 进入“事件配置”页,将茴香豆Web(OpenXLab)中表单提供的 事件回调地址 ,填入到“配置订阅方式”中,选择默认的【将事件发送至开发者服务器】即可,点击保存
4. 订阅事件:随后继续点击当前页面右下角的【添加事件】按钮,搜索【接收消息】事件,并申请开通对应权限
5. 权限配置:进入“权限管理”栏目,申请开通权限im:chat:readonly 和 im:message:send_as_bot(开通好后“权限状态”列会显示 已开通)
6. 点击上方黄色提示栏,发布当前应用版本,提升“已发布”即配置成功
具体操作参考在群组中使用机器人
(因为要在内部群/单聊场景中才能添加应用机器人,我选了单聊场景)
飞书“在群组中使用机器人”文档说明:
- 应用机器人只支持添加到内部群或用于单聊场景。
- 外部群仅支持通过桌面端添加自定义机器人;移动端不支持添加自定义机器人。
1. 选好单聊群后,群名后缀要先加上对应的suffix,之后再添加机器人(否则会无效)
2. “添加机器人” → 搜索想要的机器人,例如这里是“茴香豆CDA小助手”
3. 垂直领域问答小助手 响应结果:
作业要求
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。