您现在的位置是:网站首页> AI人工智能

向量数据库相关技术收集

摘要

向量数据库相关技术收集


向量数据库简介

Chroma向量数据库






向量数据库简介

向量数据库,是专门为向量检索设计的中间件!

向量数据库其实最早在传统的人工智能和机器学习场景中就有所应用。在大模型兴起后,由于目前大模型的token数限制,很多开发者倾向于将数据量庞大的知识、新闻、文献、语料等先通过嵌入(embedding)算法转变为向量数据,然后存储在Chroma等向量数据库中。当用户在大模型带入问题后,将问题本身也embedding,转化为向量,在向量数据库中查找与之最匹配的相关知识,组成大模型的上下文,将其输入给大模型,最终返回模型处理后的文本给用户,这种方式不仅降低大模型的计算量,提高响应速度,也降低成本,并避免了大模型的tokens限制,是一种简单高效的处理手段。此外向量数据库还在大模型记忆存储等领域发挥其不可替代的作用。



Chroma向量数据库

官方文档:https://docs.trychroma.com/docs/overview/introduction

#!pip install chromadb

#为了演示方便,我们只取两页(第一章)

paragraphs = extract_text_from_pdf(

"ilama2.pdf"

page_numbers=[2, 3], min_line_length=10


import chromadb

from chromadb.config import Settings 

class MyVectorDBConnector:

 def init(self,collectionname,embedding fn):

        #内存模式

        chroma_client=chromadb.client(Settings(allow_reset=True))

        #数据持久化

        #chroma_client=chromadb.Persistentclient(path="./chroma")

        #注意:为了演示,实际不需要每次reset(),并且是不可逆的,它是复位清空数据

        chroma_client.reset()

        

        #创建一个collection

        self.collection=chroma_client.get_or_create_collection(name=collection_name) 

        self.embedding_fn = embedding_fn  #模型文本向量化函数,如果不设置数据库默认的模型all-MiniLM-L6-v2


def add_documents(self,documents):

      '''向collection 中添加文档与向量 

      self.collection.add(

             embeddings=self.embedding_fn(documents),#每个文档的向量        

             documents=documents,#文档的原文

             ids=[f"id{i}" for i in range(len(documents))]#每个文档的id

        )

def search(self,query,top_n):  #top_n表示检索几个文档出来

       '''检索向量数据库!

       results = self.collection.query(

               query_embeddings=self.embedding_fn([queryl), 

               n_results=top_n

        )

       return results




pip install -U python-dotenv


import numpy as np

from numpy import dot

from numpy.linalg import norm 

from openai import OpenAI 

import os


#加载环境变量


from dotenv import load_dotenv,find_dotenv

- = load_dotenv(find_dotenv(), verbose=True) #读取本地.enV文件,里面定义了OPENAI_API_KEY

client=OpenAI()


def get_embeddings(texts,model="text-embedding-ada-oo2",dimensions=None):

    '''封装OpenAI的Embedding模型接口 

     if model == "text-embedding-ada-002":

        dimensions = None 

     if dimensions:

        data = client.embeddings.create(

             input=texts, model=model,dimensions=dimensions).data

      else:

         data = client.embeddings.create(input=texts, model=model).data 

      return [x.embedding for x in data]


#创建一个向量数据库对象

vector_db=MyVectorDBConnector("demo",get_embeddings) 

#向向量数据库中添加文档

vector_db.add_documents(paragraphs) 

user_query ="Llama 2有多少参数"

# user_query = "Does Llama 2 have a conversational variant"

results = vector_db.search(user_query,2) 

for para in results['documents'][0]:

      print(para+"\n")






Top