RAG学习心得
Ray Cheng 英砖生

之前因为协会的需求,也尝试过使用Ollama、AnythingLLM、FastGPT等本地工具来搭建本地的知识库,不过没有特别深入的去了解各环节的策略或者优化方法。

但最近因为可能需要先尝试搭建一个空气类知识库的MVP,所以又深入了解了一下RAG,看了一下LLamaIndex这个框架,才发现之前通过工具来使用RAG的经历,漏掉了RAG中的一些细节和策略,也发现其不是简简单单的开箱即用。所以本文主要是记录我对RAG的学习记录。

基于LLamaIndex这本书里的讲解以及之前看文章记下的笔记,尝试对RAG的各个环节中的流程或者策略选择进行一个大致的补全如下:

1. 数据处理

  • 结构化、非结构化
  • 分段(分隔符、分段大小)
  • 重叠窗口
  • 元数据提取

2. 创建索引

  • 创建摘要
    • 为了减少数据量或提高检索效率
    • 但在某些场景下可能会丢失细节信息

3. 向量化数据并存储

  • 选择向量模型
  • 向量库
    • FAISS、Pinecone、Weaviate、Milvus、Chroma

4. 用户查询处理

  • 清洗用户输入(去除噪声、标准化拼写、大小写统一等)
  • 意图识别、query改写、泛化
  • 向量化用户query

5. 检索

  • 向量检索
    • top k
    • 余弦、欧式
  • 关键字检索
    • 使用倒排索引(如 Elasticsearch、BM25)进行关键词匹配。适用于精确匹配、术语类问题。
  • 混合检索

6. 重排序模型

  • 需要更精细地评估每个 chunk 与 query 的相关性
  • top k

7. 生成回答

  • 构建prompt
  • 回答优化(Post-processing)
    • 去重与合并:避免多个 chunk 提供重复信息。
    • 引用标注:标注答案中的信息来源(chunk ID 或原文链接)。
    • 事实验证:检查生成内容是否准确(可用外部工具或人工审核)。
    • 语气调整:根据应用场景调整正式程度(如客服 vs 技术报告)。

补全下来才发现,在一些工具上使用RAG定制化确实没有代码框架这么多,在公司内部的知识库平台上,甚至可选择的设置仅仅“Top K”,当然平台内部也进行了一些策略,比如“query改写、回答prompt构建”,只是没有面向用户开放自定义而已。

而且类似Coze等平台,确实不需要把过多的参数开放给用户自己调试,毕竟面向的用户本就不是程序员或者一些技术大牛,定位是低代码平台,对于大多数人来说,固定部分的参数,得到较平衡的性能,才是真正的开箱即用。“简单易用”和“灵活定制”确实比较难平衡

就我自己这个MVP而言,因为工具已经固定了,就是内部的平台,所以在向量化、检索、查询方面已经没法更改了。那么我觉得主要考虑的是数据收集和处理、Top K、prompt构建这三个部分。