• 文章
  • 使用 Qdrant 构建高性能、可扩展的代理向量搜索
返回 RAG 和 GenAI

使用 Qdrant 构建高性能、可扩展的代理向量搜索

Thierry Damiba

·

2025年10月26日

Building Performant, Scaled Agentic Vector Search with Qdrant

概述

AI 智能体已从简单的问答式聊天机器人发展成为能够独立规划、检索、执行和验证任务的系统。开发者在尝试使用智能体再现真实工作流程时,一个常见的起点是让智能体能够访问搜索 API。

Agentic vector search architecture

智能体的局限性

尽管智能体已被证明能够产生令人难以置信的影响,但如果没有合适的工具,它们仍然面临严重的局限性。在这种情况下,简单的搜索框不足以满足需求,智能体在从原型到生产的过程中常常在三个关键领域失败:

  • 记忆缺失:智能体难以保留上下文。如果没有工作记忆,它们可能会重复自己或迷失在多步骤工作流程中。如果没有短期和长期记忆,它们就无法从过去的交互中学习、适应用户偏好或随时间改进。

  • 知识碎片化:智能体生活在一个数据孤岛的世界中:文档、API、图像、对话等等。大多数智能体一次只能访问其中一部分,通常是文本。这意味着当它们被要求跨格式整合,或者当正确答案需要结合结构化数据、非结构化文本和多模态数据时,它们就会失败。

  • 规模化时脆弱:在演示中有效的东西,在生产中就会崩溃。依赖脆弱检索管道的智能体在每个工作流程数千次调用的重压下会变慢。延迟加剧,精度下降,体验下降,而此时可靠性至关重要。

为什么向量搜索有帮助

想象一个用户要求 AI 智能体规划一次六月最后一周去柏林的周末旅行。用户有具体需求:酒店必须有游泳池,允许携带宠物,且每天费用不超过 200 美元。

一个拥有基本搜索工具的旅行智能体可能会搜索“柏林的酒店”。搜索结果返回柏林的 10 家酒店。接下来呢?

您的智能体无法通过提问“哪些酒店有游泳池,每天费用低于 200 美元?只显示过去 30 天内有评论且可预订的结果”来完善搜索。AI 智能体被迫摄取整个文本块并尝试从中解析相关细节。这个过程很慢,消耗大量 token,并且容易出现频繁的错误和幻觉。

可靠的智能体工作流程需要清晰的计划和精确的工具执行。像 Qdrant 这样的向量搜索引擎通过各种工具帮助解决关键词搜索的缺陷:

在本文中,我们将使用 TripAdvisor 的 TripBuilder 来阐述上述四个概念中的每一个如何对于大规模构建和部署智能体搜索至关重要。

TripBuilder Overview

记忆在 AI 智能体中的战略作用

为了让您的智能体为最终用户提供最佳结果,它需要记住一些事情。它必须回忆上下文以确保个体对话的连续性,根据用户历史和偏好个性化结果,并在规模化时高效运行。

向量搜索引擎通过含义以及通过混合搜索的关键词提供存储和检索,同时还允许您应用元数据过滤器来缩小结果范围。这种组合可以为像酒店这样的复杂查询返回相关结果。向量搜索擅长理解查询的主观含义,例如“有趣的”酒店,而过滤器则强制执行事实性要求,例如“允许携带宠物”且每天费用低于 200 美元。

当您的智能体必须为柏林之旅设计行程时,TripBuilder 可以检查记忆以查看是否已规划过任何类似的行程。这种相似性可以考虑日期、用户偏好和评论。

为什么速度在智能体检索中很重要

智能体可能需要运行数千次搜索才能回答一个复杂的单一问题。有时这些搜索是并行运行的,但有时它们是按顺序运行的。对于这些顺序搜索,每节省一毫秒都会累积起来。这时,Qdrant 基于 RustHNSW 索引,可以在大规模下实现毫秒级检索,从而成为一个差异化因素。

让我们想象一下,您在使用 Qdrant 时获得了 75 毫秒的检索性能提升。就其本身而言,这可能不会在搜索体验中产生显著差异。但是,如果一个智能体执行四个顺序搜索,那么 300 毫秒的延迟就会开始对用户体验产生影响。有了这种延迟,用户很快就会感到无聊或分心,导致沮丧。对于智能体 AI 而言,检索速度优化是复合的。

TripBuilder 从基于 LLM(将整个文本交给 LLM 并允许其做出推荐)转向使用相似性和过滤器进行基于向量的推荐,将延迟降低了 85%,同时将感知到的结果质量提高了 30%。

灵活多模态检索

为您的智能体提供上下文以向用户提供正确的结果不仅仅是关于文本。您需要能够搜索和记住图像、视频、音频。这使您可以通过在同一搜索中组合任何模态来精确搜索您正在寻找的内容,然后通过加权融合进一步提高准确性。

您还需要能够重新排序候选者,以实现多样性、用户偏好甚至自定义指标。

考虑不重新排序的搜索。这就像向图书管理员索要有关“气候变化”的资料,然后收到一叠十几本书。它们都与主题相关,但堆叠是无序的:一本小说在顶部,一篇论文在中间,一项科学研究在底部。您需要的信息在那里,但您必须深入挖掘。

