RAG的优化

我在初期,学习Langchain框架,构建RAG,落地实际的项目,记录下后续有哪些可以值得优化的地方

RAG的优化

让知识库成为可更新、可演进的知识库

在第一次构建 RAG 的时候,做的比较简单,将单个文件的所有内容,计算成 MD5,这样会导致一个问题,如果我后续想要更新文件中的部分内容,那么文件的MD5也会变,会让向量数据库中的内容产生冗余和知识错误。

示例说明:文件内容 ABCD 后续需要改成 ABCE。

解决方案:

推荐设计思路(核心:稳定文档 ID + 先删后写或幂等写入)

  1. 给每条知识一个稳定的「逻辑文档 ID」
    1. 不能用文档内容MD5值作为Id
    2. 再更新文章的时 doc_id 不能发生改变
    3. 每次chunk时中的 metadata 里至少要有 doc_id 可选 version update_at auth
  2. 更新流程:对同一 doc_id 先删再灌
    1. Delete + Add:按 metadata 过滤删除该文档下的所有旧 chunk(例如 where={“doc_id”: “xxx”}),再对最新全文重新切分、add_texts。
  3. 去重 / 跳过策略要分层
    1. 文档级:若上游传来「与上次相同的全文 hash」,可以跳过(省 embedding 钱)。库内一致性:仍以 doc_id 为准做删除/覆盖;不把「全局 md5 列表」当成唯一真相,否则无法表达「同一条目多次修订」。

后续

跟随着项目实际遇到的问题,持续更新


使用 Hugo 构建
主题 StackJimmy 设计