langchain 快速入门(三):搭建RAG知识库

langchain 快速入门(三):搭建RAG知识库

LLM大模型一般训练的数据都是滞后的,这是就需要用到RAG知识库,RAG知识库可以降低大模型在输出答案时的幻觉,也能够让大模型知识拓展。


文档内容切片
  1. 按字数切片
  2. 按句切片
  3. 递归切片
    不管是哪个切片方法,目的是保留语义的完整性,因此不是某个好或某个坏,根据实际需求进行选择。
文字向量化

将每个切片文字块转换为关系向量

关系向量是怎么来的? 这些是通过对模型进行大量的上下文训练,得到的词语与词语,句子与句子的语义关系上的关联,这是LLM的基础。
不同的文字向量模型输出的向量矩阵也会不同,因此在构建和检索时需要用同一个文字向量模型进行转换。

向量数据库
  1. 两个向量的余弦角大小
  2. 两千问 Qwen 教程个向量的欧氏举例
  3. 两个向量的分类区域

用文本也能搜索,为什么要用向量呢? 文本的数据库检索一般通过正则搜索,这种无法关联语义进行检索,因为我们无法保证大模型在检索时能够按照固定的格式。举个例子:

本次都利用千问的语言模型,和FAISS向量数据库演示,来演示


代码的流程如下:

  1. 初始化RAG:文本切片->文本向量模型->构建向量数据库
  2. 询问ai:提示词->文本向量模型->向量数据库检索->组合prompt->喂给LLM->回答问题->记录历史对话
文本切片

这里利用了langchain提供的文本分词器(递归分词)

构建向量数据库

这部分要注意:新版FAISS读取现有数据库要设置:allow_dangerous_deserialization=True,不然会报错

提示词模板

之前没有讲到历史对话记录,这次补充下:

这个是langchain框架的占位符(其实是框架写好了prompt模板,告诉ai这个是历史对话),使用时将历史对话记录的数组放在这里设置的字段中,在添加历史对话时要使用相关的类进行声明对话(告诉ai这句话是ai说的还是用户说的)


Chain链的解释(核心逻辑)

Chain链流程:

  1. 查询RAG的chain:获取字段->内容交给向量数据库检索->将检索的内容(数组)转换为字符串格式->保存到字段并传递给下一个任务
  2. 询问LLM的chain:获取,,字段->填充上面定义的prompt模板->喂给LLM模型->解析成文本并保存在字段

是获取上一个任务传递过来的字段内容。

如果❤喜欢❤本系列教程,就点个关注吧,后续不定期更新~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/259245.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月13日 上午8:32
下一篇 2026年3月13日 上午8:32


相关推荐

关注全栈程序员社区公众号