向量数据库 Viking DB 支持通过 Nodejs SDK 操作数据库。在使用 Nodejs SDK 之前,需要先完成安装 SDK 和 初始化 SDK 步骤。
说明
推荐使用 pnpm 管理依赖,请使用 Node version >= 12。
说明
为了获得准确的类型推导,强烈建议您使用 TypeScript 进行开发,SDK 会提供完整的类型定义和自动补全。以下 demo 均使用 TypeScript 进行书写。
$ # 请安装大于等于 1.19.0 版本的 sdk $ pnpm add @volcengine/openapi
地区(region)根据实际情况配置,华北:cn-beijing,华东:cn-shanghai。
说明
代码中 Your ak 及 Your sk 需要分别替换为您的 AK 及 SK,Your region替换为您使用的域名和地区。
import { vikingdb } from '@volcengine/openapi' const vikingdbService = new vikingdb.VikingdbService({ ak: 'Your ak', sk: 'Your sk', region: 'Your region', })
如果是进行角色扮演请求,需要先通过 AssumeRole
获取临时的 aksk 和 sessionToken。 AssumeRole
具体看文档 https://www.volcengine.com/docs/6257/86374。
import { sts, vikingdb } from '@volcengine/openapi' const stsService = new sts.StsService({ RoleTrn: 'trn:iam::{accountId}:role/{roleName}', RoleSessionName: 'TempSessionName', }) const { Result } = await stsService.AssumeRole() if (!Result.Credentials) { return } const vikingdbService = new vikingdb.VikingdbService({ ak: Result.Credentials.AccessKeyId, sk: Result.Credentials.SecretAccessKey, sessionToken: Result.Credentials.SessionToken })
SDK 提供完整的类型定义,向量数据库所有元素均收敛在 vikingdb
命名空间下。其中部分公共类型直接放置在 vikingdb
命名空间下,如:vikingdb.FieldType
,其余对应模块的类型均放置在对应模块的命名空间下,如: vikingdb.collection.CreateCollectionRequest
、vikingdb.index.IndexType
、vikingdb.search.SearchResponse
。
所有 SDK 返回值均为继承与 VikingdbResponse
的实例,调用方可以通过字段 OriginalRequest
和 Logid
获取原始请求 body 以及请求日志 ID。
当 SDK 调用发生异常时,如果是 SDK 内部错误(即还未发出请求)时,SDK 会对外抛出错误 VikingdbError
,错误实例上会有字段 Code
和 Message
表示错误的标识符和信息;如果是 API 抛出的错误,SDK 会对外抛出错误 VikingdbRequestError
,它继承与 VikingdbError
,错误实例上会同时有 OriginalRequst
和 Logid
。
import { vikingdb } from '@volcengine/openapi' declare const service: vikingdb.VikingdbService // 替换为你初始化好的实例 try { const response = await service.collection.CreateCollection({ CollectionName: 'test_collection_1', Description: 'collection_description', // optional CollectionAliases: ['collection_alias_1', 'collection_alias_2'], // optional Fields: [ { FieldName: 'Id', FieldType: vikingdb.FieldType.Int64, IsPrimary: true }, // 主键字段 { FieldName: 'Name', FieldType: vikingdb.FieldType.String, DefaultValue: 'Hello world'/* optional */ }, // 标量字段 { FieldName: 'DenseVector', FieldType: vikingdb.FieldType.DenseVector, Dim: 4 }, // 稠密向量字段 { FieldName: 'SparseVector', FieldType: vikingdb.FieldType.SparseVector }, // 稀疏向量字段 { FieldName: 'Text', FieldType: vikingdb.FieldType.Text, PipelineName: 'text_bge_m3', /* optional */ }, // 文本字段 ] }) console.log(response.OriginalRequest) // 请求 API body console.log(response.Logid) // 请求日志 id } catch(e) { if (e instanceof vikingdb.VikingdbRequestError) { // 请求异常 console.log(e.Code) // 后端错误码 console.log(e.Message) // 后端错误信息 console.log(e.OriginalRequest) // 请求 API body console.log(e.Logid) // 请求日志 id } else if (e instanceof vikingdb.VikingdbError) { console.log(e.Code) // SDK 错误码 console.log(e.Message) // SDK 错误信息 } }
受限于 JavaScript 语言的精度限制,SDK 在处理数据时可能会导致 int64
类型和 float32
类型数据的精度存在不准确的情况。