You need to enable JavaScript to run this app.
导航
安装与client初始化
最近更新时间:2024.06.14 11:47:20首次发布时间:2024.06.14 11:34:51

向量数据库 Viking DB 支持通过 Nodejs SDK 操作数据库。在使用 Nodejs SDK 之前,需要先完成安装 SDK 和 初始化 SDK 步骤。

前提条件
  1. 已通过 注册账号及开通服务 操作完成注册账号及开通服务。
  2. 获取安全凭证。Access Key(访问密钥)是访问火山引擎服务的安全凭证,包含Access Key ID(简称为AK)和Secret Access Key(简称为SK)两部分。可登录火山引擎控制台并前往【密钥管理】查看当前账号的 AK / SK,更多详情请参考 Access Key(密钥)管理

图片

安装 SDK

说明

推荐使用 pnpm 管理依赖,请使用 Node version >= 12。

说明

为了获得准确的类型推导,强烈建议您使用 TypeScript 进行开发,SDK 会提供完整的类型定义和自动补全。以下 demo 均使用 TypeScript 进行书写。

$ # 请安装大于等于 1.19.0 版本的 sdk
$ pnpm add @volcengine/openapi

初始化 SDK

地区(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.CreateCollectionRequestvikingdb.index.IndexTypevikingdb.search.SearchResponse

响应

所有 SDK 返回值均为继承与 VikingdbResponse 的实例,调用方可以通过字段 OriginalRequestLogid 获取原始请求 body 以及请求日志 ID。
当 SDK 调用发生异常时,如果是 SDK 内部错误(即还未发出请求)时,SDK 会对外抛出错误 VikingdbError,错误实例上会有字段 CodeMessage 表示错误的标识符和信息;如果是 API 抛出的错误,SDK 会对外抛出错误 VikingdbRequestError,它继承与 VikingdbError,错误实例上会同时有 OriginalRequstLogid

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 类型数据的精度存在不准确的情况。