0

驱动 Bloop 语义代码搜索

Qdrant 团队

·

2023 年 2 月 28 日

Powering Bloop semantic code search

bloop 成立于 2021 年初,是最早处理代码库语义搜索的公司之一。一个快速、可靠的向量搜索数据库是语义搜索引擎的核心组件,bloop 对现有解决方案进行了考察,甚至考虑过自行构建。他们发现 Qdrant 是最佳竞争者,现在已在生产环境中使用它。

本文档旨在为那些打算将语义搜索引入新领域,并想了解 Qdrant 是否适合其用例的人提供指导。

关于 bloop

bloop 是一个快速的代码搜索工具,它将语义搜索、正则表达式搜索和精确代码导航整合到一个轻量级的桌面应用程序中,可以在本地运行。它帮助开发者理解和导航大型代码库,使他们能够发现内部库、重用代码并避免依赖膨胀。bloop 的聊天界面用简单的语言解释复杂概念,让工程师花费更少的时间翻阅代码以理解其功能,将更多时间用于交付功能和修复错误。

bloop 的使命是让软件工程师实现自主化,而语义代码搜索是这一愿景的基石。该项目由一群 Rust 和 Typescript 工程师以及机器学习研究人员维护。它利用了许多新兴的杰出技术,例如 TauritantivyQdrantAnthropic

关于 Qdrant

Qdrant 是一个用 Rust 编写的开源向量搜索数据库。它部署为 API 服务,提供对高维向量的近邻搜索。借助 Qdrant,可以将嵌入或神经网络编码器转化为成熟的应用,用于匹配、搜索、推荐以及更多充分利用非结构化数据的解决方案。它易于使用、部署和扩展,速度极快,同时又准确。

Qdrant 于 2021 年在柏林由 Andre Zayarni 和 Andrey Vasnetsov 创立,其使命是利用先进、高性能的向量相似性搜索技术驱动下一代 AI 应用。其旗舰产品是向量搜索数据库,可作为开源版本 https://github.com/qdrant/qdrant 或托管云解决方案 https://cloud.qdrant.io/ 提供。

问题所在

首先,什么是语义搜索?它通过比较含义来查找相关信息,而不是简单地衡量查询和文档之间的文本重叠。我们通过比较嵌入来比较含义——这些是由神经网络生成的文本的向量表示。每个文档的嵌入表示其在潜在空间中的位置,因此要进行搜索,您需要嵌入查询并在该空间中找到与其最近的文档向量。

为什么语义搜索对代码如此有用?作为工程师,我们经常不知道或忘记查找所需内容所需的精确术语。语义搜索使我们无需知道确切的术语即可找到东西。例如,如果工程师想了解“使用什么库进行支付处理?”,语义代码搜索引擎将能够检索包含“Stripe”或“PayPal”的结果。而传统的词法搜索引擎则不能。

这个问题的一个特殊之处在于,解决方案的有用性随着代码库大小的增加而增加——如果您只有一个代码文件,您可以快速搜索它,但在数千甚至数百万行代码中,您很容易迷失方向。一旦代码库达到一定规模,单个工程师就不可能阅读每一行代码,因此导航大型代码库变得极其繁琐。

在软件工程中,我们总是处理复杂性。已经开发出编程语言、框架和工具,使我们能够将代码模块化、抽象化并编译成库以供重用。然而,我们仍然会遇到限制:抽象仍然是“有漏洞的”,虽然在减少偶然复杂性方面取得了巨大进展,但在我们试图描述和解决问题时,仍然存在大量的内在复杂性1,并且随着软件吞噬世界,要解决的复杂性增长速度已经超过了我们控制它的能力。语义代码搜索帮助我们导航这些不可避免的复杂系统。

但是语义搜索不应该以牺牲速度为代价。即使搜索像 Rust(拥有超过 280 万行代码)这样大的代码库,搜索也应该感觉是即时发生的。Qdrant 为 bloop 提供了出色的语义搜索性能,同时使用了合理的资源量,因此他们能够处理并发搜索请求。

结果

bloop 对 Qdrant 如何融入其语义代码搜索引擎感到非常满意:即使对于大型代码库,它也表现出色且可靠。而且它使用 Rust 编写,并提供了易于集成的 qdrant-client crate。简而言之,Qdrant 帮助保持了 bloop 代码搜索的快速、准确和可靠。

脚注


  1. 偶然复杂性是指由我们的流程和工具的弱点引起的复杂性,而内在复杂性是指我们在试图描述和解决问题时面临的复杂性。 ↩︎

免费开始使用 Qdrant

开始使用