RAG(检索增强生成)

概述

RAG(检索增强生成)是将文档资料切片后存入向量数据库中,以便 AI 模型随时调用;也就是用于构建 AI 知识库,以便 AI 在工作时随时调取。详见:https://www.youtube.com/watch?v=WWdlme1EAGI&t=2s


理想情况下,用户期望 AI 模型天生具备“知识库”中的所有知识,以便在搜索或生成文本时能够结合知识库来增强输出,但实际上这几乎无法实现;AI模型学习知识的方式有三种:

一是将知识库放入上下文,但 AI 模型有上下文长度限制,无法放入太多知识,且这种方式很费 token ;

二是做 RAG(检索增强),这是唯一可行,且成本最低的方式;就是将知识库放入向量数据库,然后让 AI 模型在执行任务时随时查询;

三是做微调,就是将知识库通过清洗、大量标注等操作整理成高质量的训练数据,然后对模型进行微调训练;如果微调效果不佳,还需要反复迭代,人力和算力成本极高(尤其是人力)。且微调后的 AI模型并不会记住所有知识内容,它只会记住写作风格、表达方式等,并且难以更新,除非再次微调。

注:模型微调的核心价值不在于“增加新知识库”,而在于“改变模型的大脑回路”、“改为模型的言行举止(风格与格式化)”、“让模型学会特定技能”、“提升特定领域的理解力”,而非记住所有知识。


而且也不应该让 AI 模型记住所有知识,因为这会导致 AI 模型的注意力分散、生成质量下降,高质量的生成原则就是让 AI 模型只在需要时调用相关知识,这比“加载所有知识”更智能。在 AI 生成需求文档这种场景下,最佳实践是通过 模型微调 或 规则 prompt 模板工程 让模型始终遵循 固定的章节结构、表达风格,然后对知识库进行动态检索。


综上,模型的注意力是有限资源(很珍贵),无关内容会产生干扰,生成会变得模糊,模型会平均化表达;RAG 的本质是让模型只在需要时只关注正确知识,这和人类只在需要时查阅相关资料一样。因此,高质量的系统是让 AI 永远只看到“当前最相关的那几页”;知识库的组织也应该以树形结构( 目录 + 内容)来组织,即层级化索引。

无论是本地文件感知、代码补全或RAG向量数据库等,都是以层级化索引的方式来实现和组织知识;像代码补全这种场景还会进行上、下压缩等优化,详见渐进式披露


RAG也在持续进化,最新 GraphRAG 让知识检索效率更高,详见:https://www.youtube.com/watch?v=n-lJNXemlaQ


基本原理

1> 知识入库

将知识文档拆成知识片段 -> 通过 Embedding 模型计算出知识片段的向量值 -> 将向量值和知识片段存入向量数据库;


2> 用户检索知识

用户/模型 输入 -> Embedding 模型将输入转为向量值 -> 从向量数据库中检索相量值相似的多个知识片段 -> Cross-Encoder 模型从多个知识片段中筛选出相关度最高的几个知识片段 -> 返回给用户或模型;



举报

© 著作权归作者所有


0