书生·浦语大模型实战营(第二期):茴香豆,搭建你的RAG智能助手

本文主要是介绍书生·浦语大模型实战营(第二期):茴香豆,搭建你的RAG智能助手,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • RAG概述
  • 茴香豆介绍
  • 作业1:在茴香豆Web版中创建自己领域的知识问答助手
    • 创建知识库
    • 上传文件
    • 对话
  • 作业2:在InternLM Studio上部署茴香豆技术助手
    • 环境配置
    • 使用茴香豆搭建RAG助手
      • 修改配置文件
      • 配置文件解析
      • 创建知识库
      • 运行茴香豆知识助手
  • 茴香豆进阶
    • 加入网络搜索
    • 使用远程模型
    • 利用Gradio搭建网页Demo

RAG概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
嵌入优化索引优化 均是提高向量数据库的质量
查询优化上下文管理 始于Advanced RAG中的前检索和后检索部分。其中上下文管理 可以使用小一点的语言模型来检测和筛选出不必要的标记,例如信息提取器和信息压缩器

在这里插入图片描述

茴香豆介绍

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

主要分为三个重要的部分

  • 预处理
    将用户的输入筛选转换为合适的问询
  • 拒答工作流
    根据问询和数据库示例问题的比较,给出相关性得分,根据得分判断是否进入应答工作流
  • 应答工作流
    在这里插入图片描述

作业1:在茴香豆Web版中创建自己领域的知识问答助手

参考视频零编程玩转大模型,学习茴香豆部署群聊助手

创建知识库

输入知识库名字及密码
在这里插入图片描述

上传文件

在这里插入图片描述

对话

在这里插入图片描述
对于有些问题我们可以设置反例,让模型不进行回答,例如我们设置了一个反例“你觉得劳动法怎么样?”
设置反例前:
在这里插入图片描述
设置反例后:
在这里插入图片描述
不知道为什么模型还是做出了回答,而且好像没设置反例前回答的好,因为设置反例前,模型开头说了’作为一名AI,我没有请嘎巴和主观意识…‘
接着我们进行一些无关的聊天:
在这里插入图片描述

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

不知道为什么这两个回答下面会列出参考文档

作业2:在InternLM Studio上部署茴香豆技术助手

环境配置

从官方环境复制运行 InternLM 的基础环境,命名为 InternLM2_Huixiangdou

studio-conda -o internlm-base -t 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

安装茴香豆运行所需依赖

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

从茴香豆官方仓库下载茴香豆

cd /root
# 下载 repo
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 447c6f7e68a1657fce1c4f7c740ea1700bde0440

使用茴香豆搭建RAG助手

修改配置文件

用已下载模型的路径替换 /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

配置文件解析

reject_throttle 拒答阈值,0-1,数值越大,回答的问题相关性越高。默认值0.22742061846268935。拒答分数在检索过程中通过与示例问题的相似性检索得出,高质量的问题得分高,无关、低质量的问题得分低。只有得分数大于拒答阈值的才会被视为相关问题,用于回答的生成。当闲聊或无关问题较多的环境可以适当调高。
work_dir 向量数据库路径。茴香豆安装后,可以通过切换向量数据库路径,来回答不同知识领域的问答。
local_llm_max_text_length 模型可接受最大文本长度,默认值3000
[worker] 增强搜索功能,配合 [sg_search] 使用。增强搜索利用知识领域的源文件建立图数据库,当模型判断问题为无关问题或回答失败时,增强搜索功能将利用 LLM 提取的关键词在该图数据库中搜索,并尝试用搜索到的内容重新生成答案。
[worker.time] 可以设置茴香豆每天的工作时间,通过 startend 设定应答的起始和结束时间。 has_weekday: = 1 的时候,周末不应答
[fronted] 前端交互设置。

创建知识库

使用 InternLM 的 Huixiangdou 文档作为新增知识数据检索来源,在不重新训练的情况下,打造一个 Huixiangdou 技术问答助手。

首先,下载 Huixiangdou 语料:

cd /root/huixiangdou && mkdir repodirgit clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou

除了语料知识的向量数据库,茴香豆建立接受和拒答两个向量数据库,用来在检索的过程中更加精确的判断提问的相关性,这两个数据库的来源分别是:

  • 接受问题列表,希望茴香豆助手回答的示例问题
    • 存储在 huixiangdou/resource/good_questions.json 中
  • 拒绝问题列表,希望茴香豆助手拒答的示例问题
    • 存储在 huixiangdou/resource/bad_questions.json 中
    • 其中多为技术无关的主题或闲聊
    • 如:“nihui 是谁”, “具体在哪些位置进行修改?”, “你是谁?”, “1+1”

运行下面的命令,增加茴香豆相关的问题到接受问题示例中:

cd /root/huixiangdou
mv resource/good_questions.json resource/good_questions_bk.jsonecho '["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/huixiangdouecho '[
"huixiangdou 是什么?",
"你好,介绍下自己"
]' > ./test_queries.json

在确定好语料来源后,运行下面的命令,创建 RAG 检索过程中使用的向量数据库:

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

完成后,Huixiangdou 相关的新增知识就以向量数据库的形式存储在 workdir 文件夹下。

检索过程中,茴香豆会将输入问题与两个列表中的问题在向量空间进行相似性比较,判断该问题是否应该回答,避免群聊过程中的问答泛滥。确定的回答的问题会利用基础模型提取关键词,在知识库中检索 top K 相似的 chunk,综合问题和检索到的 chunk 生成答案。

运行茴香豆知识助手

我们已经提取了知识库特征,并创建了对应的向量数据库。现在,让我们来测试一下效果:

命令行运行:

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

在这里插入图片描述

茴香豆进阶

加入网络搜索

需要在Serper注册,拿到API
替换 /huixiangdou/config.ini 中的 ${YOUR-API-KEY} 为自己的API-key:

[web_search]
# check https://serper.dev/api-key to get a free API key
x_api_key = "${YOUR-API-KEY}"
domain_partial_order = ["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 可以设置网络搜索的范围

使用远程模型

首先修改 /huixiangdou/config.ini 文件中

enable_local = 0 # 关闭本地模型
enable_remote = 1 # 启用云端模型

接着,修改 remote_ 相关配置,填写 API key、模型类型等参数。

远端模型配置选项GPTKimiDeepseekChatGLMxi-apialles-apin
remote_typegptkimideepseekzhipuaixi-apialles-apin
remote_llm_max_text_length 最大值19200012800016000128000192000-
remote_llm_model“gpt-4-0613”“moonshot-v1-128k”“deepseek-chat”“glm-4”“gpt-4-0613”-

利用Gradio搭建网页Demo

安装Gradio依赖组件

pip install gradio==4.25.0 redis==5.0.3 flask==3.0.2 lark_oapi==1.2.4

运行脚本,启动茴香豆对话 Demo 服务

cd /root/huixiangdou
python3 -m tests.test_query_gradio 

这篇关于书生·浦语大模型实战营(第二期):茴香豆,搭建你的RAG智能助手的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/891442

相关文章

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser