RAG Arena は、LangChain と連携してクエリが複数の応答を受け取る RAG チャットボット エクスペリエンスを提供する、私の mendable.ai を作成したオープンソースの Next.js プロジェクトです。ユーザーはこれらの応答に投票し、ぼかしを解除して使用したレトリバーを明らかにし、データ RAG メソッドによってチャットボットを区別します。このプロジェクトはデータベース操作に Supabase を利用しており、データベースからのデータを表示するリアルタイム リーダーボードを備えています。
システムにpnpm
がインストールされていることを確認してください。そうでない場合は、次の方法でインストールします。
npm install -g pnpm
プロジェクト リポジトリのクローンを作成します。
git clone https://github.com/mendableai/rag-arena
プロジェクト ディレクトリに移動し、依存関係をインストールします。
cd RAG-arena
pnpm i
環境変数を構成します。
# probably in: https://platform.openai.com/api-keys
OPENAI_API_KEY=
# probably in: https://supabase.com/dashboard/ project>project settings>api
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PRIVATE_KEY=
# probably in: https://console.upstash.com/redis/
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=
PRODUCTION=false
PYTHON_MICRO_SERVER=
開発 (nextjs) Web サーバーを開始します。
pnpm dev
cd python_service
poetry install
* (詩がない場合は、pip install 詩を使用して ID を追加してください)
Graph Rag レトリーバーの場合は、グラフ ストアを構築するか、次の行のコメントを解除してサーバーに「create_neo4j_graph_store」関数 ( /python_service/retrievers/neo4j_retriever.py
にローカライズされている) を自動的に実行させる必要があります。
# if not os.path.exists(storage_dir) or not os.listdir(storage_dir):
# create_neo4j_graph_store()
data/chunks
で使用されるデータによっては、これには時間がかかります。最後に、 neo/storage
ディレクトリにグラフ ストアの永続化データがローカルに設定されます。
Graph RAG を使用できるようにするには、インデックスをロードしてキャッシュする必要があります。 load_index()
関数は、 python_service/app.py
内でこれを行います。そのため、最初の実行では、 python_service/index/cache
にキャッシュされた .pkl ファイルを作成するのに時間がかかることがあります。
poetry run flask run --debug
ブラウザで http://localhost:3000 を開いて結果を確認します。
app/api/ingest/route.ts
RecursiveCharacterTextSplitter
利用して効果的なテキスト分割を行います。OpenAIEmbeddings
を利用してドキュメントの埋め込みを生成します。SupabaseVectorStore
を使用します。app/api/retrievers/dynamic-retriever/route.ts
actions/voting-system.ts
// calculation used for the elo
function calculateEloAdjustment(timesTested: number, averageTimesTested: number): number {
if (averageTimesTested === 0) return 10;
const adjustmentFactor = timesTested / averageTimesTested;
return (1 / adjustmentFactor) * 10;
}
id
、 retriever
、 elo
、 votes
、 times_tested
、 full_name
、 description
、およびlink
を含む、各取得者の重要なデータを保持します。 (https://js.langchain.com/docs/modules/data_connection/retrievers/)
このセクションではapp/api/retrievers/dynamic-retriever/tools/functions.ts
で定義されているさまざまな RAG 関数の概要を説明し、プロジェクトのアーキテクチャ内でのその目的と実装について詳しく説明します。これらの機能はドキュメント RAG プロセスで重要な役割を果たし、さまざまな戦略とテクノロジーを活用してパフォーマンスと精度を最適化します。
貢献は大歓迎です!標準のフォークとプルリクエストのワークフローに従ってください。プロジェクトに存在するコーディング スタイルとパターンを必ず遵守し、新機能やバグ修正のテストを作成してください。
RAG Arena はオープンソースであり、MIT ライセンスに基づいてリリースされています。詳細については、LICENSE ファイルを参照してください。