> 백엔드 개발 > 파이썬 튜토리얼 > SQL 마인드를 위한 ChromaDB

SQL 마인드를 위한 ChromaDB

Linda Hamilton
풀어 주다: 2024-12-10 01:02:10
원래의
653명이 탐색했습니다.

ChromaDB for the SQL Mind

안녕하세요. 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 작업으로 넘어가서 데이터베이스를 쿼리하는 방법을 살펴보겠습니다.

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")
로그인 후 복사
로그인 후 복사

주요 사항:

  • $contains, $startsWith 또는 $endsWith와 같은 연산자를 사용하세요.
    • $contains: 하위 문자열이 포함된 문서를 일치시킵니다.
    • $startsWith: 하위 문자열로 시작하는 문서를 일치시킵니다.
    • $endsWith: 하위 문자열로 끝나는 문서를 일치시킵니다.
  • 예:

    Insert into tablename
    Values(... , ..., ...)
    
    로그인 후 복사
    로그인 후 복사

일반적인 사용 사례:

다음과 같이 세 가지 필터를 모두 결합할 수 있습니다.

  1. 특정 카테고리 내에서 검색:

    collection.add(
        ids = [1]
        documents = ["some text"]
        metadatas = [{"key":"value"}]
        embeddings = [[1,2,3]]
    )
    
    로그인 후 복사
    로그인 후 복사
  2. 특정 용어가 포함된 문서 검색:

    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"}
    )
    
    로그인 후 복사
    로그인 후 복사
  3. 메타데이터와 문서 콘텐츠 필터 결합:

    Select * from tablename
    
    Select * from tablename limit value
    
    Select Documents, Metadata from tablename
    
    로그인 후 복사
    로그인 후 복사

이러한 필터는 유사성 검색의 정확성을 향상시켜 ChromaDB를 대상 문서 검색을 위한 강력한 도구로 만듭니다.

결론

나만의 프로그램을 만들려고 할 때 문서가 욕심이 많이 남는다고 느껴서 이 글을 썼습니다. 도움이 되었으면 좋겠습니다!

글을 읽어주셔서 감사합니다. 좋아요와 공유 부탁드립니다. 또한 귀하가 소프트웨어 아키텍처를 처음 접하고 더 많은 것을 알고 싶다면 저는 개인적으로 귀하와 함께 일할 그룹 기반 코호트를 시작하고 소그룹을 통해 소프트웨어 아키텍처 및 디자인 원칙에 대한 모든 것을 가르칠 것입니다. 관심이 있으시면 아래 양식을 작성해 주세요. https://forms.gle/SUAxrzRyvbnV8uCGA

위 내용은 SQL 마인드를 위한 ChromaDB의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