跳到主要内容

17 篇博文 含有标签「vector-search」

查看所有标签

向量检索中的流行度偏见:为什么相同的五个文本块总是主导每个查询

· 阅读需 13 分钟
Tian Pan
Software Engineer

从任何成熟的 RAG 系统中提取一周的检索日志,并按分块(chunks)被返回的频率进行排序。其分布形态几乎总是相同的:一小部分分块出现在数千次查询中,而语料库中的绝大多数内容仅出现几次,甚至从未出现过。系统没有故障。它正在精准地执行索引构建时的预期功能 —— 而这恰恰是问题所在。

这就是向量检索中的流行度偏差(popularity bias),而且随着语料库的增长,这种情况会变得更加严重。少数分块变成了“引力井”,在互不相关的查询中频频胜出,而长尾内容则悄然消失在 top-k 截断值之下。你的 RAG 系统开始让人感觉“平庸” —— 用户提出具体问题,得到的回答听起来却像是为别人写的一样。等到产品部门开始投诉时,这种分布不均的情况往往已经持续数周了。

当向量搜索失效:为什么知识图谱能处理 Embedding 无法解决的查询

· 阅读需 11 分钟
Tian Pan
Software Engineer

向量搜索已成为 RAG 系统的默认检索原语。嵌入你的文档,嵌入查询,查找最近邻 —— 这一过程简单、快速,且对于大多数问题效果惊人。但在生产环境部署中,开发者往往会遇到同样的瓶颈:某些查询尽管相似度得分很高,返回的却是垃圾结果;某些多文档推理任务会无声无息地失败;随着复杂度的增加,某些实体密集型查询会退化为随机噪声。

问题不在于嵌入质量或索引大小,而在于语义相似性对于一大部分检索问题来说是错误的抽象方式。知识图谱并不是向量搜索的替代品 —— 它们解决的是结构完全不同的问题。理解哪些问题属于哪种工具,是区分脆弱的 RAG 流水线与能在生产环境中稳健运行的系统的关键。

RAG 语料库架构:决定检索质量的索引决策

· 阅读需 13 分钟
Tian Pan
Software Engineer

当 RAG 系统返回错误答案时,事后分析几乎总是聚焦于同一批嫌疑人:检索查询、相似度阈值、重排序器、提示词。团队会花好几天调整这些组件,而真正的原因却静静地躺在索引流水线里无人触碰。失败早在几周前就已发生——那时有人拍板决定了分块大小。

大多数 RAG 质量问题是架构性的,而非运营性的。它们源于索引时做出的决策,这些决策会悄然塑造 LLM 最终能看到的内容。等到用户投诉时,检索系统正在做它被设计好的事——只是那个设计本身就是错的。

实战交叉编码器重排序:余弦相似度遗漏了什么

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的RAG管道检索了前10个文档,但LLM的答案依然有误。你将检索数量增加到50,结果还是错的。令人沮丧的是:正确的文档一直都在向量数据库里——只是排在第23位。这不是召回率的问题,而是排序的问题,而余弦相似度正是罪魁祸首。

向量搜索在找到语义相邻内容方面做得不错,但"语义相邻"和"对这个具体查询最有用"并不是一回事。余弦相似度衡量的是嵌入空间中两个向量之间的夹角,而这个夹角只能捕捉粗粒度的主题接近度。它无法捕捉查询中特定词语与文档中特定词语之间的细粒度交互——"如何防止缓冲区溢出"与"缓冲区溢出利用技术"在向量层面差异微妙,但对于你的检索系统来说却至关重要。

嵌入刷新问题:像数据库工程师一样运营向量存储

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的RAG流水线正在返回自信、格式良好的答案。大模型的响应看起来很好。然而用户却不断提交工单,说系统给出了错误信息。产品经理调出相关文档——信息六周前就已经更改,但向量索引仍然反映旧版本。没有任何错误抛出,没有任何告警触发。系统只是悄无声息、毫无察觉地给出了错误答案。

这就是嵌入刷新问题,它最终会咬到大多数生产RAG系统。对生产部署的分析显示,超过60%的RAG故障可追溯到知识库中陈旧或过时的信息——不是错误的提示词,不是检索算法失败,而是向量索引中的内容与源数据真实状态之间的简单错位。大多数AI工程师都是吃了亏才发现这个问题的,而大多数数据工程师早就知道如何预防它。

GraphRAG vs. 向量 RAG:团队往往过晚才做的架构决策

· 阅读需 14 分钟
Tian Pan
Software Engineer

大多数团队发现自己需要 GraphRAG 时往往已经晚了六个月——在他们已经向用户解释了为什么 AI 搞错了关系、为什么它混淆了两个具有相似嵌入(embeddings)的实体,或者为什么它言之凿凿地引用了一份与实际答案相矛盾的文档之后。Vector RAG 在其擅长的领域确实表现出色。问题在于,团队把它当成了全能选手,并在底层架构已经达到数学上限时,仍不断堆砌检索补丁。

