こんにちは。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 操作に進み、データベースにクエリを実行する方法を見てみましょう。
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")
重要なメモ:
- $contains、$startsWith、$endsWith などの演算子を使用します。
- $contains: 部分文字列を含むドキュメントと一致します。
- $startsWith: 部分文字列で始まるドキュメントと一致します。
- $endsWith: 部分文字列で終わるドキュメントと一致します。
-
例:
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 サイトの他の関連記事を参照してください。

Pythonに2つのリストを接続する多くの方法があります。1。オペレーターを使用しますが、これはシンプルですが、大きなリストでは非効率的です。 2。効率的ですが、元のリストを変更する拡張メソッドを使用します。 3。=演算子を使用します。これは効率的で読み取り可能です。 4。itertools.chain関数を使用します。これはメモリ効率が高いが、追加のインポートが必要です。 5。リストの解析を使用します。これはエレガントですが、複雑すぎる場合があります。選択方法は、コードのコンテキストと要件に基づいている必要があります。

Pythonリストをマージするには多くの方法があります。1。オペレーターを使用します。オペレーターは、シンプルですが、大きなリストではメモリ効率的ではありません。 2。効率的ですが、元のリストを変更する拡張メソッドを使用します。 3. Itertools.chainを使用します。これは、大規模なデータセットに適しています。 4.使用 *オペレーター、1つのコードで小規模から中型のリストをマージします。 5. numpy.concatenateを使用します。これは、パフォーマンス要件の高い大規模なデータセットとシナリオに適しています。 6.小さなリストに適したが、非効率的な追加方法を使用します。メソッドを選択するときは、リストのサイズとアプリケーションのシナリオを考慮する必要があります。

compiledlanguagesOfferspeedandsecurity、foredlanguagesprovideeaseofuseandportability.1)compiledlanguageslikec arefasterandsecurebuthavelOnderdevelopmentsplat dependency.2)

Pythonでは、forループは反復可能なオブジェクトを通過するために使用され、条件が満たされたときに操作を繰り返し実行するためにしばらくループが使用されます。 1)ループの例:リストを通過し、要素を印刷します。 2)ループの例:正しいと推測するまで、数値ゲームを推測します。マスタリングサイクルの原則と最適化手法は、コードの効率と信頼性を向上させることができます。

リストを文字列に連結するには、PythonのJoin()メソッドを使用して最良の選択です。 1)join()メソッドを使用して、 '' .join(my_list)などのリスト要素を文字列に連結します。 2)数字を含むリストの場合、連結する前にマップ(str、数字)を文字列に変換します。 3) '、'などの複雑なフォーマットに発電機式を使用できます。 4)混合データ型を処理するときは、MAP(STR、Mixed_List)を使用して、すべての要素を文字列に変換できるようにします。 5)大規模なリストには、 '' .join(lage_li)を使用します

pythonusesahybridapproach、コンコイリティレーショントビテコードと解釈を組み合わせて、コードコンピレッドフォームと非依存性bytecode.2)

keydifferencesは、「for」と「while "loopsare:1)" for "for" loopsareideal forterating overencesonownowiterations、while2) "for" for "for" for "for" for "for" for "for" for for for for "wide" loopsarebetterunuinguntinunuinguntinisisisisisisisisisisisisisisisisisisisisisisisisisisisations.un

Pythonでは、さまざまな方法でリストを接続して重複要素を管理できます。1)オペレーターを使用するか、すべての重複要素を保持します。 2)セットに変換してから、リストに戻ってすべての重複要素を削除しますが、元の順序は失われます。 3)ループを使用するか、包含をリストしてセットを組み合わせて重複要素を削除し、元の順序を維持します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
