안녕하세요. Chroma DB는 GenAI 애플리케이션 작업에 유용한 벡터 데이터베이스입니다. 이 기사에서는 MySQL의 유사한 관계를 살펴봄으로써 Chroma DB에서 쿼리를 실행할 수 있는 방법을 살펴보겠습니다.
SQL과 달리 자체 스키마를 정의할 수 없습니다. Chroma에서는 각각 고유한 목적을 가진 고정된 열이 제공됩니다.
import chromadb #setiing up the client client = chromadb.Client() collection = client.create_collection(name="name") collection.add( documents = ["str1","str2","str3",...] ids = [1,2,3,....] metadatas=[{"chapter": "3", "verse": "16"},{"chapter":"3", "verse":"5"}, ..] embeddings = [[1,2,3], [3,4,5], [5,6,7]] )
ID: 고유한 ID입니다. SQL과 달리 자동 증가가 없으므로 직접 제공해야 합니다.
문서: 임베딩을 생성하는 데 사용되는 텍스트 데이터를 삽입하는 데 사용됩니다. 텍스트를 제공하면 자동으로 임베딩이 생성됩니다. 또는 임베딩을 직접 제공하고 다른 곳에 텍스트를 저장할 수도 있습니다.
임베딩: 내 생각에는 유사성 검색을 수행하는 데 사용되는 임베딩이 데이터베이스에서 가장 중요한 부분입니다.
메타데이터: 추가 컨텍스트를 위해 데이터베이스에 추가할 수 있는 추가 데이터를 연결하는 데 사용됩니다.
이제 컬렉션의 기본 사항이 명확해졌으므로 CRUD 작업으로 넘어가서 데이터베이스를 쿼리하는 방법을 살펴보겠습니다.
참고: 컬렉션은 Chroma의 테이블과 같습니다
컬렉션을 생성하려면 create_collection()을 사용하고 필요에 따라 작업을 수행할 수 있지만 컬렉션이 이미 만들어져서 이를 다시 참조해야 하는 경우 get_collection()을 사용해야 합니다. 그렇지 않으면 오류가 발생합니다.
Create Table tablename
#Create a collection collection = client.create_collection(name="name") #If a collection is already made and you need to use it again the use collection = client.get_collection(name="name")
Insert into tablename Values(... , ..., ...)
collection.add( ids = [1] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] )
삽입된 데이터를 업데이트하거나 데이터를 삭제하려면 다음 명령을 사용할 수 있습니다
collection.update( ids = [2] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] ) # If the id does not exist update will do nothing. to add data if id does not exist use collection.upsert( ids = [2] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] ) # To delete data use delete and refrence the document or id or the feild collection.delete( documents = ["some text"] ) # Or you can delete from a bunch of ids using where that will apply filter on metadata collection.delete( ids=["id1", "id2", "id3",...], where={"chapter": "20"} )
이제 특정 검색어가 어떻게 나타나는지 살펴보겠습니다
Select * from tablename Select * from tablename limit value Select Documents, Metadata from tablename
collection.get() collection.get(limit = val) collection.get(include = ["documents","metadata"])
더 고급 쿼리를 위해 대규모 테이블 세트를 가져오는 데 get()이 있지만 쿼리 방법을 사용해야 합니다
Select A,B from table limit val
collection.query( n_results = val #limit includes = [A,B] )
이제 데이터를 필터링하는 세 가지 가능한 방법이 있습니다: 유사성 검색(주로 사용되는 벡터 데이터베이스), 메타데이터 필터 및 문서 필터
텍스트나 임베딩을 기반으로 검색하여 가장 유사한 결과를 얻을 수 있습니다
collection.query(query_texts=["string"]) collection.query(query_embeddings=[[1,2,3]])
ChromaDB에서는 쿼리 중 결과를 필터링하는 데 where 및 where_document 매개변수가 사용됩니다. 이 필터를 사용하면 메타데이터 또는 특정 문서 콘텐츠를 기반으로 유사성 검색을 세분화할 수 있습니다.
where 매개변수를 사용하면 관련 메타데이터를 기준으로 문서를 필터링할 수 있습니다. 메타데이터는 일반적으로 문서 삽입 중에 제공하는 키-값 쌍의 사전입니다.
카테고리, 작성자, 날짜 등의 메타데이터를 기준으로 문서를 필터링하세요.
import chromadb #setiing up the client client = chromadb.Client() collection = client.create_collection(name="name") collection.add( documents = ["str1","str2","str3",...] ids = [1,2,3,....] metadatas=[{"chapter": "3", "verse": "16"},{"chapter":"3", "verse":"5"}, ..] embeddings = [[1,2,3], [3,4,5], [5,6,7]] )
Create Table tablename
where_document 매개변수를 사용하면 문서 내용을 기준으로 직접 필터링할 수 있습니다.
특정 키워드가 포함된 문서만 검색합니다.
#Create a collection collection = client.create_collection(name="name") #If a collection is already made and you need to use it again the use collection = client.get_collection(name="name")
예:
Insert into tablename Values(... , ..., ...)
다음과 같이 세 가지 필터를 모두 결합할 수 있습니다.
특정 카테고리 내에서 검색:
collection.add( ids = [1] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] )
특정 용어가 포함된 문서 검색:
collection.update( ids = [2] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] ) # If the id does not exist update will do nothing. to add data if id does not exist use collection.upsert( ids = [2] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] ) # To delete data use delete and refrence the document or id or the feild collection.delete( documents = ["some text"] ) # Or you can delete from a bunch of ids using where that will apply filter on metadata collection.delete( ids=["id1", "id2", "id3",...], where={"chapter": "20"} )
메타데이터와 문서 콘텐츠 필터 결합:
Select * from tablename Select * from tablename limit value Select Documents, Metadata from tablename
이러한 필터는 유사성 검색의 정확성을 향상시켜 ChromaDB를 대상 문서 검색을 위한 강력한 도구로 만듭니다.
나만의 프로그램을 만들려고 할 때 문서가 욕심이 많이 남는다고 느껴서 이 글을 썼습니다. 도움이 되었으면 좋겠습니다!
글을 읽어주셔서 감사합니다. 좋아요와 공유 부탁드립니다. 또한 귀하가 소프트웨어 아키텍처를 처음 접하고 더 많은 것을 알고 싶다면 저는 개인적으로 귀하와 함께 일할 그룹 기반 코호트를 시작하고 소그룹을 통해 소프트웨어 아키텍처 및 디자인 원칙에 대한 모든 것을 가르칠 것입니다. 관심이 있으시면 아래 양식을 작성해 주세요. https://forms.gle/SUAxrzRyvbnV8uCGA
위 내용은 SQL 마인드를 위한 ChromaDB의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!