这里的"传统"一般指两类:词袋/TF-IDF、以及经典句向量模型(如 word2vec / doc2vec / 早期 sentence embedding)。和你现在的 embedding 模型相比,主要差异是:
1) 表达能力(语义 vs 关键词)
- embedding 模型(你现在):更擅长理解"意思相近但字不一样"的问题
例:用户问"解析域名趋势",就算元数据写的是"解析域名趋势/双折线",也能命中。 - TF-IDF/关键词:更依赖字面重合,容易漏掉同义表达,但优点是可解释、稳定、便宜。
2) 对中文/领域词的适应性
- 现代 embedding(如你这个 qwen3-embed):对中文语义、句法、同义词通常更强;对"自然语言问法"更友好。
- 传统方法:需要你做大量分词、同义词表、规则才能接近语义效果。
3) 成本与延迟
- embedding API:每次要调接口(有网络/服务开销),需要超时与降级(我已在代码里做了回退)。
- 传统算法:本地就算,几乎零外部依赖,延迟极低。
4) 结果稳定性
- embedding 模型:通常跨表述更稳,但阈值要调;模型升级可能改变向量空间(需要回归)。
- TF-IDF:非常稳定、可控,但语义泛化差。
结合你现在的代码,一句建议
- 短期:保持
_ChartVectorIndex这种"内存 + 向量API + 回退字符串"的结构,很适合你当前规模与"不持久化"的需求。 - 中期(多实例/重启不想重算/图表很多):再迁到 PostgreSQL + pgvector,接口不变,只替换
search()的实现即可。