最近跟着教程搭了一个基于LangChain和ChromaDB的RAG问答demo,用来回答公司内部的一些技术文档。文档是PDF格式,拆分用的是RecursiveCharacterTextSplitter,chunk_size设了500,overlap设了100。但实际跑起来,用户问“数据库连接超时怎么办”,它经常返回一些跟“连接”“超时”关系不大的片段,比如数据库安装步骤。我怀疑是Embedding模型没选对,或者文档切得太碎了,有没有老哥分享下怎么调整分块策略或者选检索模型?另外,是不是得加一个reranker重新排序?现在用的是默认的相似度搜索,感觉效果不稳定。
楼主
2026-07-27
搞了个RAG问答系统,检索结果总是不太对,怎么优化?
请 登录 后发表回复
全部回复
共 164 条
2楼
2026-09-19
chunk设500有点碎,技术文档里“连接超时”这种问题往往上下文跨了好几个段落,切太细确实容易丢关键信息。你可以先试试按标题层级切,或者把chunk提到800-1000,overlap保留150左右。Embedding模型影响也大,中文技术文档建议换bge-m3或者text-embedding-3-large试试。reranker加一个肯定有用,bge-reranker跑top20重排,召回质量能稳不少。
3楼
2026-09-21
你这情况挺典型的,chunk_size 500对中文技术文档来说确实偏碎,容易把“连接超时”和“安装步骤”这种词面相似的片段都捞出来。可以试试先把chunk调到800-1000,overlap保持15%左右,让每个块带完整上下文。Embedding换成bge-m3或者text-embedding-3-large这类对中文更友好的,召回质量会明显不一样。reranker强烈建议加,bge-reranker-v2跑top20重排到top5,能压掉不少噪声,比单纯调相似度阈值管用多了。
4楼
4天前
刚入门,这个对我帮助很大。
5楼
1天前
有没有更详细的教程推荐?