以下最佳实践基于新版API V2,推荐使用此版本。
向量数据库 VikingDB 是构建于火山引擎的云基础设施之上的向量数据库系统,其核心功能涵盖了对机器学习模型产生的海量向量数据进行生产、存储、索引以及分析等操作。
在本指南里,我们会引导您在短短几分钟内迅速完成首个向量库的开通、配置工作,让您能够在我们的配置页面走完数据集创建、索引创建以及检索查询的全部流程。
分为以下三个步骤:
登录 火山引擎控制台,找到 VikingDB,根据对应的提示按需开通 向量数据库服务。
创建数据集有两种方式:
(“已有向量”写入向量,“从向量化开始”写入原始数据)
注意
text、image 、video类型字段仅作为存储数据用途,不会用于向量化,字段名称也不能与向量化字段重复。编号 | 参数名称 | 参数说明 |
|---|---|---|
1 | 基础信息(必填) |
|
2 | 向量信息(必填) |
|
3 | 字段配置(选填) |
|
4 | 主键(必填) |
|
5 | 费用细则与创建数据集 |
|
数据写入现在支持在线写入、本地数据导入、从TOS添加和单条数据插入四种形式(目前视频只支持在线写入)。
点击【写入数据】进入写入页面
适用于在线服务数据实时写入生效场景,提供流式写入接口
写入数据:在写入数据时请根据选择**“从向量化开始”或“已有向量数据”**来决定上传时需要写入的参数。
写入示例:
请创建数据集、填入数据集名称、aksk、字段名、json文件地址
''' > uv run --env-file .env python main.py ''' import os import json import requests from volcengine.auth.SignerV4 import SignerV4 from volcengine.Credentials import Credentials from volcengine.base.Request import Request def main() -> None: client = HTTPClient( ak=os.environ.get("VIKINGDB_AK"), sk=os.environ.get("VIKINGDB_SK"), host=os.environ.get("VIKINGDB_HOST"), # https://www.volcengine.com/docs/84313/1792715 region=os.environ.get("VIKINGDB_REGION"), ) req_method = "POST" collection_name = os.environ.get("VIKINGDB_COLLECTION") index_name = os.environ.get("VIKINGDB_INDEX") upsert_body = { "collection_name": collection_name, "data": [{"text": "hello world"}], } upsert_resp = client.do_req( req_method=req_method, req_path="/api/vikingdb/data/upsert", req_params=None, req_body=upsert_body, ) print(f"[upsert status={upsert_resp.status_code} body={upsert_resp.text}]\n===") search_body = { "collection_name": collection_name, "index_name": index_name, "limit": 1, } search_resp = client.do_req( req_method=req_method, req_path="/api/vikingdb/data/search/random", req_params=None, req_body=search_body, ) print(f"[search status={search_resp.status_code} body={search_resp.text}]") class HTTPClient: def __init__(self, ak: str, sk: str, host: str, region: str): self.ak = ak self.sk = sk self.host = host self.region = region def prepare_request(self, method: str, path: str, params=None, data=None) -> Request: r = Request() r.set_schema("https") # ensure HTTPS r.set_method(method) r.set_connection_timeout(10) r.set_socket_timeout(10) mheaders = { "Accept": "application/json", "Content-Type": "application/json", "Host": self.host, } r.set_headers(mheaders) if params: r.set_query(params) r.set_host(self.host) r.set_path(path) if data is not None: r.set_body(json.dumps(data)) credentials = Credentials(self.ak, self.sk, "vikingdb", self.region) SignerV4.sign(r, credentials) return r def do_req(self, req_method: str, req_path: str, req_params, req_body): req = self.prepare_request( method=req_method, path=req_path, params=req_params, data=req_body, ) return requests.request( method=req.method, url="{}://{}{}".format(req.schema, self.host, req.path), # use the schema set above headers=req.headers, data=req.body, timeout=10000, ) if __name__ == "__main__": main()
完成初始化的基础上,对于已有向量数据的数据集,您可以使用在线异步写入的方式写入数据。通过设置 async 参数为true。
说明
异步写入可以提供比同步写入大10倍的写入带宽,适用于更大规模数据量级的实时更新场景。
说明
支持图片文本,视频暂时不支持本地写入,正在努力更新
适用于首次建库,一次性大批量离线数据上传场景,提供大批量处理能力,速度更快。
注意
本地数据导入时,如果您需要上传多模态信息,也请上传tos地址。
说明
支持图片文本,视频暂时不支持从TOS导入,正在努力更新
若需要上传多模态数据,请先将图片上传至TOS,并将图片的tos存储路径传入"image"字段。
{"animal_image": "tos://best-practice-pic-search-tos/pic_search_1000_images/0009fc27d9.jpg"}
具体执行逻辑可参考如下流程图。详见【向量库】多模态搜索最佳实践
此外,你还可以在数据集详情页面插入单条数据
写入数据后,您可以在数据集详情页面通过主键对数据进行查询
检索测试页会根据您的数据集配置给出对应的测试方法。
点击查询后,页面右侧会按照输入的查询向量检索出相似的 K 个向量,查询结果默认按照 score 从高到低排序。
如果您创建了直接导入向量的数据集,且包含了稠密向量和稀疏向量的混合索引,您需要同时输入稠密向量和稀疏向量进行检索。
此外,我们在开始使用页面还为您准备了探索指南,您可以根据需要按照指引深入探索VikingDB向量数据库: