基于LangChain的Embedding开发手册(保姆级)

前言

时至今日,经过2年的“攻城拔寨”,大模型显然吹进了“寻常百姓家”。如果你还不了解ChatGPT,不了解通义、文心、混元等国内任意一款大模型产品,那么请来博主这里坐坐,我们“边看边聊”

在这里插入图片描述

随着ChatGPT的问世,仿佛一夜间,把AI的门槛从金字塔顶端拉至了腰身,甚至脚跟处,神不神奇?当然神奇,这个领域曾经是机器学习擅长的圈子,除非你具备相当的基础、甚至专业能力,否则可以说“与你无关”

如今呢,AIGC遍天下,工具化浪潮代替了原始的生产方式,你不需要懂数学、懂计算机,什么算法、数据都可以抛在脑后。你要做的只需要“懂”它即可。唯有懂它,才能很好的利用它,也就是AI工具的使命和价值。

今天博主带各位,先了解一下如何让大模型“懂”你吧。刚才讲是你要懂它,现在反过来它要懂你,这是为什么? 因为大模型具备一定的“类人思维”,所以懂你是前提。

Q1:什么是RAG

如何理解懂你这件事呢? 这可不像爱一个人,随着时间进程,彼此间会自然发生。大模型可以说是一块“木头”,需要你告诉它才行。比如你想查个什么东东,让它按照你的意志进行回答问题,怎么办?这就不得不提RAG了。

不熟悉机器学习的同学,可能不了解RAG。但是熟悉的同学,一定知道它的作用。以下是博主从百度百科摘录的介绍,可窥一二:

检索增强生成Retrieval-augmented Generation),简称RAG,是当下热门的大模型前沿技术之一。 检索增强生成模型结合了语言模型和信息检索技术。具体来说,当模型需要生成文本或者回答问题时,它会先从一个庞大的文档集合中检索出相关的信息,然后利用这些检索到的信息来指导文本的生成,从而提高预测的质量和准确性。——百度百科

怎么理解它?来看看下面这张图,也许有些帮助:

在这里插入图片描述

一句话总结:用户的问题结合RAG后,把检索结果再次输入到大模型,生成新的结果。
如果觉得难以理解,可以参考下面简化后的流程:

在这里插入图片描述
总之,就是讲了一件事,在让大模型懂你前,必须“喂饱”它。然后让它有意识的懂你并按你的意志运转。通过RAG的过程,博主梳理几个关键词:

序号名称作用
1question用户的问题
2textsplit文本分段,为下一步embedding做准备
3embedding文本嵌入,机器学习领域文本向量化的关键步骤
4retrieval文本检索,结合用户问题和embedding数据检索
5document检索结果,一个标准化的文档对象

其中,embedding是关键的一环。

Q2:如何完成Embedding(嵌入)

通俗的讲,embedding就是把你的数据转换成机器可识别的格式。在机器学习领域,通常以向量的形式存储数据,一是为了方便检索,二是为了提高检索质量。当然embedding可通过多种方式完成,博主选择基于langchain完成以下实践。

提示:在正式完成以下操作前,需安装langchain、langchain-core、langchain-community、langchain-text-splitters、langchain-chroma、chroma、pypdf、dashscope

1. 文档加载

首先需要把文档转换为符合嵌入的标准文档,即Document。

1.1 load pdf

使用PyPDFLoader工具完成:

# 加载PDF文件
from langchain_community.document_loaders import PyPDFLoader
directory_path = "/pdf"
mydata = []
for filename in os.listdir(directory_path):# 检查文档格式if filename.endswith(".pdf"):loader = PyPDFLoader(directory_path+'\\'+filename)mydata.append(loader.load_and_split())
1.2 load txt/html

使用UnstructuredHTMLLoader工具完成:

from langchain_community.document_loaders import UnstructuredHTMLLoader
# 加载html文件为document
file_path = "/html"
loader = UnstructuredHTMLLoader(file_path)
mydata = loader.load()
1.3 load word

使用UnstructuredWordDocumentLoader工具完成:

from langchain_community.document_loaders import UnstructuredWordDocumentLoader
# 加载docx/doc文件为document
directory_path = "/word"
mydata = []
for filename in os.listdir(directory_path):# 检查所有doc以及docx后缀的文件if filename.endswith(".doc") or filename.endswith(".docx"):loader = UnstructuredWordDocumentLoader(directory_path+'\\'+filename, mode="elements", strategy="fast")mydata.append(loader.load())

2. 文档切割

你可以把第1步加载后的document按一定的chunk切分为一份一份小文档:

