书生·浦语大模型全链路开源体系-第3课

news2024/11/24 4:05:26

书生·浦语大模型全链路开源体系-第3课

  • 书生·浦语大模型全链路开源体系-第3课
    • 相关资源
    • RAG 概述
    • 在 InternLM Studio 上部署茴香豆技术助手
      • 环境配置
        • 配置基础环境
        • 下载基础文件
        • 下载安装茴香豆
      • 使用茴香豆搭建 RAG 助手
        • 修改配置文件
      • 创建知识库
        • 运行茴香豆知识助手
    • 在茴香豆 Web 版中创建自己领域的知识问答助手

书生·浦语大模型全链路开源体系-第3课

为了推动大模型在更多行业落地应用,让开发人员更高效地学习大模型的开发与应用,上海人工智能实验室重磅推出书生·浦语大模型实战营,为开发人员提供大模型学习和开发实践的平台。
本文是书生·浦语大模型全链路开源体系-第3课的课程实战。

相关资源

  • InternLM项目地址

https://github.com/InternLM/InternLM

  • InternLM2技术报告

https://arxiv.org/pdf/2403.17297.pdf

  • 书生·万卷 数据

https://opendatalab.org.cn/

  • 课程链接

https://www.bilibili.com/video/BV1AH4y1H78d/

RAG 概述

RAG(Retrieval Augmented Generation)技术,通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺乏透明、可追溯的推理过程等。提供更准确的回答、降低推理成本、实现外部记忆。

RAG 能够让基础模型实现非参数知识更新,无需训练就可以掌握新领域的知识。本次课程选用的茴香豆应用,就应用了 RAG 技术,可以快速、高效的搭建自己的知识领域助手。

在 InternLM Studio 上部署茴香豆技术助手

环境配置

配置基础环境

从官方环境复制运行 InternLM 的基础环境,命名为 InternLM2_Huixiangdou,在命令行模式下运行:

studio-conda -o internlm-base -t InternLM2_Huixiangdou

创建新的虚拟环境。

image-20240407214921836.png

安装必要的依赖库。

image-20240407220633102.png

安装完成。

image-20240407220739796.png

安装完成后,在本地查看环境。

conda env list

可以看到新创建的虚拟环境 InternLM2_Huixiangdou

运行 conda 命令,激活 InternLM2_Huixiangdou 虚拟环境:

conda activate InternLM2_Huixiangdou

下载基础文件

复制茴香豆所需模型文件,我们可以直接创建软链接,连接到share目录下默认下载好的模型文件。

# 创建模型文件夹
cd /root && mkdir models

cd /root/models

# 复制BCE模型
ln -s /root/share/new_models/maidalun1020/bce-embedding-base_v1 ./bce-embedding-base_v1
ln -s /root/share/new_models/maidalun1020/bce-reranker-base_v1 ./bce-reranker-base_v1

# 复制大模型参数(如果之前创建过软链接,这步可以不用执行)
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b ./internlm2-chat-7b

# 安装 python 依赖
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

# 由于重启开发机会丢失安装的系统软件,所以以下系统软件每次重启开发机都需要重新安装。如果没有必要,以下步骤可不执行。
# 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

image-20240407221255802.png

依赖安装完成。

image-20240407222116811.png

下载安装茴香豆

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

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

image-20240407222359312.png

使用茴香豆搭建 RAG 助手

修改配置文件

用已下载模型的路径替换 /root/code/huixiangdou/config.ini 文件中的默认模型,需要修改 3 处模型地址,分别是:

用于向量数据库和词嵌入的模型

sed -i '6s#.*#embedding_model_path = "/root/models/bce-embedding-base_v1"#' /root/code/huixiangdou/config.ini

用于检索的重排序模型

sed -i '7s#.*#reranker_model_path = "/root/models/bce-reranker-base_v1"#' /root/code/huixiangdou/config.ini

和本次选用的大模型

sed -i '29s#.*#local_llm_path = "/root/models/internlm2-chat-7b"#' /root/code/huixiangdou/config.ini

修改好的配置文件应该如下图所示:

image-20240407224638413.png

创建知识库

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

首先,下载 Huixiangdou 语料:

cd /root/code/huixiangdou && mkdir repodir

git clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou

image-20240407225203602.png

提取知识库特征,创建向量数据库。数据库向量化的过程应用到了 LangChain 的相关模块,默认嵌入和重排序模型调用的网易 BCE 双语模型,如果没有在 config.ini 文件中指定本地模型路径,茴香豆将自动从 HuggingFace 拉取默认模型。

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

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

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

cd /root/code/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/code/huixiangdou/resource/good_questions.json

image-20240407225630809.png

再创建一个测试用的问询列表,用来测试拒答流程是否起效:

cd /root/huixiangdou

echo '[
"huixiangdou 是什么?",
"你好,介绍下自己"
]' > ./test_queries.json

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

# 创建向量数据库存储目录(该步骤可以不做,后续程序会自动创建)
cd /root/code/huixiangdou && mkdir workdir 

# 分别向量化知识语料、接受问题和拒绝问题中后保存到 workdir
python3 -m huixiangdou.service.feature_store --sample ./test_queries.json

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

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

image-20240407230020798.png

image-20240407230048939.png

运行茴香豆知识助手

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

命令行运行:

cd /root/code/huixiangdou/

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

# 运行茴香豆
python3 -m huixiangdou.main --standalone

image-20240407231243120.png

image-20240407231330571.png

RAG 技术的优势就是非参数化的模型调优,这里使用的仍然是基础模型 InternLM2-Chat-7B, 没有任何额外数据的训练。面对同样的问题,我们的茴香豆技术助理能够根据我们提供的数据库生成准确的答案:

image-20240407231451312.png

image-20240407231512978.png

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

茴香豆 Web 版 在 OpenXLab 上部署了混合模型的 Demo,我们可以上传自己的语料库测试效果。

首先,打开茴香豆 Web 版的网址,设置一个知识库的名称OpenXLab浦源平台服务协议,并设置一个容易记住的密码,点击前往按钮,创建一个知识库并进入。

image-20240407232320891.png

在知识库中,我们需要上传自己的知识库文件,支持PDF、Word、MarkDown、Excel等格式的文件。选择知识库文件,点击确认上传按钮进行上传。

image-20240407232423537.png

文件上传成功后,我们就拥有了一个有相关领域知识的知识库。然后我们就可以进行提问了。

image-20240407232740784.png

首先,我们来问一下协议的范围,看看茴香豆怎么说。可以看到,RAG助手可以正常从知识库中检索知识、生成回答内容。

image-20240407233048613.png

再来问问服务内容,它确实能检索并回答。

image-20240407233357925.png

如果你不知道怎么注册浦源账号,你也可以问问茴香豆,它会告诉你流程的。

image-20240407233610591.png

一定要注意自己的行为规范,科学、合理地使用平台。如果你不知道哪些地方需要注意,那就来问茴香豆吧。

image-20240407233937408.png

当然,一定要注意自己的信息保密和隐私保护哦,茴香豆会告诉你该怎么做的。

image-20240407234222341.png

至此,我们就完成了在茴香豆 Web 版中创建自己领域的知识问答助手,并且完成了几轮问题问答。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1589055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

荒野奔驰,在泥泞中体验惊心动魄的冒险

从亚利桑那州的金色沙漠到喀尔巴阡山脉的崇山峻岭,在这片无垠的开放世界中,蕴藏着无尽的宝藏与古老的废墟,等待着勇敢者的发现。《远征:泥泞奔驰游戏》作为Saber Interactive打造的又一越野模拟力作,继《雪地奔驰》之后…

记录一次Ubuntu 22.04桌面版安装向日葵的过程

大概花了近一天的时间安装了WIN11和Ubuntu 22.04双系统,中间Ubuntu安装时出现了好几次失败,后来检查可能是下载的iso文件有问题,重新下载一次,刻录到U盘。安装才算成功。 最后的Ubuntu系统信息如下 接着安装向日葵的时候出错了&a…

模组硬件通用|ESD静电释放注意事项

当我们在进行接插件操作或者电路板调试时,有时会出现接口损坏或者电路板上的某个IC芯片失效的情况,原因可能仅仅是手触摸到了IC芯片,ESD(Electro-Static discharge 静电释放)导致了损坏。模组作为一个集成电路板,内部含有不同型号…

003Node.js创建第一个web服务

如果用PHP来编写后端代码,需要用Apache或者Nginx的服务器,来处理客户的请求响应。对于Node.js时,不仅实现了应用,同时还实现了整个HTTP服务器. 安装 Node Snippets插件(编程自带提示) console.log(你好nodejs); //表…

Golang 并发安全Map容器实践

Golang原生Map容器并非支持并发安全,在实际使用的时候很容易导致条件竞争并造成未知问题,本文介绍了在Golang中如何安全的并发访问Map容器。原文: Concurrent-Safe Map Container in Go Georg Bommeli Unsplash 当多个程序同时尝试写入同一个map时&#…

【MATLAB源码-第186期】matlab基于MLE算法的8天线阵列DOA估计仿真,对比粗估计、精确估计输出RMSE对比图。

操作环境: MATLAB 2022a 1、算法描述 第一部分:基本概念与系统设置 方向到达估计(Direction of Arrival, DOA)是信号处理中一项重要的技术,主要用于确定信号的到达方向。这种技术在雷达、无线通信和声纳等领域中有…

