向量数据库
简介
向量数据库是指任何可以原生存储和管理向量嵌入并且可以处理向量所描述的非结构化数据(如文档、图像、视频、音频等)的数据库。目前,向量数据库已成为推荐引擎(常见于热门零售商和音视频流媒体服务商)、虚拟助手、生物特征模式识别、异常检测等领域的重要基石。此外,向量数据库还开辟了一个新的重要使用场景:存储大规模的非结构化数据,以供生成式AI模型访问并输出更优结果。
原理
- 长期记忆:主要用于知识库场景。业务特点是万亿级别数据量,对于检索召回率要求很高,向量数据库可以通过相似检索对Prompt做补充,提高回答准确率和效率,解决大模型“幻觉”问题。
- 短期记忆:主要用于会话上下文场景。业务特点是千亿级别数据量,要求高效的数据插入和检索,向量数据库可以通过相似检索补充新问题Prompt,生成新问题答案并且保存在数据库中。
- 临时缓存:主要用于答案生成过程加速场景。业务特点是数据量大,要求高效的数据更新和检索,向量数据库临时保存之前出现过的字符前缀embedding以及需要产生的下一个字符,通过检索可以加速答案生成过程。
示例
在机器学习和自然语言处理中,Embedding是指将高维度的数据(例如文字、图片、音频)映射到低维度空间的过程。Embedding向量通常是一个由实数构成的向量,它将输入的数据表示成一个连续的数值空间中的点。简而言之,Embedding是一个N维的实值向量,可以用来表示任何事情,如文本、音乐、视频等。
本小节介绍向量数据库的基本功能,包括创建向量表、修改向量属性类型、管理向量数据、清空表格等操作。
- 创建含向量类型的表,同时设定数据维度。建表时向量类型必须要指定维度,当插入数据的维度与设置的数据维度不一致时,数据库报错。
gaussdb=# CREATE TABLE t1(id int unique, repr floatvector(4)); gaussdb=# CREATE TABLE t2(id int unique, repr boolvector(3));
- 增加向量列。需指定默认值,否则数据库报错。
gaussdb=# ALTER TABLE t1 ADD COLUMN floatvec floatvector(3) default '[1,1,1]'; - 修改表中的向量数据类型属性。可以通过ALTER TABLE语句修改向量维度。
gaussdb=# ALTER TABLE t1 ALTER COLUMN repr type floatvector(4);注意:如果表中已经插入数据,变换向量维度时需要表中数据符合维度设定,否则数据库报错;当向量属性已创建向量索引,属性的数据类型无法切换到其他数据类型,数据库报错。
- 插入数据。
gaussdb=# INSERT INTO t1 VALUES(0, '[30,12,12,25]'); gaussdb=# INSERT INTO t1 VALUES(1, '{7.5,62,1,235}');
字符型数据隐式转化为向量数据类型。
gaussdb=# INSERT INTO t2 VALUES(2, '[1, 0, 1]'); gaussdb=# INSERT INTO t2 VALUES(3, '[T, T, F]'); gaussdb=# INSERT INTO t2 VALUES(4, '[false, true, true]'); gaussdb=# INSERT INTO t2 VALUES(5, '[Y, N, N]'); gaussdb=# INSERT INTO t2 VALUES(6, '[no, yes, no]'); gaussdb=# INSERT INTO t2 VALUES(7, '[off, off, on]'); gaussdb=# INSERT INTO t2 VALUES(8, '[1, yes, on]');
- 删除数据。
gaussdb=# DELETE t1 where repr <-> '[30,12,12,25]' < 0.2; - 对向量列和非向量列的更新和删除操作,以及VACUUM操作。
gaussdb=# UPDATE t1 SET id = 38; gaussdb=# UPDATE t1 SET repr = '[1000,152,132,5]'; gaussdb=# DELETE FROM t1 WHERE id=38; gaussdb=# DELETE FROM t1 WHERE repr='[30,12,12,25]'; gaussdb=# DELETE FROM t1 WHERE repr <-> '[30,12,12,25]' < 0.8; gaussdb=# VACUUM t1;


