最近自己在搭一个基于本地知识库的RAG问答系统,用的LangChain + OpenAI embedding,ChromaDB做向量存储。文档大概有200多篇技术博客,但测试下来发现,查一些具体问题时经常召回到一堆不相关的片段,甚至有些相关的内容排在后面。感觉是不是分块策略有问题,还是chunk overlap设得不对?或者是不是应该先做一层关键词过滤再向量检索?求大佬们指点一下经验,不想一上来就上重排序那么复杂。
最近自己在搭一个基于本地知识库的RAG问答系统,用的LangChain + OpenAI embedding,ChromaDB做向量存储。文档大概有200多篇技术博客,但测试下来发现,查一些具体问题时经常召回到一堆不相关的片段,甚至有些相关的内容排在后面。感觉是不是分块策略有问题,还是chunk overlap设得不对?或者是不是应该先做一层关键词过滤再向量检索?求大佬们指点一下经验,不想一上来就上重排序那么复杂。
200多篇博客其实不算多,召回乱大概率是分块粒度的问题。技术博客里代码块和正文混在一起,按固定字数切很容易把上下文切碎,建议先按标题层级做语义分块,代码单独处理。检索的时候可以试试混合检索,BM25加向量召回再合并,比纯向量稳不少,关键词过滤也确实有用但别指望它单独扛。overlap别设太大,不然相邻块内容重复,反而会把真正相关的挤下去。