PandasAI的应用与实战解析(一):环境安装、运行demo

文章目录 1.源码包下载、明确依赖版本2.安装python依赖3.运行demo 本博客源码仓库地址:gitlab,本篇博客对应01分支python版本为3.10.x 什么是PandasAI?一句话总结的话,PandasAI就是一个结合了Pandas和AI的开源工具,更…

代码随想录阅读笔记-回溯【组合总和II】

题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 说明: 所有数字(包括目标数)都是正整数。解集不能包含重复的组…

Pytest精通指南(06)Fixture scope作用域详解

文章目录 前言Scope 作用域写在测试用例函数文件写在conftest.py文件作用域总结验证默认作用域验证执行顺序遵循验证类中的fixture作用域验证重名fixture作用域 前言 从前文中,我们已经知道固件(fixture)的概念、原理、作用域,并且…

TMS320F280049 EPWM模块--PC子模块(5)

下图是PC子模块和其他子模块的联系图。可以看出,PC接收DB的输出,然后处理后给到TZ。 下图是PC子模块的内部框图。可以看到: 1)PC子模块功能可以被bypass; 2)one shot和divider的时钟是epwm时钟的8分频&am…

秋招数据库学习2(20240408-20240412共10道)

由于感觉数据库难度可能暂时面试用不到,就先不刷啦 20240408 1.从不订购的客户 SELECT Name AS Customers FROM Customers C LEFT JOIN Orders O ON C.Id O.CustomerId WHERE CustomerId is nullselect customers.name as Customers from Customers wher…

购物车实现

目录 1.购物车常见的实现方式 2.购物车数据结构介绍 3.实例分析 1.controller层 2.service层 1.购物车常见的实现方式 方式一:存储到数据库 性能存在瓶颈方式二:前端本地存储 localstorage在浏览器中存储 key/value 对,没有过期时间。s…

什么是电子巡查系统?

电子巡检系统,通常又被叫做设备巡检系统,一种利用现代化技术进行设备管理和维护的系统。 通过结合软件应用程序、移动设备和云端服务,设备巡检系统能够实现对设备的全面监测、定位和记录。它使得设备管理人员能够轻松地安排、执行和跟踪设备…

通讯录项目(用c语言实现)

一.什么是通讯录 通讯录是一种用于存储联系人信息的工具或应用程序。它是一种电子化的地址簿,用于记录和管理个人、机构或组织的联系方式,如姓名、电话号码、电子邮件地址和邮寄地址等。通讯录的目的是方便用户在需要时查找和联系他人。 通讯录通常以列…

数据结构(算法)

总结,建议看EXCEL的《算法》页签,不然感觉有点乱 备注原理/步骤时间复杂度空间复杂度串的应用模式匹配简单/暴力O(mn) KMP  O(mn) 树的应用树哈夫曼树1、带权路径长度WPL 2、外部排序-最佳归并树1、哈夫曼树的度,只有0和m(m叉…

Linux——十个槽位,RWX

Linux——RWX 十个槽位 - 表示文件 d 表示文件夹 l 表示软链接 r权,针对文件可以查看文件内容 针对文件夹,可以查看文件夹内容,如ls命令 w权,针对表示可以修改此文件 针对文件夹,可以在文件夹内&#…

深入理解k8s kube-proxy

1、概述 我觉得只要大家知道kube-proxy是用来配置网络规则的而不是转发流量的,真正的流量由iptables/ipvs来转发就可以了。 网络是k8s的一个关键部分。理解k8s中网络组件如何工作可以帮助更好的设计和配置我们的应用。 kube-proxy就是K8s网络的核心组件。它把我们…

C++11 数据结构1 线性表的概念,线性表的顺序存储,实现,测试

一 线性表的概念 线性结构是一种最简单且常用的数据结构。 线性结构的基本特点是节点之间满足线性关系。 本章讨论的动态数组、链表、栈、队列都属于线性结构。 他们的共同之处,是节点中有且只有一个开始节点和终端节点。按这种关系,可以把它们的所有…

选择正确的Go Module Path

最近我在查看项目代码时,注意到有人在go.mod文件中将module path写为com.example.foo了。根据这个写法,相信屏幕前的读者也可以推断出这位开发人员可能是从Java阵营转到Go的。实际开发中可能有很多开发者会使用类似的内容作为module path,但这…

使用快捷回复软件的好处

在现代的客服工作中,尤其是店铺大促期间,咨询量的激增往往让客服人员应接不暇。即使打字速度再快,也难以跟上源源不断的客流。想应对这样的情况,快捷回复软件就非常适合客服人员了。 以我个人正在使用的客服宝为例,我想…