推奨事項: NSDT シーン エディターを使用する と、3D アプリケーション シーンを迅速に構築できます。
ただし、AI モデルはグルメなシェフに少し似ています。驚くべき効果を発揮しますが、高品質の材料が必要です。AI モデルはほとんどの入力に対して適切に機能しますが、最も最適化された形式で入力を受け取った場合に真価を発揮します。それがベクトル データベースの重要な点です。
この記事では、ベクトル データベースとは何か、人工知能の世界でベクトル データベースがますます重要になっている理由を詳しく掘り下げてから、ベクトル データベースを実装するためのステップバイステップ ガイドを見ていきます。ベクトルデータベース。
一足先:
- ベクトルデータベースとは何ですか?
- なぜベクトルデータベースが必要なのでしょうか?
- ベクトル データベースの実装: ステップバイステップ ガイド
- 前提条件
- Weaviate プロジェクトのセットアップ
- node.js プロジェクトを作成します
- ベクトルデータベースをセットアップする
- クライアントを設定する
- データを移行する
- ドキュメントを追加
- 文書を削除する
- データベースにクエリ関数を追加する
- ベクトル埋め込みと AI の組み合わせ
- AIモデルの設定
- データをクエリする
- クエリをテストする
ベクトルデータベースとは何ですか?
ベクトル データベースの探索を開始する前に、プログラミングと機械学習のコンテキストにおけるベクトルとは何かを理解することが重要です。
プログラミングでは、ベクトルは基本的に数値の 1 次元配列です。3D グラフィックスや機械学習アルゴリズムを含むコードを書いたことがあるなら、おそらくベクトルを扱ったことがあるでしょう。
const Vector4_example = [0.5, 1.5, 6.0, 3.4]
これらは単なる数値の配列であり、通常は浮動小数点であり、その次元によって参照されます。たとえば、 a は浮動小数点数の 3 要素配列であり、 a は浮動小数点数の 4 要素配列です。それはとても簡単です!vector3
vector4
しかし、ベクトルは単なる数値の配列ではありません。機械学習のコンテキストでは、ベクトルは高次元空間でデータを表現および操作する際に重要な役割を果たします。これにより、AI モデルを駆動する複雑な操作と計算を実行できるようになります。
ベクトルを手に入れたので、ベクトル データベースに注目してみましょう。
一見すると、「ベクトルは単なる数値の配列なので、通常のデータベースを使用してベクトルを保存できないのでは?」と思うかもしれませんが、技術的には可能ですが、ここからが興味深いところです。
ベクトル データベースは、大量のベクトル データの保存と操作の実行に最適化された特殊なタイプのデータベースです。したがって、通常のデータベースは実際に配列を保存できますが、ベクトル データベースはさらに一歩進んで、ベクトルを操作するための特殊なツールと操作を提供します。
次のセクションでは、ベクトル データベースが必要な理由と、それがもたらす利点について説明します。話はこれからさらに面白くなるので、もう少し待ってください。
なぜベクトルデータベースが必要なのでしょうか?
ベクトル データベースとは何かをしっかりと理解したところで、人工知能と機械学習の分野でベクトル データベースがなぜそれほど必要なのかを掘り下げてみましょう。
ここでのキーワードはパフォーマンスです。ベクトル データベースは通常、クエリごとに数億のベクトルを処理します。これは、ベクトルを処理するときに従来のデータベースが達成できるパフォーマンスよりもはるかに高速です。
では、ベクトル データベースはなぜこれほど高速かつ効率的になるのでしょうか? それらを区別する主な機能のいくつかを見てみましょう。
複雑な数学
ベクトル データベースは、フィルタリングや「近くの」ベクトルの検索など、ベクトルに対して複雑な数学的操作を実行するように設計されています。これらの操作は、モデルが高次元空間で互いに近いベクトルを見つける必要があることが多い機械学習のコンテキストでは非常に重要です。
たとえば、一般的なデータ分析手法であるコサイン類似度は、2 つのベクトルがどの程度類似しているかを測定するためによく使用されます。ベクトル データベースは、この種の計算に優れています。
専用のベクトルインデックス
適切に編成されたライブラリと同様、データベースには、要求されたデータを迅速に取得するための優れたインデックス システムが必要です。ベクトル データベースは、従来のデータベース (ランダム データベースとは対照的に) よりも高速かつより決定的なデータの取得を可能にする特殊なベクトル インデックスを提供します。
これらのインデックスを使用すると、ベクトル データベースは AI モデルに必要なベクトルをすばやく見つけて、結果を迅速に生成できます。
コンパクトに収納
ビッグデータの世界では、ストレージスペースは貴重品です。ベクトル データベースは、ベクトルをよりコンパクトな方法で保存する場合にも役立ちます。圧縮や量子化ベクトルなどの技術を使用して、メモリ内にできるだけ多くのデータを保持し、負荷とクエリの遅延をさらに削減します。
断片化
大量のデータを扱う場合、シャーディングとして知られるプロセスである複数のマシンにデータを分散すると有益な場合があります。多くのデータベースではこれを行うことができますが、特に SQL データベースではスケールアウトにさらに多くの労力が必要です。一方、ベクトル データベースでは、アーキテクチャにシャーディングが組み込まれていることが多く、大量のデータを簡単に処理できます。
つまり、従来のデータベースはベクトルを保存して演算を実行できますが、そのタスク用に最適化されていません。一方、ベクトル データベースは、まさにこの目的のために構築されています。これらは、大量のベクトル データを処理するために必要な速度、効率、特殊なツールを提供し、人工知能と機械学習の分野で不可欠なツールとなっています。
次のセクションでは、ベクトル データベースを他のタイプのデータベースと比較し、それらが大規模なデータベース エコシステムにどのように適合するかを説明します。まだ始まったばかりです!
ベクトル データベースの実装: ステップバイステップ ガイド
このガイドでは、人気のあるベクター データベース サービスである Weaviate を使用して、あらゆるユースケースに基づいて構築できるシンプルなベクター データベースを実装します。
ここでスターター テンプレートを複製し、実行して設定できます。npm install
前提条件
- 以前の JS の知識が役に立ちます。このチュートリアルで書かれたすべてのコードは JavaScript で書かれており、Weaviate JavaScript SDK も使用します。
- Node と npm : サーバー上の JavaScript 環境で作業します。
- OpenAI API キー: 埋め込みモデルを使用してデータを埋め込みに変換し、データベースに保存します
- Weaviate アカウント: マネージド データベース サービスを使用します。ここで無料アカウントを取得できます。
Weaviate プロジェクトのセットアップ
アカウントを作成したら、Weaviate ダッシュボードからプロジェクトを設定する必要があります。WCS コンソールに移動し、[Create Cluster]をクリックします。
「無料サンドボックス」層を選択し、クラスター名を指定します。認証を有効にするかどうかを尋ねられたら、「はい」を選択します。
「作成」をクリックします。数分後、「完了」というチェックマークが表示されるはずです。
次のセクションで使用するクラスターの詳細を表示するには、「詳細」をクリックします。これらには次のものが含まれます。
- 織り込まれた URL
- 認証の詳細 (Weaviate API キー。キーのアイコンをクリックして表示します)
node.js プロジェクトを作成します
前提条件が整ったら、ベクトル データベースを作成してクエリを実行できます。続行するには、新しい Node プロジェクトが必要です。開始するために必要なものがすべて含まれている、GitHub 上のテンプレートのクローンをここで作成できます。
あるいは、次のコマンドを実行して作成することもできます。
mkdir weaviate-vector-database && cd weaviate-vector-database
npm init -y && npm install dotenv openai weaviate-ts-client
mkdir src
ファイルを編集し、次のようにスクリプトを追加します。package.json
start
// ...package.json の残りの部分
"scripts": { "start": "node src/index.js" }, // ...package.json の残りの部分
API キーなどの機密情報を保存するファイルを作成します。コマンドを記述し、新しく作成したファイルをコード エディターで開き、次の内容を貼り付けて、プレースホルダーを実際の値に置き換えてください。.env
touch .env
.env
// .env
OPENAI_KEY="<OPENAI_API_KEY>"
WEAVIATE_API_KEY="<WEAVIATE_API_KEY>"
WEAVIATE_URL="<WEAVIATE_URL>"
DATA_CLASSNAME="ドキュメント"
ベクトルデータベースをセットアップする
プロジェクトがセットアップされたら、いくつかのコードを追加してセットアップし、ベクター データベースを使用できます。何を達成するかを簡単にまとめてみましょう。
- ヘルパー関数:
- データベースに接続します
- ドキュメントをバッチでベクトル化してアップロードする
- 最も類似したアイテムを見つける
- 上記のヘルパー関数を使用してドキュメントをアップロードし、データベースに一度にクエリを実行するメイン関数
クライアントを設定する
そうは言っても、データベース接続とヘルパー関数を保存する最初のファイルを作成しましょう。実行して新しいファイルを作成し、入力を開始しましょう。touch src/database.js
// src/database.js
import weaviate, { ApiKey } from "weaviate-ts-client";
「dotenv」から { config } をインポートします。
config();
async 関数 setupClient() { クライアントに許可します。
try { client = weaviate.client({ スキーム: "https",ホスト: process.env.WEAVIATE_URL, apiKey: new ApiKey(process.env.WEAVIATE_API_KEY), headers: { "X-OpenAI-Api-Key": プロセス。 env.OPENAI_API_KEY }, }); catch (err) { console.error("error >>>", err.message); }
クライアントを返す。
}
// ... コードは以下に続きます
ここで何が起こっているのかを詳しく見てみましょう。まず、必要なパッケージ、Weaviate クライアント、dotenv 設定をインポートします。dotenv
ファイルから .Weaviate および OpenAI キーへの環境変数のロードであり、URL は機密性を保ち、コードベースから遠ざけるために環境変数に保存されることがよくあります。.env
process.env
関数内で何が起こるかは次のとおりです。setupClient()
- 変数を初期化します
client
- Weaviate サーバーへの接続を設定するブロックがあります。このプロセス中にエラーが発生した場合は、エラー メッセージがコンソールに出力されます。
try
…
catch
- ブロック内で、メソッドを使用して新しい Weaviate クライアントを作成します。、パラメータは設定した環境変数から取得されます
try
weaviate.client()
scheme
host
apiKey
- 最後に、OpenAI の Ada モデルを使用してデータをベクトル化するため、OpenAI のヘッダーを渡します。
データを移行する
クライアントをセットアップしたら、ダミー データ、架空の生き物、場所、イベントのコレクションを使用して移行を実行してみましょう。後で、このデータに対して GPT-3 にクエリを実行します。
スターター テンプレートを複製しなかった場合は、次の手順に従います。
- 実行して新しいファイルを作成します
touch src/data.js
- ここからファイルの内容をコピーして貼り付けます
しばらく時間をかけてデータを参照してください。次に、ファイルの先頭に新しいインポートを追加します。src/data.js
src/database.js
// ...その他のインポート
import { FAKE_XORDIA_HISTORY } from "./data";
「関数」の下に、次のように新しい関数を追加します。setupClient
async function Milegate( shouldDeleteAllDocuments = false) { try { const classObj = { class: process.env.DATA_CLASSNAME、vectorizer: "text2vec-openai"、moduleConfig: { "text2vec-openai": { model: "ada"、modelVersion: " 002"、タイプ: "テキスト"、}、}、};
const client = await setupClient();
try {
const schema = await client.schema
.classCreator()
.withClass(classObj)
.do();
console.info("created schema >>>", schema);
} catch (err) {
console.error("schema already exists");
}
if (!FAKE_XORDIA_HISTORY.length) {
console.error(`Data is empty`);
process.exit(1);
}
if (shouldDeleteAllDocuments) {
console.info(`Deleting all documents`);
await deleteAllDocuments();
}
console.info(`Inserting documents`);
await addDocuments(FAKE_XORDIA_HISTORY);
catch (err) { console.error("error >>>", err.message); } }
もう一度、ここで何が起こっているのかを分析してみましょう。
この関数は、データの移行時にデータベースをクリアするかどうかを決定する単一のパラメーターを受け入れます。migrate
shouldDeleteAllDocuments
このブロックでは、 というオブジェクトを作成します。このオブジェクトは、ベクトル化機能を使用する Weaviate のクラスのスキーマを表します (ファイルに を必ず追加してください)。これにより、データベース内でテキスト ドキュメントがどのように構成および表現されるかが決まり、OpenAI の「ada」モデルを使用してデータをベクトル化するように Weaviate に指示されます。try…catch
classObj
CLASS_NAME
.env
text2vec-openai
次に、メソッドチェーンを使用してスキーマを作成します。これにより、Weaviate サーバーにリクエストが送信され、 で定義されたドキュメント クラスが作成されます。スキーマが正常に作成された後、スキーマ オブジェクトをコンソールに記録し、メッセージを表示します。エラーは、コンソールに記録される単純なメッセージで処理されるようになりました。client.schema.classCreator().withClass(classObj).do()
classObj
created schema >>>
移行するダミーデータの長さを確認できます。空の場合、コードはここで終了します。. の場合、関数 (後で追加します) を使用してデータベースをクリアできます。deleteAllDocuments
shouldDeleteAllDocuments
true
最後に、関数 (次に追加します) を使用して、ベクトル化して Weaviate に保存するすべてのアイテムをアップロードします。addDocuments
ドキュメントを追加
テキストドキュメントをベクトル化してアップロードしてみましょう。これは実際には次の 2 段階のプロセスです。
- OpenAI Ada モデルを使用してベクトルに変換された生のテキスト文字列
- 変換されたベクターは Weaviate データベースにアップロードされます
ありがたいことに、これらは私たちが使用する Weaviate SDK によって自動的に処理されます。これを行うための関数を作成してみましょう。同じファイルを開いて以下を貼り付けます。src/database.js
// コードは上記の続きです
const addDocuments = async (data = []) => { const client = await setupClient(); letbatcher = client.batch.objectsBatcher(); カウンタ = 0 とします。const バッチサイズ = 100;
for (データの const ドキュメント) { const obj = { クラス: process.env.DATA_CLASSNAME,プロパティ: { ...ドキュメント }, };
batcher = batcher.withObject(obj);
if (counter++ == batchSize) {
await batcher.do();
counter = 0;
batcher = client.batch.objectsBatcher();
}
}
const res = 待機batcher.do();
応答を返します。
};
// ... コードは以下に続きます
前と同じように、ここで何が起こっているのかを分析してみましょう。
- まず、前に定義した関数を呼び出して、Weaviate クライアント インスタンスを設定および取得します。
setupClient()
- 次を使用してバッチ プロセッサを初期化します。
client.batch.objectsBatcher()
- また、カウンター変数と変数を定義し、100 に設定します。カウンタは、現在のバッチに追加されたドキュメントの数を追跡し、各バッチに含めるドキュメントの数を定義します。
batchSize
batchSize
- 次に、データ配列内の各ドキュメントを反復処理します。
- ドキュメントごとに、Weaviate が期待する形式でドキュメントを表すオブジェクトを作成し、オブジェクトのプロパティに展開できるようにします。
- 次に、使用します
batcher.withObject(obj)
- カウンタがバッチ サイズと等しい場合 (バッチがいっぱいであることを意味します)、バッチを Weaviate にアップロードし、カウンタを にリセットし、ドキュメントの次のバッチ用に新しいバッチ プロセッサを作成します。
batcher.do()
0
すべてのドキュメントが処理されてバッチに追加された後、アップロードされていない残りのバッチがある場合 (到着していないため)、「残りのバッチのアップロード」を使用できます。batchSize
batcher.do()
ここでの最後のステップは、関数が最後の呼び出しからの応答を返すときに発生します。この応答には、アップロードが成功したかどうかや発生したエラーなど、アップロードに関する詳細が含まれます。batcher.do()
基本的に、この関数は、大量のドキュメントを管理可能なバッチにグループ化することで、Weaviate インスタンスに効率的にアップロードするのに役立ちます。addDocuments()
文書を削除する
関数で使用するコードを追加しましょう。関数の下に次のコードを追加します。deleteAllDocuments
migrate
addDocuments
// コードは上記の続きです
async function deleteAllDocuments() { const client = await setupClient(); const ドキュメント = await client.graphql .get() .withClassName(process.env.DATA_CLASSNAME) .withFields("_Additional { id }") .do();
for (const document ofDocuments.data.Get[process.env.DATA_CLASSNAME]) { await client.data .deleter() .withClassName(process.env.DATA_CLASSNAME) .withId(document._Additional.id) .do(); } } // ... コードは以下に続きます
この関数は比較的単純です。
- クラス名を使用します
setupClient
id
Document
- 次に、ループを使用して各ドキュメントを削除します。
for
...
of
id
このアプローチは、データ量が少ないため機能します。大規模なデータベースの場合、リクエストあたりの制限は一度に 200 エントリのみであるため、すべてのドキュメントを削除する技術が必要です。batching
データベースにクエリ関数を追加する
データをデータベースにアップロードするメソッドができたので、データベースにクエリを実行する関数を追加しましょう。この例では、「最近傍検索」を実行して、クエリに類似したドキュメントを検索します。
同じファイルに以下を追加します。src/database.js
// コードは上記の続きです
async function NearTextQuery({ concepts = [""], fields = "text category", limit = 1, }) { const client = await setupClient(); const res = await client.graphql .get() .withClassName("Document") .withFields(fields) .withNearText({ 概念 }) .withLimit(limit) .do();
return res.data.Get[プロセス.env.DATA_CLASSNAME];
}
エクスポート { 移行、addDocuments、deleteAllDocuments、nearTextQuery };
もう一度、ここで何が起こっているのかを分析してみましょう。
nearTextQuery()
オブジェクトをパラメータとして受け取る非同期関数です。このオブジェクトには、次の 3 つのプロパティを含めることができます。
概念
: 検索している用語を表す文字列の配列- フィールド: 検索結果で返される内容を表す文字列
字段
。この例では、 from と field をリクエストします。text
category
限制
: 検索クエリから返される結果の最大数
- 関数を呼び出して Weaviate クライアント インスタンスを取得します
setupClient()
- 一連の方法を使用して GraphQL クエリを構築します。
client.graphql.get()
: GraphQL クエリを初期化します。.withClassName("Document")
: 「Documents」オブジェクト内で検索することを指定します。.withFields(fields):
結果としてどのフィールドを返すかを指定します.withNearText({ concepts })
: ここで魔法が起こります! Weaviate が意味的に類似した文書を検索するために使用する概念を指定します。.withLimit(limit)
: 返される結果の最大数を指定します。- 最後にクエリを実行します
.do()
- クエリからの応答は変数に格納され、次の行で返されます。
res
- 最後に、ここで定義されたすべての関数を他の場所で使用できるようにエクスポートします。
一言で言えば、この関数は、提供された用語に基づいて Weaviate インスタンス内で意味的に類似したドキュメントを検索するのに役立ちます。nearTextQuery()
次のセクションでクエリできるように、データを移行しましょう。ターミナルを開いて実行します。npm run start
"migrate"
ベクトル埋め込みと AI の組み合わせ
GPT-3 や ChatGPT などの大規模な言語モデルは、入力を処理して有用な出力を生成するように設計されており、このタスクには複雑な意味や単語とフレーズ間の関係を理解する必要があります。
これは、単語、文、さらには文書全体を高次元ベクトルとして表すことによって行われます。これらのベクトル間の類似点と相違点を分析することで、AI モデルは言語のコンテキスト、セマンティクス、さらにはニュアンスを理解することができます。
では、ベクトル データベースはどこから来たのでしょうか? ベクトル データベースを AI モデルのライブラリアンとして考えてみましょう。巨大な書籍ライブラリ (この場合はベクトル) では、AI モデルは特定のクエリに対して最も関連性の高い書籍を迅速に見つける必要があります。ベクター データベースは、これらの「書籍」を効率的に保存し、必要なときに迅速かつ正確に検索できるようにすることでこれを実現します。
これは多くの AI アプリケーションにとって重要です。たとえば、チャットボット アプリケーションでは、AI モデルはユーザーの質問に対して最も適切な回答を見つける必要があります。これは、ユーザーの質問と考えられる応答をベクトルに変換し、ベクトルのデータベースを使用してユーザーの質問に最も類似した応答を見つけることによって行われます。
これを念頭に置いて、上記のデータベースを使用して、AI モデル GPT-3.5 に独自のデータのコンテキストをフィードします。これにより、モデルはトレーニングされていないデータに関する質問に答えることができます。
AIモデルの設定
次のコマンドを実行して貼り付けて、新しいファイルを作成します。touch src/data.js
import { 構成, OpenAIApi } from "openai";
const 構成 = 新しい構成({ apiKey: process.env.OPENAI_API_KEY, }); const openai = 新しい OpenAIApi(構成);
async function getChatCompletion({ プロンプト, コンテキスト }) { const chatCompletion = await openai.createChatCompletion({ モデル: "gpt-3.5-turbo",メッセージ: [ { 役割: "システム",コンテンツ: , }, { 役割: "ユーザー", 内容: プロンプト }, ], });
You are a knowledgebase oracle. You are given a question and a context. You answer the question based on the context. Analyse the information from the context and draw fundamental insights to accurately answer the question to the best of your ability. Context: ${context}
chatCompletion.data.choices[0].message を返します。
}
エクスポート { getChatCompletion };
いつものように、ファイルを分解してみましょう。
- 必要なモジュールをパッケージからインポートし、インスタンスを初期化します。
openai
openai
- ヒントとコンテキストを受け取り、知識ベースのオラクルとして応答するように GPT-3.5 モデルを構成する関数を定義します。
getChatCompletion
- 最後に、応答を返し、関数をエクスポートします。
データをクエリする
ベクトル データベースと AI モデルをセットアップすると、最終的にこれら 2 つのシステムを組み合わせてデータをクエリできるようになります。埋め込みの強力な効果と GPT-3.5 の優れた自然言語機能を活用することで、より表現力豊かでカスタマイズ可能な方法でデータを操作できるようになります。
まず新しいファイルを作成して実行し、次の内容を貼り付けます。touch src/index.js
「dotenv」から { config } をインポートします。
import {nearTextQuery} から "./database.js";
import { getChatCompletion } から "./model.js";
config();
const queryDatabase = async (プロンプト) => { console.info( ); const questionContext = await NearTextQuery({ 概念: [プロンプト]、フィールド: "タイトル テキストの日付"、制限: 50, });
Querying database
const context = questionContext
.map((context, Index) => { const { title, text, date } = context; return ; }) .join("\n\n");
Document ${index + 1} Date: ${date} Title: ${title} ${text}
const aiResponse = await getChatCompletion({ プロンプト, コンテキスト });
aiResponse.content を返します。
};
const main = async () => { const コマンド = process.argv[2]; const params = process.argv[3];
switch (コマンド) { case "移行": return await 移行(params === "--delete-all"); case "クエリ": console.log(await queryDatabase(params)) を返します。デフォルト: // 何も中断しません。} };
主要();
このファイルには、コマンド ライン経由でデータをクエリできるようにするためにこれまでに行ったすべての作業がまとめられています。いつものように、ここで何が起こっているのかを見てみましょう。
- まず、必要なモジュールをインポートし、パッケージで環境変数を設定します。
dotenv
- 次に、テキスト ヒントを受け入れる関数を作成します。これは、ベクトル データベースに対して「ニアテキスト」クエリを実行するために使用します。結果を 50 件に制限し、コンセプトに一致するようにタイトル、テキスト、日付フィールドを特に要求しました。
queryDatabase
- これは基本的に、検索クエリ内の重要な用語と意味的に類似したドキュメントを返します (埋め込みは強力です!
- 次に、受信したコンテキストをマッピングしてフォーマットし、AI モデルに渡して補完を生成します。コンテキストを使用すると、GPT-3.5 の自然言語処理 (NLP) 機能が発揮され、データに基づいてより正確で意味のある応答を生成できるようになります。
- ようやく関数にたどり着きます。ここでは、コマンド ライン引数を使用してさまざまなタスクを実行します。合格した場合は、データを移行できます (スレートをクリーンアップして新たに開始したい場合に備えて、オプションのフラグを使用します)。それにより、クエリ関数をテストできます。
main
migrate
--delete-all
query
クエリをテストする
おめでとうございます。ここまでできたら、褒めてもらって当然です。いよいよコードをテストできるようになります。
ターミナルを開き、次のコマンドを実行します。
npm run start "query" "物語の中で人類が成し遂げた最も印象的な功績を 3 つ挙げてください。"
クエリは Weaviate ベクトル データベースに送信され、そこで他の類似ベクトルと比較され、テキストに基づいて最も類似した 50 個のベクトルが返されます。このコンテキスト データはフォーマットされ、クエリとともに OpenAI の GPT-3.5 モデルに送信され、そこで処理されて応答が生成されます。
すべてがうまくいけば、次のような応答が得られるはずです。
この架空の世界を自由に探索し、さらにクエリを作成したり、できれば独自のデータを持ち込んで、ベクトルとエンベディングの力を自分自身で目撃してください。
この時点でエラーが発生した場合は、ここでコードと最終バージョンを比較し、ファイルが作成され、データが設定されていることを確認してください。.env
結論と次のステップ
このチュートリアルでは、ベクトルとベクトル データベースの力について少し調べてきました。私たちは、Weaviate や GPT-3 などのツールを使用して、パーソナライズされたチャットボットの改善から機械学習アルゴリズムの強化に至るまで、AI アプリケーションを形成するこれらのテクノロジーの可能性を直接確認してきました。GitHub もぜひチェックしてください。
ただし、これはほんの始まりにすぎません。ベクトル データベースの操作について詳しく知りたい場合は、次のことを検討してください。
- より柔軟で効率的なデータの保存と取得のためのベクトル メタデータ、シャーディング、圧縮の使用などの高度な概念についての洞察を得る
- より豊かで微妙な結果を得るために、ベクトル埋め込みを AI アプリケーションに統合するためのより洗練されたアプローチを試してください。
最後までお付き合いいただきありがとうございました。時間を有効に活用できれば幸いです。
パフォーマンスを向上させたり、新しい機能を構築したりするために、新しい JS ライブラリを追加していますか? 彼らが逆のことをしたらどうなるでしょうか?
フロントエンドがますます複雑になっていることは間違いありません。新しい JavaScript ライブラリやその他の依存関係をアプリに追加するときは、ユーザーが未知の問題に遭遇しないように、可視性を高める必要があります。
LogRocket はフロントエンド アプリケーション監視ソリューションで、JavaScript エラーを自分のブラウザで発生したかのように再生できるため、より効率的に対応できます。
LogRocket は、フレームワークに関係なく、あらゆるアプリケーションで問題なく動作し、Redux、Vuex、および @ngrx/store のその他のコンテキストからログを記録するためのプラグインを備えています。問題が発生した理由を推測する代わりに、問題が発生したときのアプリケーションの状態を要約してレポートできます。LogRocket はアプリケーションのパフォーマンスも監視し、クライアントの CPU 負荷、クライアントのメモリ使用量などのメトリックをレポートします。