RAG
RAG的过程
- 拆分文本成文本块
- 拆分算法:
- 使用嵌入模型进行向量化
- 对一段文本使用一堆维度很多的向量进行表示
- 存入向量数据库
- 对输入进行向量化
- 使用传统的向量距离计算算法进行向量数据库的检索
- 提取数据库的原文片段,整合成prompt,投喂给LLM打模型
- 对输出整理和提取
技术局限性
- 切片粗暴
- 简单分块算法 (如按段落或固定字数)
- 太小了没有全局信息,句子可能被截断, 影响上下文理解
- 太大了不能精确统计
- 检索不精准
- 向量匹配基于数字相似性, 不代表实际含义
- 向量本质上不能完全代表“语义”
- 本质上需要表示一段文本的 meaning tree
- 结果可能与提问无关
- 向量匹配基于数字相似性, 不代表实际含义
- 没有大局观
- 无法处理结构化数据或统计型问题
- 大模型难以从数据碎片中做出准确总结
- 不能进行复杂的逻辑推理和动态交互
向量检索方法
- 主流向量检索方法都是基于欧几里得距离设计,主要看“谁离你最近”;但有时AI其实更需要比较“语义相关性”,也就是最大内积、看谁最相似。
-
内积空间并不是一个严格意义上的“度量空间”。一个空间可以称之为“度量空间”,最重要的属性就是“三角不等式”(三角形中任意两边之和大于第三边,而任意两边之差小于第三边)。HNSW、NSG、SSG等state-of-the-art的向量检索算法之所以能如此高效,就是因为他们都利用了三角不等式对索引结构(图结构)进行了高效的裁剪。
- 一是把最大内积转换为最小欧式距离,进而可以用HNSW、NSG来解决
- 二是不进行空间转化,直接在内积空间进行检索
进阶方案
- 加入重排序模型
- 初步检索数据 -> 语义分析
- 重新排序, 提高检索精度
- 使用MCP Server连接传统的数据库
- AI操纵关系型数据库
- 解决结构化数据查询问题
- 超大上下文模型
- 直接拖入资料, AI进行检索
- 如JiminI2.0 Pro, 上下文窗口长达2000万token
- 知识图谱RAG GraphRAG
- LPG:labeled property graph
- 使用大模型+prompt 生成
- 识别
- 合并
- 使用固定程序拼接成图谱
No comments to display
No comments to display