Skip to main content

RAG

RAG的过程

  1. 拆分文本成文本块
    1. 拆分算法:
  2. 使用嵌入模型进行向量化
    1. 对一段文本使用一堆维度很多的向量进行表示
  3. 存入向量数据库
  4. 对输入进行向量化
  5. 使用传统的向量距离计算算法进行向量数据库的检索
  6. 提取数据库的原文片段,整合成prompt,投喂给LLM打模型
  7. 对输出整理和提取

技术局限性

  1. 切片粗暴
    1. 简单分块算法 (如按段落或固定字数)
    2. 太小了没有全局信息,句子可能被截断, 影响上下文理解
    3. 太大了不能精确统计
  2. 检索不精准
    1. 向量匹配基于数字相似性, 不代表实际含义
      1. 向量本质上不能完全代表“语义”
      2. 本质上需要表示一段文本的 meaning tree
    2. 结果可能与提问无关
  3. 没有大局观
    1. 无法处理结构化数据或统计型问题
    2. 大模型难以从数据碎片中做出准确总结
  4. 不能进行复杂的逻辑推理和动态交互

向量检索方法

  1. 主流向量检索方法都是基于欧几里得距离设计,主要看“谁离你最近”;但有时AI其实更需要比较“语义相关性”,也就是最大内积、看谁最相似。
  2. 内积空间并不是一个严格意义上的“度量空间”。一个空间可以称之为“度量空间”,最重要的属性就是“三角不等式”(三角形中任意两边之和大于第三边,而任意两边之差小于第三边)。HNSW、NSG、SSG等state-of-the-art的向量检索算法之所以能如此高效,就是因为他们都利用了三角不等式对索引结构(图结构)进行了高效的裁剪。

    1. 一是把最大内积转换为最小欧式距离,进而可以用HNSW、NSG来解决
    2. 二是不进行空间转化,直接在内积空间进行检索

进阶方案

  1. 加入重排序模型
    1. 初步检索数据 -> 语义分析
    2. 重新排序, 提高检索精度
  2. 使用MCP Server连接传统的数据库
    1. AI操纵关系型数据库
    2. 解决结构化数据查询问题
  3. 超大上下文模型
    1. 直接拖入资料, AI进行检索
    2. 如JiminI2.0 Pro, 上下文窗口长达2000万token
  4. 知识图谱RAG GraphRAG
    1. LPG:labeled property graph
    2. 使用大模型+prompt 生成
      1. 识别
      2. 合并
      3. 使用固定程序拼接成图谱