回答这个问题之前我们先来理解一下什么是向量?
比如在我们看到这个水果时,我们知道它是一个苹果。但在“苹果”这个词被发明之前,人们是如何描述这个水果的呢?通过观察它的颜色、大小、形状、纹理等特征,我们可以更清晰地定义这个水果。将这些特征用数字来表达,我们就可以得到一个向量。
一旦复杂的图像被转换成计算机可识别的数字表示,计算机就可以“认识”这个苹果了。但是,当新的苹果出现时,计算机还能识别它吗?当然可以,因为新的图像在向量空间中与最接近的向量具有高相似性,计算机可以通过比较向量之间的相似度来进行识别。
今天让我们惊叹不已的人工智能,往往通过上千个向量维度来学习训练,他们就像是AI大模型的眼睛,当AI大模型遇上庞大的向量数据,这组黄金搭档如何让硅基生物更聪明呢?
以大语言模型为例。简单来说在训练时, 喂给它的词句都会先转化为向量数据, 当训练数据里出现多组类似的语言时,在向量数据组成的高维空间,相近的词汇就会距离更近,语言模型就可以逐渐捕捉到词汇间的语意和语法。
举例说明: 它会更明白苹果和西瓜语意上接近,但是和公交车相差甚远,接下来模型需要对上下文进行理解,此时Transformer架构就开始发挥作用,从每个词自身出发,观察和其他词之间的关系权重。
例如这句话里“我昨天买的苹果很好吃”, “很好吃”和“我”关系权重最大,权重结果被当作新的维度记录下来,一句更复杂的话,也转化成了带权重的向量,原模型经过查询计算。生成权重最高的答案输出给你,一次问答就完成了
大模型训练推理过程更为复杂,他们需要处理如文本图像,音视频等大量非结构化数据,并转化为向量数据进行学习,这些数据的规模动辄过亿,向量维度可能高达数千,在选择数据库时,传统数据库只能进行行列检索一一对应,
再输出精准的答案,但向量数据库,则是专门为非结构化数据检索而设计,它将项量数据组成一个立体高维空间,在空间中进行模糊检索,能够快速输出权重最高的答案。
业界的AI大模型采取预训练的模式,使用收集好的数据进行训练, 知识库难以做到实时更新,而接入向量数据库后,就像给模型插了个高性能外接硬盘,支持学习互联网等最新信息,比重新训练模型微调等方式更加便宜高效。
在线推理时,大模型其实是没有记忆功能的,只能通过重新输入之前的问答,实现短期记忆,而且输入的内容也是有长度限制的。
腾讯云向量数据库(Tencent Cloud VectorDB)作为一种专门存储和检索向量数据的服务提供给用户,可以充当AI的海马体,让人工智能拥有记忆历史,问答能够当成新的训练语料,进入向量数据库永久储存,甚至当用户提出了重复相似的提问,向量数据库会直接给出缓存答案,这就让AI大模型,越用越聪明,越用越迅捷。
LLM+向量数据库,打造专属RAG应用
腾讯云向量数据库可以和大语言模型 LLM 配合使用。企业的私域数据在经过文本分割、向量化后,可以存储在腾讯云向量数据库中,构建起企业专属的外部知识库,从而在后续的检索任务中,为大模型提供提示信息,辅助大模型生成更加准确的答案。
高性能 | 持百万级 OPS 及毫秒级查询延迟 |
---|---|
低成本 | 全流程平台托管,无需进行任何安装、部署、运维操作 |
大规模 | 单索引支持 10 亿级向量数据规模 |
简单易用 | 用户通过 API即可快速操作数据库,开发效率高 |
高可用 | 提供多副本高可用特性,提高容灾能力 |
稳定可靠 | 源自腾讯集团自研的向量检索引擎,近40个业务线上稳定运行 |
智能客服是一种基于AI技术的解决方案,通过向量数据库存储企业知识(如商品信息、游戏信息等),并利用LLM进行自然语言处理,从而准确、高效地回答客户问题,提高客户满意度、降低企业客服成本
挑战 | 优势 |
---|---|
推理问题生成答案 | 通过向量数据库为LLM提供外部知识库,提高大模型回答的准确性 |
客服引导式话术 | LLM理解引导式话术,在用户问题不完整的情况下,通过与用户的互动,逐步引导用户提问,服务更加友好 |
多轮对话 | LLM通过对多轮的深入语义分析和精准理解,实现了自然、流畅的对话,增强了与用户的亲近感 |
提交完成后等待创建即可
Git地址: https://github.com/SophonPlus/ChineseNlpCorpus
获取其中一个类目即可哦!!
相关依赖引入
import tcvectordb from tcvectordb.model.enum import FieldType, IndexType, MetricType, EmbeddingModel from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams from tcvectordb.model.collection import Embedding, UpdateQuery from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency
创建数据库
client = tcvectordb.VectorDBClient(url='http://lb-esqjs4rv-35ijkpnybtm1fsuc******', username='root', key='gD0Ip*******', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30) db = client.create_database(database_name='db-test') print(db.database_name)
注意:
# 第一步,设计索引 index = Index( FilterIndex(name='id', field_type=FieldType.String, index_type=IndexType.PRIMARY_KEY), VectorIndex(name='vector', dimension=768, index_type=IndexType.HNSW, metric_type=MetricType.COSINE, params=HNSWParams(m=16, efconstruction=200)), ) ebd = Embedding(vector_field='vector', field='text', model=EmbeddingModel.BGE_BASE_ZH) # 第二步:创建 Collection coll = db.create_collection( name='intelligent', shard=1, replicas=0, description='this is a collection of test embedding', embedding=ebd, index=index ) print(vars(coll))
注意:
运行完上述代码之后 , 你的向量数据库 的库名以及集合都已经创建完了哦!
> 关于 Embedding 我必须拿出来单独说一下, 腾讯云的工程师,简直就是太贴心了
要知道一个Embedding 将原始文本转换成向量进行数据插入, 这一点给开发者提供了多少的便利啊!(懂得都懂, 我是被折磨坏了!!)
引入依赖
import tcvectordb import pandas as pd from tcvectordb.model.document import Document, Filter, SearchParams from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency
连接向量数据库
client = tcvectordb.VectorDBClient(url='http://lb-esqjs4rv-3**********', username='root', key='gD0Ips0RA***********9CBBE', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30) # 指定写入原始文本的数据库与集合 db = client.database('db-test') coll = db.collection('intelligent')
解析csv 数据并写入原始文本 (embedding)
documents = [] count = 1 for index, row in data.iterrows(): st_info = '{}:{}'.format(row["title"], row["reply"]) count += 1 print(f'{st_info} /n 11') res = coll.upsert( documents=[ Document( id=str(count), text=st_info, title=row['title'], reply=row['reply'], ) ], build_index=True )
csv 部分数据如下
注意:
测试结果没有问题
代码如下
import tcvectordb from tcvectordb.model.enum import FieldType, IndexType, MetricType, EmbeddingModel, ReadConsistency from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams from tcvectordb.model.document import Document, Filter, SearchParams client = tcvectordb.VectorDBClient(url='http://lb-esqjs4rv-*********', username='root', key='gD0Ips0RA********BBE', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30) # 指定写入原始文本的数据库与集合 db = client.database('db-test') coll = db.collection('intelligent') searchword = input('请输入查询问题:') doc_lists = coll.searchByText( embeddingItems=[searchword], params=SearchParams(ef=200), limit=3, retrieve_vector=False, ) # printf for i, docs in enumerate(doc_lists.get("documents")): print(i) for doc in docs: print(doc)
测试结果:
这里我是直接选择csv 中的一个问题进行提问的 , 可以看出返回三条中第一条匹配度是 0.9 , 完全没有问题, 而这个回答也是csv 中对应的回答
注意:
整体体验下来感觉腾讯云向量数据库真是个宝藏啊, 写入的速度也是杠杠的, 有项体验的宝贝抓紧体验一下吧
AIGC时代的数据管理 -向量数据库 , 扫码即可阅读哦!!!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。