RAG及相关技术栈梳理

RAG基础介绍

1. 索引 — 将文档库分割成较短的 Chunk(文档切片),并通过编码器构建向量索引。

2. 检索 — 根据问题和 chunks 的相似度检索相关文档片段。

3. 生成 — 以检索到的上下文为条件,生成问题的回答。

主要流程及技术:

1)ETL-数据接入工具

2)标注系统-问答对生成

3)词嵌入模型-向量化/嵌入

4)向量数据库-向量存储&查询

5)知识库-知识存储

6)Search-知识和向量的检索能力

7)Rerank-混合检索后的重排

8)LLM-利用大模型的生成能力重新整理回答

本次主要介绍3)词嵌入模型和4)向量数据库

词嵌入模型(embedding model

Q:什么是embedding?

A:用户输入的任意语言的文本,都会先进行嵌入操作,转换为向量表示。这个过程即embedding,也可以理解为向量化或者词嵌入的过程

主要模型介绍和对比

模型

公司

开源

Sequence Length

Dimension

text-embedding-3-large

openAI

8192

3072

embedding-v1

百度云

384

bge-large-m3

智源研究院

8192

1024

text-embedding-v3

阿里云

8192

1024

m3e

Meta ai

512

768

Embedding

讯飞

acge

合合信息

1024

1792

bce-embedding-base_v1

网易

512

768

具体使用情况可以自行查阅榜单(在业界权威的中文语义向量评测基准C-MTEB(Chinese Massive Text Embedding Benchmark),是动态变化的。

代码举例

#功能:根据问题检索出最相似的文档(用的bge-m3)

from FlagEmbedding import BGEM3FlagModel

model = BGEM3FlagModel(r'xxx\bge\bge\m3', use_fp16=True)

app = FastAPI()

#2个问题

queries = ["What is BGE M3?",

           "Defination of BM25"]

#2个文档

docs = ["BGE M3 is an embedding model supporting dense retrieval, lexical matching and multi-vector interaction.",

        "BM25 is a bag-of-words retrieval function that ranks a set of documents based on the query terms appearing in each document"]

#问题向量化

query_embeddings = model.encode(queries, batch_size=12, max_length=1024,)['dense_vecs']

#文档向量化

docs_embeddings  = model.encode(docs)['dense_vecs']

#问题和文档两两计算相似度

similarity = query_embeddings @ docs_embeddings.T

#输出相似度结果

print(similarity)

向量数据库

作为存储解决方案使RAGAI Agent 具备记忆能力,能够保存和检索相关信息,实现长期学习和任务连续性。

目标:在数百万甚至数百亿的向量中高效地找到与给定向量最相似的那些向量,同时,也需要高效地存储和管理海量的 embedding

传统数据库虽然能做,但是不专业:无法做到最优,特别是在处理大规模向量时依旧有很大的性能问题和存储开销。如redisearch,在 embedding 数量仅仅在百万级规模时,就要花巨量的内存(> 16G),以及非常漫长的构建索引的时间。有些还没有成熟的相似度算法支持。

向量数据库对比表:

数据库

公司

开源

支持语言

其他

Weaviate

Weaviate

PythonJavaScriptgo

使用图数据结构,专业向量数据库

Qdrant

Qdrant

RustPythongo

专业向量数据库

pgvector

Supabase

任何带有PostgreSQL客户端的语言

PostgreSQL插件

Milvus

Zilliz

python、java、c++、go

专业向量数据库

es

Elastic

python、java、c++、go

7.10支持knn8.0支持向量类型及nlp

流行选择: Chroma, Weaviate, Pinecone, Qdrant, Milvus
特殊方案: Postgres + pgvector 扩展

也可自行查阅业界留下的向量数据库排行榜,动态变化。

RAG框架

已有很多成熟的框架封装好了上面说的一些技术组件并提供web形式的管控门户:

  1. AnythingLLM,具备完整的 RAGAI代理能力。https://github.com/Mintplex-Labs/anything-llm
  2. MaxKB,即插即用。https://github.com/1Panel-dev/MaxKB
  3. RAGFlow,一个基于深度文档理解的开源RAG引擎。https://github.com/infiniflow/ragflow
  4. Dify,一个开源的大型语言模型应用开发平台。Dify直观的界面结合了AI工作流、RAG流程、代理能力、模型管理、可观测性功能。https://github.com/langgenius/dify
  5. FastGPT,提供即开即用的数据加工和模型调用能力,允许通过流程可视化进行工作流编排。https://github.com/labring/FastGPT  。项目技术栈:NextJs + TS(TypeScript) + ChakraUI + Mongo + Postgres (Vector 插件)

Graph-RAG框架

GraphRAG 及如今热门的 KAG框架的核心改进在于 RAG 的基础上,加强了实体、Chunk之间的关联,适当融入了知识图谱的功能,以此来提高信息检索挖掘潜在实体关联的能力,增强检索召回。

  1. LightRAG,简单快速的Graphrag检索增强生成。https://github.com/HKUDS/LightRAG
  2. microsoft-GraphRAG,一个模块化的基于图的检索增强生成(RAG)系统。https://github.com/microsoft/graphrag
  3. KAG,基于OpenSPG引擎的知识增强生成框架https://github.com/OpenSPG/KAG
  4. Fast-GraphRAGGraphRAG的轻量化版本。https://github.com/circlemind-ai/fast-graphrag
  5. Tiny-GraphRAGhttps://github.com/limafang/tiny-graphrag

<think>好的,我需要回答用户关于RAG技术栈的数据结构与组成的问题。首先,我需要回忆一下RAG的基本概念和相关资料。根据用户提供的引用,特别是引用[1]和[3],RAG主要包括检索和生成两个部分。数据结构方面,引用[2]提到使用键值对构建数据存储,这可能涉及向量数据库。 接下来,我需要明确RAG技术栈的各个组成部分。通常来说,RAG系统会涉及文档处理、向量化模型、向量数据库、检索模块以及生成模型。文档处理部分可能包括文本分块和Embedding生成,这些步骤需要将原始文本转化为向量。向量数据库如FAISS或Pinecone用于高效检索,而检索模块可能结合关键词和向量搜索,即混合检索,如引用[3]提到的混合检索与RAG-Fusion。 然后,生成部分使用大模型如GPT来整合检索结果生成回答。数据结构的核心是向量数据库,存储文本块及其向量表示,可能还包括元数据,如引用[2]中的键值对结构。此外,缓存和索引结构也是优化检索速度的重要部分,引用[1]提到高级RAG算法可能涉及缓存机制。 需要确保回答结构清晰,分点说明技术栈组成和数据结构,同时引用提供的资料。还要注意用户要求使用中文,LaTeX格式正确,以及生成相关问题。最后,检查是否有遗漏的部分,比如预处理阶段或扩展技术如RAG-Fusion,确保覆盖用户提到的所有相关点。</think>### RAG 技术栈的数据结构与组成 RAG(Retrieval-Augmented Generation)技术栈的核心是通过检索外部知识库增强生成模型的能力,其数据结构与组成主要包括以下部分: --- #### 1. **数据存储层** - **文档分块与向量化** 原始文档(如PDF、文本)被切分为语义块(chunks),并通过嵌入模型(如BERT、Sentence-Transformer)转化为向量表示(Embeddings)。例如,一段文本$T$被映射为向量$v \in \mathbb{R}^d$[^3]。 - **向量数据库** 使用键值对(Key-Value Pairs)或专用向量数据库(如FAISS、Pinecone)存储向量及其关联的原始文本块。数据结构通常包含: - **Key**: 向量索引或唯一标识符 - **Value**: 文本块、元数据(如来源、时间戳)[^2]。 --- #### 2. **检索层** - **混合检索机制** 结合**向量检索**(相似度匹配,如余弦相似度)和**关键词检索**(BM25算法),提升召回率与准确率。 - **索引优化** 通过倒排索引、图索引等技术加速检索,例如对高频关键词建立倒排列表[^1]。 --- #### 3. **生成层** - **大语言模型(LLM)** 如GPT-4、Llama等,将检索到的文本块与用户输入结合,生成最终回答。例如: ```python response = llm.generate(query, retrieved_contexts) ``` --- #### 4. **扩展组件** - **缓存机制** 对高频查询结果缓存,减少重复计算。 - **元数据过滤** 通过文档来源、时间等元数据筛选检索结果,增强时效性。 --- #### 典型数据流示例 1. 用户输入查询$Q$,嵌入模型将其转化为向量$v_Q$。 2. 向量数据库检索与$v_Q$最相似的$k$个向量,返回关联文本块。 3. 大模型整合检索结果与$Q$,生成自然语言回答。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值