# RAG通识

### 起源：Meta发布RAG论文

2020年，Meta发布 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

<https://arxiv.org/abs/2005.11401>

### why RAG？

* 数据滞后
* 企业知识库向量化，提供特定上下文的大模型增强搜索

### 定义

将结构化知识的精准性与生成式AI的创造力相结合。

### 搜索发展历程

* 精确匹配 与或非 / 全文搜索
* NLP自然语言处理 CNN,RNN （Transfomer架构之前）
* Transfomer架构构建的LLM和RAG结合搜索实现：

### 实现思路 LLM+动态数据源

* 检索阶段 从外部数据源检索与用户查询相关信息 【语义向量搜索】数据前置处理 外部数据源：API,数据库，文档库等等
* 生成阶段 将检索信息和用户promot一起输入大模型，生成增强的回答。

### 模块化RAG —— 工程化

* 搜索模块 在不同的数据源上搜索

### 技术栈

LangChain

* 模块化设计，提供构建动态信息检索的组件

LammaIndex

* 提供高效索引机制

### RAG挑战

* 数据隐私和安全
* 系统性能
* 多样化查询需求产生的查询路由功能 （似乎有点往agent上靠了）
* 数据审计和监控

### Embedding 向量化

计算多个向量之间的相似度并排序

* 余弦相似度，向量夹角越小越相似

1 完全相同 0 没有相似性 -1 完全相反

### 数据索引和检索

索引

* 倒排索引，全文检索
* B树索引
* 哈希索引

检索

* 布尔模型
* 向量检索
  * 余弦相似度
* 概率模型（BM25 + 语言模型）
* 神经网络模型agent开发指数
* 相似度计算（向量模型和神经网络模型的实例化）
  * 余弦相似度 向量夹角越小越相似
  * 欧式距离：向量实际值
  * 点积 点积值越大越相似

技术实现

* ElasticSearch
* Annoy 向量化数据快速搜索
* FAISS 为大规模向量数据设计 支持GPU加速

### Transfomer自注意力机制

* 输入嵌入（输入向量化）
* 线性变换，得到查询，键，值三个向量
* 注意力得分计算 计算查询向量和键向量的点积，得到注意力的得分（表示当前词对其他词的相关性）
* 注意力权重计算

### RAG工作范式

* 朴素RAG 描述了RAG工作流程的基础框架

1. 文档库向量化
2. 根据查询条件向量化检索文档库
3. 将查询和检索结果扔给大模型

* 进阶RAG 基于朴素RAG的优化

1. 文档向量化的精细控制 （分割策略，编码方法） 最佳实践？
2. 检索前的用户查询优化（自动优化用户promot） + 检索后的文档重排序（权重机制 ，评分模型）当前最佳实践？
3. 结果校验（生成内容语义一致性和事实准确性校验）

* 模块化RAG

1. 专用查询向量数据库 我怎么觉得这是基本条件呢？
2. 回答融合，使用多个模型或多次回答，最终融合结果，适用于多角度解答和多源信息场景
3. 微调 ， 强化学习 （底层大模型的定制化）
4. RAG模式编排，适用不同场景

### RAG优势

* 动态知识库更新
* 专业性（eg：医学领域，结合最新的研究论文，临床指南，药品说明书，提供更加科学可信的建议，提升回答质量，增强用户对系统的信任感）

### RAG应用场景

* 基于规则的客户服务 到 RAG增强的客户服务 （动态检索知识库，产品手册，常见问题问答）

### 检索系统横评

基于知识图谱 wikidata， dbpedia 基于关系型数据库 基于向量数据库

### 向量数据量横评

es 生态

faiss gpu 多索引

milvus gpu 多索引 多模态友好 ai生态（langchain, llamaindex, hugging face）

### 嵌入模型选型

MTEB

* 性能与资源消耗
* 多语言
* 本地部署/云托管
