向量数据库
概述
百度智能云的向量数据库VectorDB、AppBuilder和ModelBuilder三者在AI技术栈中构成了一条从数据管理、模型开发到应用落地的完整链路。向量数据库(Vector Database)作为一项关键技术逐渐成为AI基础设施的核心组件。它不仅解决了传统数据库在处理非结构化数据时的局限性,更在大模型与Agent的协同中扮演着"记忆中枢"与"推理加速器"的角色。
快速开始
向量数据库是一种专门设计用于存储和检索向量嵌入的数据库系统,能够支持语义搜索、推荐系统等AI应用场景。本快速开始指南将帮助您在几分钟内完成向量数据库的创建和基本操作。
在开始使用向量数据库前,请先了解API鉴权相关信息。详细内容请参见鉴权认证。
1. 创建向量数据库实例
创建一个VDB实例作为您存储和管理向量数据的环境。这是使用向量数据库的第一步,相当于为您的向量数据准备了一个专用的"仓库"。
更多接口说明请参考创建实例。
1curl --location 'https://vdb.bj.baidubce.com/v1/vdb/instance/create' \
2--header 'Authorization: Bearer <AppBuilder API Key>' \
3--header 'Content-Type: application/json' \
4--data '{
5 "productType": "postpay",
6 "instanceParam": {
7 "instanceType": "cluster",
8 "instanceName":"vdb",
9 "vpcId":"vpc-xdfsdfsd",
10 "dataNodeNum":2,
11 "proxyNum":2,
12 "instanceNum":1,
13 "nodeSpec":"vdb.dc.large",
14 "azInfos":[{"availabilityZone":"cn-bj-c","subnetId":"sbn-xdeadfa2"}],
15 "diskFlavor":20,
16 "port":80,
17 "nodeType": "compute",
18 "diskType": "ssd"
19 },
20 "duration": 1,
21 "autoRenew": true,
22 "autoRenewTimeUnit": "month",
23 "autoRenewTime": 1
24}'
注意:创建接口为异步操作,系统需要几分钟来准备资源和配置环境。请通过下一步的查询接口确认实例状态为"Running"后再进行后续操作。
2. 查询实例详情
确认实例是否创建成功并获取连接信息。此步骤可以帮您检查实例的运行状态、网络配置和资源使用情况,确保实例已准备就绪可以接受连接请求。
更多接口说明请参考查询实例详情。
1curl --location 'https://vdb.bj.baidubce.com/v1/vdb/instance/detail?instanceId={instanceId}' \
2--header 'Authorization: Bearer <AppBuilder API Key>' \
3--header 'Content-Type: application/json' \
3. 获取账号密码
获取实例的登录凭证,用于后续数据操作。每个实例创建时会自动生成root账号,通过此API可以获取其密码,这是访问和操作数据库的必要凭证。
安全建议:
- 请妥善保管获取到的密码信息
- 在生产环境中,建议创建额外的非root用户并分配最小必要权限
- 定期更改密码增强安全性
更多接口说明请参考获取账号密码。
1curl --location 'https://vdb.bj.baidubce.com/v1/vdb/account/password?instanceId={instanceId}&username=root' \
2--header 'Authorization: Bearer <AppBuilder API Key>' \
3--header 'Content-Type: application/json' \
4. 创建数据库
在实例中创建一个逻辑数据库,作为表的容器。这相当于在您的"仓库"中划分一个独立的区域,用于组织和管理相关的数据表,便于权限管理和资源隔离。
应用场景:
- 可以为不同项目或应用创建独立的数据库
- 便于按业务需求组织数据,提高管理效率
- 支持多租户环境下的资源隔离
更多接口说明请参考创建数据库。
1curl --location 'http://{domain}/v1/database?create' \
2--header 'Authorization: Bearer account={username}&api_key={password}' \
3--header 'Content-Type: application/json' \
4--data '{
5 "database": "db_test"
6}'
5. 创建向量表
步骤意义:创建一个包含向量字段的数据表,定义数据结构和索引方式。这是向量数据库最核心的步骤,决定了如何存储数据以及如何高效检索向量。
关键概念说明:
-
字段类型:
FLOAT_VECTOR
:浮点型向量,用于存储模型生成的embedding向量BINARY_VECTOR
:二进制向量,占用空间更小,适合某些特殊场景TEXT
:存储原始文本内容,支持全文检索STRING
:存储短文本,如标题、标签等
-
索引类型:
HNSW
:图索引,查询速度快,适合高维向量
-
分区和复制:
replication
:副本数,提高可用性和读性能partition
:分区策略,提高并行处理能力和扩展性
更多接口说明请参考创建表。
1curl --location 'http://{domain}/v1/table?create' \
2--header 'Authorization: Bearer account={username}&api_key={password}' \
3--header 'Content-Type: application/json' \
4--data '{
5 "database": "db_name",
6 "table": "table_name",
7 "description": "table description",
8 "replication": 3,
9 "partition": {
10 "partitionType": "HASH",
11 "partitionNum": 10
12 },
13 "enableDynamicField": false,
14 "schema": {
15 "fields": [
16 {
17 "fieldName": "id",
18 "fieldType": "UINT64",
19 "primaryKey": true,
20 "partitionKey": true,
21 "autoIncrement": true
22 },
23 {
24 "fieldName": "title",
25 "fieldType": "STRING",
26 "notNull": true
27 },
28 {
29 "fieldName": "content",
30 "fieldType": "TEXT",
31 "notNull": true
32 },
33 {
34 "fieldName": "vector1",
35 "fieldType": "FLOAT_VECTOR",
36 "dimension": 768
37 },
38 {
39 "fieldName": "binary_vector",
40 "fieldType": "BINARY_VECTOR",
41 "dimension": 128
42 },
43 ...
44 ],
45 "indexes": [
46 {
47 "field": "vector1",
48 "indexName": "vector1_idx",
49 "indexType": "HNSW",
50 "metricType": "L2",
51 "params": {
52 "M": 32,
53 "efConstruction": 200
54 },
55 "autoBuild": true,
56 "autoBuildPolicy": {
57 "policyType": "timing",
58 "timing": "2024-01-01 12:00:00"
59 }
60 },
61 {
62 "indexName" : "content_inverted_index",
63 "indexType": "INVERTED",
64 "fields" : ["content"],
65 "fieldsIndexAttributes" : ["ATTRIBUTE_ANALYZED"],
66 "params" : {
67 "analyzer" : "DEFAULT_ANALYZER" ,
68 "parseMode" : "COARSE_MODE"
69
70 }
71 },
72 {
73 "indexName" : "title_index",
74 "indexType" : "FILTERING",
75 "fields" : [
76 {
77 "field" : "@SCALAR",
78 "indexStructureType":"BITMAP"
79 },
80 {
81 "field" : "title",
82 "indexStructureType":"DEFAULT"
83 }
84 ]
85 },
86 ...
87 ]
88 }
89}
90'
6. 插入向量数据
将向量数据写入表中,开始构建您的向量数据集。这一步将您的文本、图像等数据的向量表示存入数据库,为后续的相似度搜索和语义检索打下基础。
应用案例:存储文章内容向量,用于语义搜索;存储用户行为向量,用于个性化推荐;存储图像特征向量,用于图像检索等。
更多接口说明请参考插入数据。
1curl --location 'http://{domain}/v1/row?insert' \
2--header 'Authorization: Bearer account={username}&api_key={password}' \
3--header 'Content-Type: application/json' \
4--data '{
5 "database": "db_name",
6 "table": "table_name",
7 "rows": [
8 {
9 "id": "00001",
10 "username": "alice",
11 "vector_field": [
12 0.2323234,
13 0.34534545,
14 0.9837234
15 ],
16 "sparse_vector_field" : [[1, 0.56465], [100, 0.2366456], [10000, 0.543111]],
17 "binary_vector": "AAAAAAAAAAAAAAAAAAAAew=="
18 }
19 ]
20}'
后续步骤
完成以上步骤后,您已成功创建并写入了第一条向量数据。您的向量数据库现在已经可以用于:
- 向量相似度搜索:查找与给定向量最相似的记录,用于实现语义搜索、相似图片查找等功能
- 混合查询:结合向量相似度和关键词过滤,实现更精准的搜索
- 数据管理:对向量数据进行更新、删除和批量操作
更多高级操作请参考完整API文档。