截至 2025 年,只有不到 15% 的企业在生产环境中部署了基于图的检索。这并不是因为技术不成熟。而是因为纯向量 RAG 的失败信号非常微妙:系统在运行,LLM 在响应,只有经过仔细检查才会发现,检索到的上下文虽然看似合理,但却是错误的。

检索单一化:为什么你的 RAG 系统存在系统性盲点

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 RAG 系统评估看起来还不错。NDCG 尚可接受,演示也能运行。但有一类故障是单一指标评估无法捕捉的:那些你的检索器从未接近过的查询——持续如此,因为你的整个嵌入空间从一开始就没有能力处理它们。

这就是检索单一化。一个嵌入模型、一种相似度度量、一条检索路径——因此也是一套系统性盲点,这些盲点看起来像模型错误、幻觉或用户困惑,直到你真正检查检索层才会发现真相。

解决方法不是更大的模型或更多数据,而是理解不同的查询结构需要不同的检索机制,并构建一个能够停止将一切都路由到同一漏斗中的系统。

检索债务:为何你的 RAG 流水线会悄然退化

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 RAG 流水线上线六个月后,某些东西悄然改变了。用户没有大声投诉,但对答案的信任度正在下降。反馈评分从 4.2 跌至 3.7,一些支持工单提到了"过时信息"。你的工程师检查日志,没有错误、没有超时、没有明显的回归。检索流水线在你配置的每一个指标上看起来都很健康。

但事实并非如此。它正在腐烂。

检索债务是向量索引中积累的技术性衰退:不再代表当前文档内容的过期嵌入、污染搜索结果的已删除记录产生的墓碑块,以及索引语料库时使用的编码器版本与当前计算查询嵌入的编码器版本之间的语义漂移。与代码腐烂不同,检索债务不会产生堆栈跟踪,它产生的是带有自信引用的微妙错误答案。

嵌入漂移问题:语义搜索的静默退化

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的语义搜索很可能正在悄然恶化,而你的监控面板对此毫无显示。

没有错误日志,没有 p99 毛刺,没有健康检查失败。查询依然返回结果,余弦相似度评分依然看起来正常。但相关性正在一点一点地悄然下滑——每一个被遗漏的新词,都在拉大用户语言与嵌入模型训练语言之间的距离。

这就是嵌入漂移问题。它之所以难以察觉,正是因为它不产生任何可见的失败信号——只有检索质量的缓慢侵蚀。用户会说产品"越来越没用了",然后悄悄离开。

数据库原生 AI:当你的 Postgres 学会了嵌入

· 阅读需 8 分钟
Tian Pan
Software Engineer

大多数 RAG 架构长得都一样:你的应用从 Postgres 读取数据,将文本发送到嵌入 API,将向量写入 Pinecone 或 Weaviate,并在读取时查询两个系统。你维护着两个数据存储、两套一致性模型、两套备份策略,以及一条同步管道——这条管道总是离让你的向量索引落后源数据数周只差一个边缘情况。

如果数据库自己就能搞定一切呢?这已经不再是假设。PostgreSQL 扩展如 pgvector、pgai 和 pgvectorscale——以及 AlloyDB AI 等托管服务——正在将整个嵌入与检索堆栈折叠进数据库本身。结果不仅仅是减少了活动部件,而是一种根本不同的运维模型:你的向量始终与其所代表的数据保持事务一致。

GraphRAG 落地实践:向量检索在多跳推理上的局限与突破

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的 RAG 流水线返回了措辞自信、格式规整的答案。Embedding 已经过调优,分块大小也经过优化,检索评分看起来很漂亮。然后,用户突然问道:"哪些受港口罢工影响的供应商,今季合同也即将到期?"系统却返回了关于港口物流和合同管理的零散片段——各自独立,从未将它们关联起来。这就是多跳推理的鸿沟,也是向量检索悄然失效之处。

这不是调参问题,而是架构层面的缺陷。向量相似度能找到看起来像查询的文档,却无法穿越散落在不同文档中的实体关系。GraphRAG——以知识图谱为后盾的检索增强生成——通过将实体关系提升为一等检索对象来解决这个问题。但将其真正推向生产环境,远比演示视频展示的更加复杂。

为什么分块问题尚未解决:原生 RAG 流水线如何在长文档上产生幻觉

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数 RAG 教程都将分块(chunking)视为一个注脚:将你的文档切分为 512 个 token 的块,对它们进行嵌入(embed),存储在向量数据库中,然后继续研究有趣的部分。这在演示示例(如维基百科文章、干净的 markdown 文档、短 PDF)中表现良好。但在生产环境中,它会分崩离析。

最近一项将 RAG 应用于临床决策支持的研究发现,在 30 个临床问题中,固定大小的基准方案仅实现了 13% 的完全准确率。在同一语料库上采用自适应分块方法:完全准确率为 50% (p=0.001)。文档是相同的。LLM 是相同的。只有分块方式改变了。这种差距不是微调问题,也不是提示词工程问题。它是大多数团队在切分文档方式上的结构性失败。