ホームページ >バックエンド開発 >Python チュートリアル >SQLマインドのためのChromaDB
こんにちは。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 とは異なり、自動インクリメントがないので、自分で指定する必要があることに注意してください
Documents: 埋め込みの生成に使用されるテキスト データを挿入するために使用されます。テキストを指定すると、埋め込みが自動的に作成されます。または、埋め込みを直接指定してテキストを別の場所に保存することもできます。
埋め込み: これらは類似性検索を実行するために使用されるため、私の意見では、データベースの最も重要な部分です。
メタデータ: これは、追加のコンテキストのためにデータベースに追加する可能性のある追加データを関連付けるために使用されます。
コレクションの基本が明確になったので、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] )
これで、データをフィルタリングする 3 つの方法が考えられます: 類似性検索 (ベクター データベースが主に使用される用途)、メタデータ フィルタ、ドキュメント フィルタ
テキストまたは埋め込みに基づいて検索し、最も類似した出力を取得できます
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(... , ..., ...)
次のように 3 つのフィルターをすべて組み合わせることができます:
特定のカテゴリ内を検索:
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 中国語 Web サイトの他の関連記事を参照してください。