重新排序将图书管理员变成了专家策展人。他们理解您可能首先寻找最有影响力的科学著作。他们将同一套书交给您,但现在它们是智能排序的,突破性研究就在最上面。这是简单的数据转储和引导式发现之间的区别,确保最有价值的结果始终是您首先看到的。

Reranker Diagram

对于像 TripBuilder 这样的智能体,这可能意味着根据超出床位大小等简单过滤器的主观质量来确定结果的优先级。例如,如果用户想要一家提供“卓越早餐”的酒店(通常来自用户评论的质量),智能体可以首先检索与他们柏林之行相关的酒店。然后,它可以重新排序结果,以提升那些早餐评论最佳的酒店,确保用户首先看到最相关的酒店。

带过滤功能的上下文工程

结合语义搜索、元数据和关键词过滤器,您可以在基于相似性搜索的同时指定价格、日期或位置等功能。如果您的用户正在寻找一家“有趣的米其林星级餐厅来结束旅行”,您可以指定您的智能体搜索周日营业的地点,并且它可以根据用户的过往偏好进行过滤,从而为他们提供完美的结果。

智能体的实时记忆层

用户期望智能体记住对话的细节。您的智能体记忆必须在每次收到新信息时更新,而不仅仅是在每次会话开始时。Qdrant 支持实时 upsert,让您的智能体能够访问最新数据以用于短期记忆和长期记忆。

并非所有信息都是永恒的。对于智能体而言,了解什么是最新信息与了解什么是相关信息同样重要。这就是衰减函数发挥作用的地方,它在搜索过程中充当“新鲜度提升”的作用。

例如,在新闻源中,读者期望最新的头条新闻排在顶部。在搜索时,您的智能体可以对具有较新时间戳的项目应用评分奖励,将其在结果中推得更高。

这是一种重新排序工具,而不是“遗忘”旧内容的记忆系统,因此原始数据永远不会被更改。相反,您的智能体获得了一项重要功能:能够有效地决定何时“最新”意味着“最佳”用户查询。

Decay Functions

与智能体记忆和评估集成

智能体记忆

智能体的能力取决于它所能使用的工具。为了使记忆和检索层有效工作,它们必须可靠且轻松地与更广泛的智能体生态系统集成。Qdrant 对于最常用的智能体记忆和智能体构建框架来说是即插即用的。这种集成意味着开发者花更少的时间编写自定义代码来连接管道,而花更多的时间完善他们的工作流程。

mem0Cognee 这样的智能体记忆系统旨在为智能体提供开箱即用的长期和短期记忆能力。您可以轻松地将 Qdrant 作为向量搜索引擎嵌入到这些系统中。Qdrant 负责数据的索引、存储和检索,让记忆系统专注于编辑、摘要以及决定记住哪些信息和遗忘哪些信息。

CrewAIDustVoiceflowLyzrn8nCognigy 这样的智能体构建器允许您编排智能体流。有了这些工具,您可以定义多步骤、多智能体工作流程,并通过添加 Qdrant,它们获得了用您的数据为响应提供基础、回忆过去的交互以及搜索多模态知识的工具。Qdrant 提供您的工作流程在扩展时所需的速度和精度。

评估框架

一旦您构建了一个快速、准确、安全且可扩展的智能体,您如何知道它是否真正在工作?它如何处理边缘情况?当出现问题时会发生什么?您无法改进您不测量的事物,这就是评估发挥作用的地方。

检索质量

您的智能体完成复杂任务的能力仅取决于它能够检索到的上下文。持续密切监控智能体的性能至关重要,通过事实核查来发现和防止幻觉,通过 recall@k 来确保搜索的相关性,以及通过 MMR 参数来确保多样性。

性能-成本权衡

在生产环境中,效率是(如果不是最重要的)最重要的衡量指标。首先,在企业环境中,您必须满足严格的延迟预算。评估还允许您通过跟踪 token 使用量和端到端计算时间来跟踪每个任务的成本。最后,您可以通过监控记忆库的缓存命中率来跟踪记忆层的有效性。

Tradeoff Triangle

护栏与回退

就像人类一样,智能体并非完美无缺。一个生产级的智能体系统应该预期并预见失败,并设置护栏以优雅地处理它们。当置信度低于某个选定的阈值或查询涉及高风险或敏感主题时,您还可以引入人工参与。为了处理各种查询,您的智能体应该使用混合搜索。混合搜索结合了语义搜索理解含义的能力和关键词搜索精确匹配的能力,为您提供了两全其美的解决方案。

有效扩展您的搜索智能体

同样在拥有 10,000 个点的玩具数据集中快速运行的智能体,当您扩展到数百万乃至数十亿个点时,就会变得迟钝。Qdrant 在设计时就考虑到了扩展能力,以确保您的智能体即使在数据增长时也能保持快速、可靠和廉价。

我们将讨论您可以利用的三个概念来改善您的规模,但如果您想了解更多关于如何扩展的信息,请查看这篇关于大规模搜索文章

