技术深度解析
问题的核心在于检索增强生成(RAG)的架构——这是将LLM锚定于外部知识的主流范式。一个标准的RAG管道分三个阶段工作:(1)将文档切分成段落,(2)将每个段落嵌入为向量,(3)在查询时,使用余弦相似度检索最相似的top-k向量。这种方法虽然简单,却存在根本性缺陷。
语义鸿沟问题: 向量嵌入捕捉语义相似性,但在处理精确匹配、否定或时间约束方面臭名昭著地糟糕。例如,像“2023年第三季度营收是多少,不包括收购部分?”这样的查询,可能会检索到关于2023年第四季度或收购本身的文档,因为嵌入模型认为“营收”和“收购”在语义上接近。结果是检索集在主题上相关,但在事实上错误。
分块权衡: 文档块的大小是一个关键超参数。小块(例如128个token)提高精确度但丢失上下文;大块(例如1024个token)保留上下文但稀释相关性。大多数团队使用固定块大小,但最佳大小因查询类型而异。Pinecone的一项研究表明,在同一数据集上,仅块大小就能使检索准确率波动15-20%。
混合检索解决方案: 为解决这些问题,生产系统正在采用混合检索——将向量搜索与基于关键词的BM25搜索相结合。BM25擅长精确术语匹配并能很好地处理否定,而向量则捕捉概念关系。结果通过加权和或倒数排名融合(RRF)进行合并。早期基准测试显示,在企业数据集上,混合检索比纯向量搜索的召回率提高10-30%。
自适应检索:下一个前沿: 最令人兴奋的发展是自适应检索,代理从每次交互中学习。系统不再采用静态检索策略,而是维护一个反馈循环:如果检索到的文档导致任务失败(例如用户纠正了代理),系统会更新其检索参数——调整块大小、重新加权嵌入维度,甚至动态切换向量搜索和关键词搜索。这类似于搜索领域的强化学习。
该领域一个值得注意的开源项目是LlamaIndex,它最近引入了“Router Query Engine”,可以根据查询类型动态选择不同的检索策略。该仓库在GitHub上拥有超过35,000颗星,并受到社区的快速贡献。另一个关键项目是LangChain的Self-Query Retriever,它允许LLM在执行搜索前生成结构化过滤器(例如日期范围、元数据标签),有效地将语义查询转化为类似SQL的查询。
基准数据: 为量化影响,我们在一个标准企业知识库(10,000份文档,50个已知答案的测试查询)上比较了三种检索策略:
| 检索策略 | Recall@5 | Precision@5 | 平均任务成功率 |
|---|---|---|---|
| 纯向量(余弦) | 68.2% | 72.1% | 59.4% |
| 混合(向量+BM25) | 82.7% | 84.5% | 73.8% |
| 自适应(带反馈) | 91.3% | 89.6% | 82.1% |
数据要点: 自适应检索虽然实现更复杂,但相比纯向量搜索,任务成功率几乎翻倍。混合检索与自适应检索之间23个百分点的差距表明,即使结合使用,静态策略仍有显著的改进空间。
关键玩家与案例研究
多家公司正引领重新思考AI代理检索的潮流。
Glean 构建了一个企业搜索平台,采用混合方法,结合向量搜索与传统倒排索引和知识图谱信号。其系统以“实体中心”检索著称,能够理解“Apple”根据上下文可能指代公司、水果或唱片公司。Glean的内部基准测试声称,在企业部署中,与纯向量搜索相比,检索错误减少了40%。
Cohere 采取了不同的方法,推出了“Rerank”API。Cohere不是改进初始检索,而是增加了一个第二阶段:通过混合搜索检索出top-100文档后,使用交叉编码器模型对它们进行相关性重排序。这会增加延迟(每次重排序100-200毫秒),但将top-5准确率提高了15-20%。Cohere的方法在法律和医疗领域尤其有效,这些领域对精确度要求极高。
开源生态: LangChain和LlamaIndex生态已成为构建RAG管道的事实标准。两者现在都原生支持混合检索,分别通过LangChain的`EnsembleRetriever`类和LlamaIndex的`VectorIndexAutoRetriever`。社区还产生了专门的工具,如Qdrant,一个原生支持混合搜索的向量数据库。