Skip to content

RAG

Retrieval Augmented Generation 检索增强生成

用于解决 ai 面对大量上下文导致的注意力发散产生幻觉的情况,让 LLM 在生成答案前,先从外部知识库中检索相关上下文,然后基于这些真实、具体的上下文生成回答。

Embedding 模型

把一段输入向量化,相当于在多维空间的信息压缩,相似的输入,其向量化的结果就越相似。

向量的维度越高,那代表的语义也就越精确,比如:

  • OpenAI : text-embedding-3-small --> 1536 维
  • OpenAI : text-embedding-3-large --> 3072 维

有了 Embedding 模型之后,Agent 就可以把向量距离最近的那些信息作为上下文结合用户输入发给大模型,这样就能显著减少幻觉。

向量数据库

对于巨大的文本资料 --> chunking --> embedding --> 然后把文本和向量的对应关系需要维护起来。这就出现了向量数据库。

  • Pinecone
  • chroma
  • PostgresSQL + pgvector

每条数据都携带一个向量,内部也通过底层的优化支撑了快速索引的向量

RAG 的缺点

依赖 chunking

  • 其效果很大程度上取决于 chunking 的方式,对于形式多种多样的资料,很难用统一的方式进行 chunking,有时候不合理的chunking 会导致语义被切断。
    • 改进:
      • 大模型参与分块,基于连续语义分块

缺乏全局视角

  • 比如 “资料中提到了多少次 ?“ 这种问题 RAG 就难以处理。
    • 改进方案:
      • 主语统一替换...

小结

RAG 本质是一种压缩,针对 LLM 对上下文容量有限的背景下的一种妥协,通过预处理大型资料,通过向量化提取紧凑的有效的语义。

在预处理中,向量化并入库,在用户交互中,用户输入向量化,并基于向量距离检索。

随着ai发展,RAG 这种方式应该也会逐步被取代....