如何让聊天机器人更懂你?Tair向量检索给你答案

d_hero
发布于 2023-8-23 15:03
浏览
0收藏

01ChatGPT潮流下向量检索的兴起

ChatGPT刚刚出圈并大火的时候,曾经出过一个Bug,用户有概率看到别的用户的聊天信息或者聊天Session的标题。最终,OpenAI发布了一份声明,对这个问题的发生做出了解释,声明中指出,该错误源于开源库redis-py中的一个漏洞。OpenAI官方宣称在此过程中寻求了Redis的开发者的帮助。借此机会,我们得以一探大模型与最火爆的聊天机器人应用中,缓存系统的作用方式。

大模型自身是没有多轮对话能力的,需要将之前的历史信息保存下来,重新组织以后再发送给大模型,才可以实现多轮对话的能力。但是不论是哪家的大模型,能够接受的请求大小(Token数限制)都是有限的,所以需要一个外存,将长期历史对话记录存储起来,并提供具备向量检索能力的查询检索能力。

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

大语言模型似乎已经无所不能了,为什么还需要数据库?通过对大规模互联网数据的学习,大语言模型已经具备了相当丰富的基础知识和阅读理解、逻辑推理能力。要想充分发挥它的潜力,还需要提供额外的信息进行辅助。一类是跟用户交流的历史记录,使得大模型在多轮对话中能够“瞻前顾后”;另一类是模型训练中所没有见过的私域知识以及新知识,避免大模型在未知的领域“无中生有”。Tair是阿里云企业级内存数据库,广泛应用于电商、游戏等各领域,兼容Redis生态(可平替开源Redis),并且同时具备向量检索能力,实现了缓存+向量二合一。

02大模型时代的新需求

在这个大模型与AIGC持续火爆的时代,向量检索的用户有哪些变化?用户对于向量检索以及缓存系统有哪些新需求?我们可以从以下几个方面来看:

1. 用户更加多元化

传统的向量检索系统,往往是AI工程中的一个组成部分,向量数据库的使用者往往是AI领域的专业人员。而随着大模型的火爆,各个领域的开发者都加入进来。这些用户对AI领域的知识,掌握程度参差不齐,对于模型、向量、距离函数、索引类型等概念的理解程度也有很大差异。另外传统的向量索引技术分支众多,各有特点,各分支在不同场景,不同数据规模下表现各异。在这种情况下,系统是否可以做的更加简洁易用,屏蔽掉大部分技术细节,将用户从选择困难中拯救出来,对用户很有意义。

2. 系统的实时读写能力

现在各个大模型相关的开发框架非常流行,比如LangChain、llamaIndex等。这些开发框架都兼容了非常多的向量数据库,但是对向量数据库的接口抽象中,都假设向量数据库可以像一个TP数据库一样使用,只提供初始化和实时的增删查改等几个很少的接口,传统向量检索系统的索引构建、索引加载、配置变更等步骤和流程完全没有体现。这就对向量数据库的实时读写能力,提出了更高要求,最好可以像是MySQL/Redis一样可以在线访问、实时读写的形态。

3. 多模混合检索能力

许多用户在基于大模型、AIGC的场景,进行开发的时候,私域数据以及长Session的用户信息,数据量的起步规格都不会很大。每个检索场景的系统各来一套的话,即使配置起步规格,系统利用率也不高。在检索的时候,除了向量近似检索,往往还需要其他方面的检索能力,比如全文检索、标量混合检索等等。如果可以在一个数据库实例内,同时提供这几种检索能力,将大大降低系统的复杂度和使用门槛。

03Tair的产品特性与优势

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

Tair向量检索,是在云原生内存数据Tair的基础上,以内置引擎的方式,为用户提供简单易用、实时高性能、多模混合检索的向量数据库服务。

向量索引基础能力

结合现有大模型的实际需求,Tair提供两种常见的索引算法:

 FLAT:在小规模或者对查询精度有严格要求的场景下,可以采用此方式,除数据外,无额外索引开销。

● HNSW:如果是大规模数据集,或者对查询时延有高要求,可以选用HNSW方式。此外,后台提供AutoGC功能,对标记删除的数据空间进行自动回收。

在距离函数的支持方面,行业常见L2,以及大模型领域经常用到的IP和COSINE都有支持。在向量每个维度的数据类型方面,完整支持FLOAT32、FLOAT16,以及Binary三种类型。

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

所有的数据和索引都是全内存设计,保证了实时在线的访问性能。数据变化会同步到备节点,保证系统的高可用。所有数据都会实时写入磁盘存储,保证数据的可靠性,并支持备份恢复,支持恢复至指定时间点的闪回特性。

简单易用

▶︎ 低起配低成本

使用Tair和其向量检索,就像使用开源Redis一样简单。Tair的起步规格为1G双节点,可以容纳数十万数据量,在LLM相关的大部分场景下都可以满足需求。

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

在内存使用上,Tair向量检索采用了精心设计的数据结构,面向内存数据库优化,比起开源的Milvus,内存占用节省30%~70%。

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

gist数据集,100万条,960维,HNSW算法

▶︎ 弹性

在部署方式上,使用主备高可用方式起步,并且可以在线扩容至最大256个集群分片的分布式部署方式,并且单分片支持的内存容量可以扩容至64GB,使得整个集群的最大容量扩展至16T。

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

