小白学习:rag&向量数据库

发布于:2025-03-11 ⋅ 阅读:(19) ⋅ 点赞:(0)

学习视频:
https://www.bilibili.com/video/BV11zf6YyEnT/?spm_id_from=333.337.search-card.all.click

例子:

用户提出问题
客服机器人基于rag回答用户问题

过程拆解:

客户问题 – 转化为向量表示 – 在向量数据库中进行相似性搜索 – 系统检索到相关信息后,将做为问题的上下文,相关信息context来使用 – context被整合进提示词模版中,用户信息也被整合到提示词模版中 – 新的提示词被发送到大语言模型进行提问

rag好处:

1、减少幻觉
2、提供最新资讯
3、比微调成本低

rag流程图:

在这里插入图片描述

第一步:文档内容入向量库

  1. 针对文档进行处理
  2. 对文档进行分割,分割成text chunk。此步至关重要,文档分割质量决定了检索的准确性和生成模型的效果
  3. embedding model(嵌入模型)将文本块转化成向量,这些向量捕捉了文本的语义信息,从而可以在海量文本库中检索相关内容。有多种模型可以用来进行向量嵌入,不同模型生成的向量数值可能有所不同
  4. vector embeddings(向量嵌入),使用一组数值表示数据对象在多维空间中捕捉文本、图像或音频的语义和关联
    示例:
    假设我们有以下三个句子:
    句子A:“苹果是一种甜脆的水果。”
    句子B:“香蕉是黄色的热带水果。”
    句子C:“汽车需要加油才能行驶。”
    步骤说明:
    使用嵌入模型(如 Sentence-BERT)生成向量:
    句子A → 向量 [0.3, 0.8, -0.2, 0.5, …] (假设为 384 维)
    句子B → 向量 [0.4, 0.7, -0.1, 0.6, …]
    句子C → 向量 [-0.5, 0.2, 0.9, -0.3, …]
    计算向量相似度(余弦相似度):
    A 与 B 的相似度:0.92(语义相近)
    A 与 C 的相似度:0.15(语义无关)
    B 与 C 的相似度:0.10(语义无关)
    关键结论
    语义相似性:关于水果的句子A和B向量距离近,与汽车相关的句子C距离远。
    检索应用:在向量数据库中搜索"健康水果推荐"时,系统会优先返回A/B而非C。
    降维理解:实际向量可能是数百维,但语义关系可通过数学计算映射到低维空间呈现。
  5. embedding存储在哪里 – 向量数据库
    向量数据库是一种专门用于存储和检索高维向量数据的数据库,主要用于处理与相似性搜索相关的任务。向量数据库可以存储海量高维向量。
    向量数据库与传统数据库区别:
    传统数据库用来存储结构化数据,数据类型固定,譬如整数,日期
    向量数据库用来存储高维度数据,通常用于处理非结构化数据
    向量数据库用于相似度搜索,通过语义理解,来检索相关结果,不依赖精确匹配,对拼写错误和同义词有较好的包容性

第二步:用户问答过程

  1. 用户问了一个问题后
  2. 该问题通过embedding model转换成向量嵌入,用户问题被转换为高维空间中数值向量
  3. 系统将该向量与向量数据库中其他向量进行比较,以执行相似性搜索
  4. 向量数据库中检索与用户问题相关信息的过程,被称为“检索”(retrival)
  5. 系统从海量文档或数据集中查询到与用户检索相关内容,随后,进一步筛选出排名靠前的k个文本片段(top k text chunk)
  6. 在查询到的topk文本上,进一步根据与用户查询的相关性和上下文适配度进行重新调整,这个重新排序的步骤,叫做reranking
  7. 重新排序过的文本,做为上下文相关信息(context)被嵌入到提示词模版中,与用户问题相结合,构建出全新提示词
  8. 新的提示词发给大模型,大模型返回结果给用户

最终提示词示例
你是一个咖啡专家助手,需严格根据提供的资料用中文回答
[用户问题]
如何冲泡手冲咖啡?
[context] – 从向量数据库中检索到的内容填充
研磨度建议:中粗砂糖颗粒大小
水温要求:88-92°C
注水手法:先中心注水闷蒸30秒,再顺时针画圈注水

[回答要求]
请使用不超过5步的指南,以"👉"开头