from langchain_text_splitters import CharacterTextSplitter
# 创建分割器
text_splitter = CharacterTextSplitter(chunk_size=1000,chunk_overlap=0
)
# 加载文档
docs = []
for document in mydata:doc = text_splitter.split_documents(document)docs.append(doc)

其中chunk_size是每块文本(即chunk)有序切割的最大长度;chunk_overlap是相邻chunk重叠的token数量。

3. 嵌入模型

嵌入模型实际上是将分割后的文档(chunk)转换为向量的工具。比如阿里的text-embedding-v1或者hugeface的all-MiniLM-L6-v2等。这里以阿里的模型为例,结合langchain可以这样定义一个嵌入模型:

from langchain_community.embeddings import DashScopeEmbeddings
embedding = DashScopeEmbeddings(model="text-embedding-v1",dashscope_api_key='阿里dashscope api key'
)

4. 向量存储

完成前3步,最后一步就是存储了。怎么存?向量喽~

from langchain_community.vectorstores import Chroma
vector_dir = '/db'
vectordb = Chroma.from_documents(documents=docs,embedding=embedding,persist_directory=vector_dir 
)
# 持久化,支持迁移
vectordb.persist()

至此,你轻松的完成了文本向量的持久化,为下一步大模型RAG的实现,打下了坚实的数据基础。


结语

大模型本质是工具,善者善用。如何利用它的长处以克服它的“劣势”,才是使用它的目的。而RAG为合理、正确的使用它,提供了一个最佳路径,同时embedding又是RAG的必由之路。所以本文可为你提供一些灵感,助你上道~

走过的、路过的盆友们,点点赞,收收藏,并加以指导,以备不时之需哈~

精彩回顾

基于DashScope+Streamlit构建你的机器学习助手(入门级)
基于LangChain的大模型学习手册(入门级)
基于Python的大模型学习手册(入门级)


在这里插入图片描述

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

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

相关文章

Stable Diffusion绘画 | ControlNet应用-IP-Adapter:堪比 Midjourney 垫图

IP-Adapter 是腾讯AI实验室研发的控制器,属于 ControlNet 最强控制器前三之一。 如果想参照图片的风格,生成各种各样类似效果的图片,就可以用到 IP-Adapter。 在 ControlNet 单元中上传一张图片: 不输入任何提示词,出图…

Python3网络爬虫开发实战(17)爬虫的管理和部署(第一版)

文章目录 一、 Scrapyd 分布式部署1.1 了解 Scrapyd1.2 准备工作1.3 访问 Scrapyd1.4 Scrapyd 的功能1.5 ScrapydAPI 的使用 二、Scrapyd-Client 的使用2.1 准备工作2.2 Scrapyd-Client 的功能2.3 Scrapyd-Client 部署 三、Scrapyd 对接 Docker3.1 准备工作3.2 对接 Docker 四、…

Flask 设置session 自定义登录验证

"""1. 设置session# 设置session成功 重定向到首页session.permanent True # 设置会话过期时间session[info] usernamereturn redirect(url_for(index))2. 获取sessioninfo session.get(info, default0)return render_template(index.html, infoinfo)3. 设置…

Java笔试面试题AI答之单元测试JUnit(6)

文章目录 31. 如果将JUnit测试方法声明为“私有”会发生什么?1. 测试方法不会被JUnit执行2. 违反JUnit的设计原则3. 潜在的测试覆盖率问题4. 解决方案 32. 如果声明JUnit测试方法返回“String”会发生什么?编译错误运行时行为正确的做法结论 33. 可以使用…

变电站缺陷隐患检测图像数据集,总共包含8000张图片,包含渗漏油,鸟巢,表盘破损,呼吸器变色等

变电站缺陷隐患检测图像数据集,总共包含8000张图片,包含渗漏油,鸟巢,表盘破损,呼吸器变色等。 变电站缺陷隐患检测图像数据集营销介绍 数据集名称 变电站缺陷隐患检测图像数据集(Substation Defect Detect…

微分电路设计

1 简介 微分电路会根据电路时间常数和放大器的带宽来输出某个频率范围内输入信号的微分。向反相输入施加输入信号,输出相对输入信号的极性会反相。理想的微分器电路基本都不稳定,需要增加输入电阻器和反馈电容器,才能达到稳定,但是…

让《米小圈动画中国史》来为孩子打开浩瀚历史的书页!

当我们漫步在浩瀚的历史长河中,每一段故事、每一个人物都如璀璨星辰般闪烁。历史不仅是过去的记忆,更是一面镜子,映射出民族的辉煌与艰辛。然而,对于我们的孩子而言,传统的历史教材常常显得枯燥而乏味。作为家长&#…

【MATLAB源码-第224期】基于matlab的快跳频系统仿真采用4FSK,模拟了单音干扰,宽带干扰以及部分频带干扰,输出误码率曲线以及各节点图像

操作环境: MATLAB 2022a 1、算法描述 跳频通信系统概述 跳频通信系统是一种通过快速切换载波频率来进行信息传输的无线通信技术。它在军事和商业通信中广泛应用,具有较强的抗干扰和抗截获能力。系统设计主要包括信号调制、跳频序列生成、信道模拟以及…

链表的合并,结点逆置,顺序表的高效划分(数据结构作业02)

目录 链表的合并 链表的结点逆置 顺序表的高效划分 链表的合并 已知两个递增有序的单链表A和B,分别表示两个集合。试设计一个算法,用于求出A与B的交集,并存储在C链表中。例如 : La {2,4,6,8};…

如何使用命令行快速下载Google Drive/OneDrive大文件

OneDrive OneDrive使用wget下载会出现403 forbidden,可通过下面方法下载。 浏览器右键进入检查界面,选择netowork,搜索download.aspx,然后在待下载文件处点击下载,即可出现下载链接,复制为cURL即可下载。…

【Prompt Engineering:ReAct 框架】

ReAct 框架 从 Yao 等人,2022(opens in a new tab) 引入了一个框架,其中 LLMs 以交错的方式生成 推理轨迹 和 任务特定操作 。 生成推理轨迹使模型能够诱导、跟踪和更新操作计划,甚至处理异常情况。操作步骤允许与外部源(如知识…

硬件工程师笔试面试——开关

目录 11、开关 11.1 基础 开关原理图 开关实物图 11.1.1 概念 11.1.2 常见的开关类型及其应用 11.2 相关问题 11.2.1 开关的工作原理是什么? 11.2.2 在设计一个电子系统时,如何选择最适合的开关类型? 11.2.3 不同类型的开关在实际应用中有哪些优势和局限性? 11.…

Rust GUI框架Tauri V1 入门

文章目录 Tauri介绍Vite开始创建 Rust 项目 调用指令window.__TAURI_INVOKE__.invoke is undefined 问题 参考资料JavaScript 模块Vue 框架Vue RouteviteNuxt gitignore文件上传到csdn gitcode网站端本地端 gitcode发布 Tauri介绍 Tauri是一款用Rust构建的开源框架&#xff0c…

Linux操作系统面试题记录

一、进程与线程 1.并发和并行的区别 并发:一个cpu处理器处理多个任务; 并行:多个cpu处理器处理多个任务; 2.进程和线程是什么?区别?何时用线程何时用进程? Linux中其实没有进程线程之分&…

少儿编程小游戏 —— Scratch 火柴人勇者传说

在线玩:Scratch动作冒险游戏 – 火柴人勇者传说免费下载-小虎鲸Scratch资源站 在少儿编程的世界里,创造属于自己的游戏是一件既有趣又富有挑战的事情。而今天要介绍的游戏——《火柴人勇者传说》,便是一个充满冒险精神的作品,专为…

【PCB工艺】表面贴装技术中常见错误

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 1、什么是SMT和SMD2、表面贴装技术的优势是什么?3、通孔和表面贴装技术之间的区别是什么?4、焊…

MySQL-DQL(数据查询语言)

数据查询语言(DQL-Data Query Language) 代表关键字:select MySQL语句执行顺序 1、基础操作 1.1 启动服务 a.手动启动 我的电脑->右键->管理->服务->mysql->右键启动/启动 b.命令方式 在管理员模式下运行cmd,执行如下操作: net sta…

轻量桌面应用新星:Electrico,能否颠覆Electron的地位?

在桌面应用开发的世界里,Electron曾经是一位风云人物。它让开发者可以用熟悉的Web技术构建跨平台应用,但它的重量级体积和系统资源的高消耗一直让人头疼。现在,一个新工具悄然登场,试图解决这些问题——Electrico,一个轻量版的桌面应用开发框架。 10MB取代数百MB,你不…

计算机人工智能前沿进展-大语言模型方向-2024-09-16

计算机人工智能前沿进展-大语言模型方向-2024-09-16 1. Securing Large Language Models: Addressing Bias, Misinformation, and Prompt Attacks B Peng, K Chen, M Li, P Feng, Z Bi, J Liu, Q Niu - arXiv preprint arXiv:2409.08087, 2024 保护大型语言模型:…

Solid Converter PDF10.1安装教程

软件介绍 Solid Converter PDF是一套专门将PDF文件转换成word的软件,除了转换成word文件外,还可以转换成RTF以及Word XML文件。除此之外,它还有一个图片撷取功能,可以让我们]将PDF档里的图片撷取出来,以及将PDF档里的…