DataStax 的目标之一是让每个开发人员(无论他们使用何种语言构建)能够尽快将 AI 应用程序交付到生产环境。
我们
Cassandra 被誉为最强大、可扩展且可用于生产的数据库。通过添加矢量搜索,Cassandra 和 Astra DB 已成为构建企业级 Gen AI 应用程序的关键基础。但我们还需要确保这种强大的技术对于最广泛的开发人员来说是可以访问和易于使用的,无论他们喜欢什么语言或技能。
今天,我们朝这个方向迈出了一大步,通过一个简单的 API,让大量 JavaScript 开发人员能够访问世界上最强大的矢量数据库:引入 Astra DB 的 JSON API。
在 JavaScript 世界中,文档数据库很突出。这并不奇怪,因为JSON是 JavaScript 中的原生表示法,因此在数据库中存储和检索 JSON 文档的能力极大地加快了开发速度。
新的 JSON API 旨在为创建新 AI 应用程序的 JavaScript 开发人员提供流畅的开发体验。我们致力于确保如果您是 JavaScript 开发人员,您可以启动 Astra DB 实例并立即使用您熟悉的范例和框架开始编码。
将 Astra DB 公开为文档数据库可为开发人员体验带来多项改进:
您会根据 JSON 对象进行思考,这使您能够与 JavaScript 生态系统自然保持一致。
没有数据建模步骤,因为它是由数据库本身处理的。您只需保存和检索文档。
您可以快速开始开发,并专注于应用程序逻辑而不是后端发生的事情。
我们还注意到,JavaScript 社区的许多成员通过对象数据建模 (ODM) 库(特别是MongooseJS)使用文档数据库。 MongooseJS 是一种流行的文档数据库对象建模框架。和
Astra DB 的新 JSON API 与 MongooseJS 完全兼容。这意味着只需几行代码即可将 MongooseJS 指向 Astra 数据库实例:
// Import MongooseJS. const mongoose = require("mongoose"); // Import the driver for Astra DB (shipped as a part of stargate.io). const { driver } = require("stargate-mongoose"); // Tell MongooseJS to use the Astra DB driver instead of the default one. mongoose.setDriver(driver); // Connect to Astra DB. await mongoose.connect(astraDbUri, { isAstra: true, });
连接后,您可以使用 MongooseJS API,Astra DB 将负责以有效的方式存储文档、为其建立索引以及在需要时进行扩展的繁重工作。
更好的是,当使用 Astra DB 支持的 MongooseJS 进行开发时,您可以完全访问 Astra DB Vector,这是唯一一个专为同时搜索和更新分布式数据和流工作负载而设计的数据库,具有超低延迟,以及高度相关的矢量结果,消除冗余。因此,您可以获得 MongooseJS 的易用性和熟悉性,以及 Astra DB 丰富的矢量支持和可扩展性。使用 JavaScript 开发 AI 应用程序从未如此简单!
让我们看一个简单的示例,了解如何在 MongooseJS 应用程序中使用 Astra DB 的矢量搜索。在此示例中,我们将创建一个电影集合,其中包含文本描述和一些其他信息,例如标题、制作年份和类型。此外,我们将指示 MongooseJS 我们要存储描述的向量嵌入。模型定义如下:
const Movie = mongoose.model( "Movie", new mongoose.Schema( { title: String, year: Number, genre: String, description: String, $vector: { type: [Number], validate: (vector) => vector && vector.length === 1536, }, }, { collectionOptions: { vector: { size: 1536, function: "cosine", }, }, }, ), );
熟悉 MongooseJS 的人会发现这是一个典型的 MongooseJS 模型,除了 Astra DB 驱动程序允许的两个附加部分:
$vector field
。collectionOptions.vector
对象告诉 Astra DB 如何索引向量嵌入字段。使用上面的模型,您可以插入文档和嵌入:
await Movie.insert({ title: "In the Border States", year: 1910, genre: "Drama", description: "In the Border States is a 1910 American drama film...",// Generate embedding for the description, // for example by invoking the OpenAI API. $vector: embedding("In the Border States is a 1910 American drama film..."), });
您的应用程序现在可以提供输入自由格式查询以按电影描述搜索电影的功能。为此,您将使用相同的模型为用户的查询生成嵌入,并使用 Astra DB 的矢量搜索来查找数据库中最相关的条目:
await Movie.find({}) .sort({ $vector: { $meta: embedding("Something funny") } }) .limit(3);
当然,在许多情况下,矢量搜索本身是不够的,因为您可能希望将其与基于文档中其他字段的过滤结合起来。例如,以下是如何找到与上一个示例类似的相关电影,但仅查看电视剧:
await Movie.find({ genre: "Drama" }) .sort({ $vector: { $meta: embedding("Criminals and detectives") } }) .limit(3);
使用 MongooseJS 和 Astra DB,您不再局限于简单的 CRUD 操作。您可以使用向量来配合它们进行相关性搜索,甚至可以将两者组合成强大的混合搜索查询。
新的 JSON API 目前处于公共预览版,任何想要尝试的人都可以在 Astra DB 上使用。请按照以下三个简单步骤开始:
转到Astra DB并创建矢量数据库。
数据库处于活动状态后,切换到“连接”选项卡,选择“JSON API”作为您的首选方法,然后按照说明进行操作。
享受开发的乐趣!
有关如何使用 JSON API 的更多详细信息,请参阅文档。
通过引入 JSON API,我们的愿景很明确:我们希望 Astra DB 成为 JavaScript 开发人员构建 AI 应用程序的首选。这只是一个开始——请继续关注进一步的改进和补充。
有问题、反馈,或者您和我们一样兴奋?请通过[email protected]给我们留言。
也发布在这里。