目次
現在、私たちはオープンソース フレームワーク Quivr を使用して独自のナレッジ ベースを構築しようとしています。公式ウェブサイトでは、Quivr を第 2 の脳として宣伝しており、生成人工知能の力を利用して非構造化情報を保存および取得します。AI 機能を備えた Obsidian のようなものと考えることができます。公式サイトの紹介絵柄を見ると、黒曜石から知恵の木が生えていて、その意味合いがすごいです。
Quivr の概要
Quivr は、高度な人工知能テクノロジーを使用して情報の生成と取得を支援し、テキスト、画像、コード スニペットなど、ほぼすべての種類のデータを処理できます。同時に、速度と効率にも重点を置き、データに迅速にアクセスできるようにします。データ セキュリティはお客様が管理できます。Quivr は、テキスト、Markdown、PDF、PowerPoint、Excel、Word、オーディオ、ビデオなどを含む複数のファイル形式をサポートしています。
Quivr の機能
- ユニバーサル データの受け入れ: Quivr は、投げ込まれるほぼすべての種類のデータを処理できます。テキスト、Markdown、PDF、PowerPoint、Excel、Word、オーディオ、ビデオなどが含まれます。
- 生成 AI: Quivr は高度な人工知能を使用して、情報の生成と取得を支援します。
- 高速かつ効率的: Quivr は速度と効率を中心に設計されているため、データへの高速アクセスを保証します。
- 安全: どのようなシナリオでも、いつでも、データはお客様の管理下にあります。
- オープンソース: オープンソース、無料。
Quivr デモ
GPT3.5 を使用したデモ:
次のビデオは、ChatGPT3.5 に基づくデモ デモンストレーションであり、ナレッジ ベースの構築と複数ラウンドの対話の質疑応答を示しています。https://user-images.githubusercontent.com/19614572/238774100-80721777-2313-468f-b75e-09379f694653.mp4
新バージョンのデモ:
以下の動画は、5月下旬に公開された操作UIを置き換えた最新バージョンのデモ動画です。次に、この新バージョンを使って独自のナレッジベースを構築してみます。https://user-images.githubusercontent.com/19614572/239713902-a6463b73-76c7-4bc0-978d-70562dca71f5.mp4
Quivr の動作中
Quiv で使用される主なテクノロジー
Quivr は、他のナレッジ ベース ソリューションと同様、基本的にプロンプトと大規模モデル間の対話に基づいています。Quivr で使用される主なテクノロジは次のとおりです。
- LLM:GPT3.5 / GPT4
- エンベディング:OpenAIエンベディング
- ベクトル知識ベース: Supabase
- Docker:Docker Compose
Quiv の実践次第
Quivr が Supabase ベクトル データベースを使用することを前述しました。その前に、Supabase アカウントを作成し、Supabase プロジェクト API キー、Supabase プロジェクト URL を取得し、いくつかの必要なテーブルを生成する必要があります。
Supabase プロジェクトを作成する
Supabase の公式 Web サイトのアドレスは: Dashboard | Supabase github アカウントをお持ちの場合は、GitHub アカウントで直接ログインできますが、お持ちでない場合は、他の方法で登録できます。プロジェクトの作成は比較的簡単で、作成時に有料と無料があり、直接売春を実践することができ、思い切って無料の方法を選択することができます。プロジェクトが作成されると、プロジェクトの関連構成が表示されます。必要なのは 2 番目の図でマークされているものです。後でこれらの情報を再度検索したい場合は、次のアドレスを使用できます: API 設定 | Supabase を選択するか、設定を入力するプロジェクトを問い合わせます。
Quiv プロジェクトをデプロイする
事前環境の準備ができたら、Quiv プロジェクトのデプロイを開始します。
最初のステップ: ソースコードが完成しました
git clone https://github.com/StanGirard/quivr.git && cd quivr
# 切换到 v0.0.4分支
git checkout v0.0.4
git checkout -b v0.0.4
ステップ 2: 環境変数を設定する
フロントエンド ディレクトリとバックエンド ディレクトリの環境変数を変更する必要があります。まず、ここに環境変数をコピーします。下の図は、作成したプロジェクトの設定に従ってローカルに置き換えたものですが、バックエンド ディレクトリの ANTHROPIC_API_KEY は Claude の設定なので、削除しても問題ありません。
cp .backend_env.example backend/.env
cp .frontend_env.example frontend/.env
3 番目のステップ: SQL を実行する
構成が完了したら、次のステップはデータベースを初期化することです。Supabase パネルを開き、下図に示すように SQL 実行ボックスをクリックして作成し、次の SQL コードを順番に実行します。
create extension vector;
-- Create a table to store your documents
create table if not exists documents (
id bigserial primary key,
content text, -- corresponds to Document.pageContent
metadata jsonb, -- corresponds to Document.metadata
embedding vector(1536) -- 1536 works for OpenAI embeddings, change if needed
);
CREATE FUNCTION match_documents(query_embedding vector(1536), match_count int)
RETURNS TABLE(
id bigint,
content text,
metadata jsonb,
-- we return matched vectors to enable maximal marginal relevance searches
embedding vector(1536),
similarity float)
LANGUAGE plpgsql
AS $$
# variable_conflict use_column
BEGIN
RETURN query
SELECT
id,
content,
metadata,
embedding,
1 -(documents.embedding <=> query_embedding) AS similarity
FROM
documents
ORDER BY
documents.embedding <=> query_embedding
LIMIT match_count;
END;
$$;
create table
stats (
-- A column called "time" with data type "timestamp"
time timestamp,
-- A column called "details" with data type "text"
chat boolean,
embedding boolean,
details text,
metadata jsonb,
-- An "integer" primary key column called "id" that is generated always as identity
id integer primary key generated always as identity
);
-- Create a table to store your summaries
create table if not exists summaries (
id bigserial primary key,
document_id bigint references documents(id),
content text, -- corresponds to the summarized content
metadata jsonb, -- corresponds to Document.metadata
embedding vector(1536) -- 1536 works for OpenAI embeddings, change if needed
);
CREATE OR REPLACE FUNCTION match_summaries(query_embedding vector(1536), match_count int, match_threshold float)
RETURNS TABLE(
id bigint,
document_id bigint,
content text,
metadata jsonb,
-- we return matched vectors to enable maximal marginal relevance searches
embedding vector(1536),
similarity float)
LANGUAGE plpgsql
AS $$
# variable_conflict use_column
BEGIN
RETURN query
SELECT
id,
document_id,
content,
metadata,
embedding,
1 -(summaries.embedding <=> query_embedding) AS similarity
FROM
summaries
WHERE 1 - (summaries.embedding <=> query_embedding) > match_threshold
ORDER BY
summaries.embedding <=> query_embedding
LIMIT match_count;
END;
$$;
ステップ 4: アプリケーションを起動する
前の手順の準備作業が完了したので、アプリケーションを起動できるようになります。docker のバージョンが低すぎる場合、エラーが表示され、docker を更新する必要があることに注意してください。誰もが自分のタイミングに合わせてバージョンアップすることができます。イメージをパッケージ化してアプリケーションを開始する必要があるため、このステップの開始には長い時間がかかります。
docker compose build && docker compose up
ステップ 5: 効果のデモンストレーション
ユーザーログイン:
ナレッジベースをアップロードします:
Q&A の Q&A プロンプトを変更する
次に、ナレッジ ベースで質問と回答を実行できます。現時点では、ソース コードはまだ英語の質問と回答をサポートしています。中国語を使用したい場合は、質問と回答のテンプレートを変更できます。(笑)、ファイル パスは次のとおりです。次のように: