它在解决什么
stu_rag 不急着做产品,而是把检索拆成可以单独跑通的步骤。面对一份文档,真正不确定的通常不是“要不要上 Agent”,而是:加载对不对、切分会不会切断语义、关键词和向量怎么合、排完之后有没有把噪声抬上来。
拆开练过的部分
- 加载:文本、JSON、PDF、Markdown,以及图片加载器。
- 切分:按标点和段落切,也试过基于模型的语义切分。
- 向量库:Chroma 本地持久化、集合创建、写入和查询,还有客户端 / 服务器两种启动方式。
- 关键词:中文分词之后的 BM25。
- 融合与重排:RRF 混合排序,FlagEmbedding 做向量化和 rerank。
- 问答链:用 LangChain 把检索接到生成,写成一个综合案例。
数据集是练习用的本地文件,不是医疗语料。目的是把接口摸熟,而不是灌一个领域库。
一个还成立的直觉
向量相似度只说明方向接近,不说明内容正确。所以后来写 把知识库想象成一张地图 时,也还是同一句话:找到位置,只是理解的第一步。保留出处、让矛盾可见、证据不够时允许停在“不知道”。
和后面怎么接
MediAtlas 里的多路召回(BM25 + 稠密向量 + 图谱,再 RRF 和重排)就是从这里接上去的。差别在于:练习库可以随便召回;医疗回答必须再加来源门槛,并且允许检索失败后停止,而不是换一种说法继续编。