玄镜将特征查询扩展与检索过滤结合
一份技术报告介绍玄镜如何通过结合特征查询扩展、模块级元数据过滤和相似度阈值,改进小型垂直命理语料的 RAG 检索。系统会在 Chroma 语义检索前把抽取出的特征附加到用户查询中,并重复核心特征以加强提示。报告还修正了一个排序错误:后续整体去重会消除预期的特征重复。修订后的示例仅作为潜在 PR 参考,尚未直接应用到仓库。报告中的对比表属于示意结果;离线比较显示,原始查询与特征查询结合比仅使用特征查询更稳定,而小流量线上 A/B 测试仍待补充。
该报告为小型垂直语料提供了一套可落地的检索模式:由特征查询、结构化元数据过滤和相似度阈值共同作用,而非只依赖裸向量检索。
很多人上手 RAG 就是 collection.add + collection.query,然后发现「检索出来的东西跟我问的对不上」。玄镜在垂直命理领域踩过这个坑——最后没用裸向量检索,而是在检索前加了一层「特征加权」。
更准确地说,这是查询层面的特征注入 / 查询增强,不是检索分数的加权融合。下文会把边界讲清。 代码基于
oraclemind-ai/src/services/retrieval.py的真实实现整理。仓库当前函数名仍为_extract_features,且旧版存在dict.fromkeys整体去重问题;下方为修正后的示意实现,本文按行为重命名为_build_feature_query便于表意,未直接改动仓库源码。修正点可作为仓库 PR 的参考。
一、裸向量在垂直长尾领域为什么翻车
命理语料极小(单模块 14~20 条),而且术语高度正交:问「日主甲木喜水」和「日主庚金喜火」,在 embeddings 空间里可能都离某条「五行生克」通用条目很近,但真正该命中的是各自对应的专用条目。纯余弦相似度会把通用条目顶上来,专用条目反而沉底。