随着数据集和流量的增长,Qdrant Cloud 提供了一套功能来确保您的系统能够有效扩展。水平扩展通过分片实现,它将您的集合分散到多个节点上,以分配负载并提高性能。为了实现高可用性和容错性,Qdrant 支持复制,在集群中创建您的分片的副本。

Qdrant 提供强大的工具用于资源和成本优化。向量量化压缩您的数据,显著减少其内存占用并加快搜索速度。

Quantization

为了在数据集扩展时进一步管理成本,磁盘存储允许您将完整的向量保存在更经济的 SSD 上,而必要的索引数据保留在 RAM 中。这种混合方法使得在数十亿向量上进行搜索成为可能,而无需承担将所有数据保存在内存中的高成本。

为了增强搜索查询的相关性和准确性,Qdrant 原生支持混合搜索,该搜索将传统基于关键词的搜索与语义向量搜索相结合。通过这样做,您的应用程序可以找到匹配精确术语(如产品代码或名称)的文档,同时还能发现语义上相似的文档。这确保了您即使在海量复杂数据集中也能找到最相关的信息。

Hybrid Search

生产环境安全最佳实践

在开发环境中,对单个用户或少数几个用户有效的工作流程,当您添加更多用户时就会崩溃,因为每个人都有 root 访问权限。您的智能体需要知道它有权采取哪些行动以及它可以访问哪些信息。它还需要能够在您的数据和查询增长时快速运行搜索。

Qdrant 通过 API 密钥、多租户和基于角色的访问控制(RBAC)提供生产级别的授权和认证,以确保您的智能体不会失控。

智能体的认证通过API 密钥处理。在 Qdrant 中,API 密钥不仅仅是密码。它们充当智能凭证,还包含在智能体身份确认后强制执行的授权规则的详细信息。这些密钥可以作为每个用户会话的临时凭证动态创建,从而使访问仅限于会话且安全。

注意:Qdrant 还支持并发查询,因此当更多用户同时写入查询时,您的搜索不会变慢。

授权由RBAC多租户处理,它们协同工作以定义和强制执行特定于智能体的权限。RBAC 是一组规则,定义允许的权限,包括只读、读写和管理员控制。它回答了“此智能体被允许做什么?”的问题。例如,它只能搜索酒店(只读),还是也可以添加、更新和删除它们(读写)?

Multi-tenancy

一个只检索信息的 hotel_search_agent 将被限制为只读访问。相反,一个添加新用户评论或抓取新酒店数据的 hotel_update_agent 将需要读写访问。一个 memory_organization_agent 可能拥有创建和删除整个集合的管理员访问权限。

多租户与 RBAC 协同工作,以找出“此智能体可以查看哪些特定点?”这确保了用户之间没有数据泄露,从而使 user_a 无法访问 user_b 的搜索历史或偏好。

从性能和可扩展性的角度来看,实现安全性的最佳方法是为所有用户使用单个集合。集合中的点被设计为可扩展到数十亿个条目,而向一个集群添加数十亿个集合将导致检索缓慢。为了确保您的搜索不会变慢,请在租户 ID 字段上创建负载索引,以便 Qdrant 可以在运行搜索之前即时找到正确的用户。

通过结合这些安全层,您将获得一个健壮的系统,它首先确保智能体的身份(此智能体来自 TripBuilder),使用 RBAC 检查一般权限(此智能体可以搜索酒店),并使用多租户将搜索限制为数据的子集(此智能体只能搜索它有权访问的酒店)。

部署灵活性

您的 AI 智能体需要能够在用户运行查询的任何地方无问题地运行。Qdrant 提供几种不同的部署选项,可以通过几行代码进行切换,这样当您准备从原型进入生产时,就无需重建整个系统。

Qdrant 允许您以各种方式部署,以便您可以构建最适合您用例的系统。您可以通过云部署,或在 Docker 或您自己的机器上自行托管。请在下方阅读更多信息。

从基础设施到智能

在本文中,我们探讨了为什么向量搜索引擎是构建生产级 AI 智能体的关键组件。您的智能体需要支持毫秒级检索、实时记忆、灵活的多模态检索以及通过元数据过滤实现精确结果的架构。为了在真实世界的生产环境中蓬勃发展,您需要通过身份验证和授权、与智能体生态系统的轻松集成以及可靠的评估和可观察性来巩固您的智能体。

您可以通过观察 TripBuilder 来了解这个过程,它从 TripAdvisor 的旅行搜索工具演变为一个成熟的智能体,只需点击几下即可为用户规划个性化行程。这表明,通过正确的基础设施,问答机器人可以成为类似人类的助手,能够处理需要多个智能体和步骤的复杂任务。

对于希望将智能体从原型推向生产的开发者来说,Qdrant 是专用的向量搜索引擎,可以确保您的智能体为大联盟做好准备。Qdrant 提供 AI 所需的规模化记忆和检索能力,使其不再像一个派对把戏,而更像一个值得信赖的团队成员。

此页面有用吗?

感谢您的反馈!🙏

很抱歉听到这个消息。😔 您可以在 GitHub 上编辑此页面,或创建一个 GitHub 问题。