Redis生态兼容使用方式

Tair在索引支持和使用方式上,采用的是完全实时在线的方式,创建/删除索引空间,或者写入数据只用少量的几个API即可实现,所有操作均为同步操作。在SDK的开发语言支持方面,我们通过扩展Tair的SDK支持了Java和Python,其他开发语言则可以通过兼容Redis协议的方式快速兼容,另外日常开发也可以通过redis-cli直接访问。

系统内部支持海量独立索引空间的创建和删除,在数据库进程内部,每个独立索引空间的创建和删除都映射到了KV操作中。这些底层机制使得Tair的向量检索能力具备以下特性:

 支持海量的独立索引空间,总数量只受实例内存空间的限制。索引的创建也是实时生效,操作时延<1ms。

 索引空间、以及索引空间内每个独立的向量数据行,都支持TTL / Expire类的操作。这些特性良好支持了具备向量检索能力的Session机制,使用起来也更像是传统的Redis,对有多元化需求的用户,支持更加友好。

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

实时高性能

所有的索引构建和更新,都采用了实时在线的方式,写入的数据实时可查,删除后的数据实时不可见,没有任何延迟。

在访问性能方面,索引的创建时延<1ms,类似于Redis中一个KV的操作时延;而向量数据的点查时延<1ms,写入(附带索引构建)和近似检索都在毫秒级别。此外,Tair向量检索同时支持Intel CPU和倚天CPU,并分别针对x86和arm架构进行了CPU指令集的优化。

以下均通过Tair的Python客户端,跨网络进行测试,测试的硬件环境是x86的G6机型和倚天710机型。

● HNSW索引算法下性能表现

数据集:sift(128维、100万条),gist(960维,100万条),ef_search为横坐标,查询最相近的10条数据。

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

● FLAT索引算法下性能表现

数据集:minst(784维,6万条),random随机数据(100维,9万条),查询最相近的10条数据。

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

多模检索

▶︎ 向量标量混合检索

Tair向量检索支持在对向量做ANN近似查询的同时,对标量数据同步过滤。在过滤标量少数据的同时,支持对过滤的条件按照C语言的格式进行编写,支持大于小于、与或非等操作符,例如:

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

▶︎丰富计算场景支持

Tair除了兼容Redis生态,提供了常用的Hash、ZSet等使用方式外,还提供了TairStack复杂数据结构的存储和检索能力。这些能力不仅增强了Tair在实时计算领域的能力,还和现有的其他数据结构一起为用户提供一站式的数据解决方案。

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

传统Redis生态的各种数据结构,为用户提供了缓存场景的高效使用,而Tair Search和Tair向量检索则为用户在大模型领域提供了在线检索能力,以及AI场景下的实时方案。TairSearch采用了和ES相似的、基于JSON的查询语法,满足了灵活性的同时,兼容ES用户的使用习惯,除了支持ES常用的分词器,还新增JIEBA和IK中文分词器,对中文分词更加友好。这种组合能力,可以大大简化业务系统,减少操作多种数据系统,带来的数据同步和资源成本等问题。

标准云原生数据库服务

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

Tair是标准的云原生内存数据库服务,具备云原生数据库服务常见的开箱即用的特点,完整支持安全加密、备份恢复、数据闪回等各种特性。同时对于多AZ部署、跨Region数据同步等也有完整支持。相比较开源数据库系统具备更出色的易用性。

04大模型结合Tair的应用场景

Tair为大模型系统提供长ChatSession

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

大模型系统能够接收的请求大小(也即Token数)是有限制的(通常是4K~32K之间),并且响应速度随着请求变大而变慢。以ChatGLM为例,将用户的历史记录作为请求的一部分持续追加,当超过Token数限制的时候就需要丢弃老的聊天记录,因此LLM方案无法实现太长的多轮对话能力。而基于Tair,可以将用户的历史聊天记录存在Session中,这些信息可以设置TTL等过期机制,并且Tair也支持海量的索引空间(Session)。在请求LLM的时候,通过向量检索技术,将相关的历史信息检索出来,通过Prompt润色后,一并发送给大模型,可实现基于多轮对话下,长期的上下文感知能力。

大模型私域数据问答

如何让聊天机器人更懂你?Tair向量检索给你答案-鸿蒙开发者社区

基于Tair的向量检索和全文检索能力,可以为用户私域数据的ChatBot服务提供两路召回,定制用户专有的ChatBot。通过近期的客户对接和访谈,现有大模型业务的数据规模一般较小(数万~数百万),Tair提供1GB的数据库实例,低成本起步;可在线扩容至16T的集群规模,支持大容量高吞吐的业务场景,满足业务规模的不断发展。

05使用说明及客户端SDK

redis-cli命令行API说明:https://help.aliyun.com/document_detail/453885.html

Java版客户端:https://github.com/tair-opensource/alibabacloud-tairjedis-sdk

Python版客户端:https://github.com/tair-opensource/tair-py

基于计算巢一键拉起Tair+LLM使用范例:

● 计算巢实例:https://computenest.console.aliyun.com/user/cn-hangzhou/serviceInstanceCreate?ServiceId=service-e0d7fd4e157d49119f47

● 说明文章:https://developer.aliyun.com/article/1255340



文章转载自公众号:阿里云瑶池数据库


分类
已于2023-8-23 15:03:51修改
收藏
回复
举报
回复
    相关推荐