RAG Arena adalah proyek open-source Next.js yang dibuat oleh saya mendable.ai yang berinteraksi dengan LangChain untuk memberikan pengalaman chatbot RAG di mana pertanyaan menerima banyak tanggapan. Pengguna memberikan suara pada respons ini, yang kemudian tidak diburamkan untuk mengungkap Retriever yang digunakan, membedakan chatbot berdasarkan metode RAG datanya. Proyek ini menggunakan Supabase untuk operasi basis data dan menampilkan papan peringkat waktu nyata yang menampilkan data dari basis data.
Pastikan Anda telah menginstal pnpm
di sistem Anda. Jika tidak, instal melalui:
npm install -g pnpm
Kloning repositori proyek:
git clone https://github.com/mendableai/rag-arena
Arahkan ke direktori proyek dan instal dependensi:
cd RAG-arena
pnpm i
Konfigurasikan variabel lingkungan Anda:
# 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=
Mulai server web pengembangan (nextjs):
pnpm dev
cd python_service
poetry install
*(jika tidak punya puisi tambahkan saja id menggunakan pip install puisi)
Untuk Graph Rag retriever, Anda harus membuat penyimpanan grafik, atau membiarkan server secara otomatis menjalankan fungsi 'create_neo4j_graph_store' (dilokalkan di /python_service/retrievers/neo4j_retriever.py
) dengan menghapus komentar pada baris:
# if not os.path.exists(storage_dir) or not os.listdir(storage_dir):
# create_neo4j_graph_store()
Ini akan memakan waktu cukup lama tergantung pada data yang digunakan dalam data/chunks
. Pada akhirnya, direktori neo/storage
Anda akan diisi dengan data yang disimpan untuk penyimpanan grafik secara lokal.
Anda perlu memuat indeks dan menyimpan cache agar Graph RAG dapat digunakan. Fungsi load_index()
melakukan itu untuk Anda di dalam python_service/app.py
. Jadi dalam eksekusi pertama Anda mungkin perlu beberapa saat untuk membuat file .pkl yang di-cache ditempatkan di python_service/index/cache
.
poetry run flask run --debug
Buka http://localhost:3000 dengan browser Anda untuk melihat hasilnya.
app/api/ingest/route.ts
RecursiveCharacterTextSplitter
dari LangChain untuk pemisahan teks yang efektif.OpenAIEmbeddings
untuk menghasilkan penyematan dokumen.SupabaseVectorStore
untuk menyimpan dokumen yang diproses di Supabase.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
, dan link
. (https://js.langchain.com/docs/modules/data_connection/retrievers/)
Bagian ini menguraikan berbagai fungsi RAG yang ditentukan dalam app/api/retrievers/dynamic-retriever/tools/functions.ts
, merinci tujuan dan implementasinya dalam arsitektur proyek. Fungsi-fungsi ini memainkan peran penting dalam proses RAG dokumen, memanfaatkan berbagai strategi dan teknologi untuk mengoptimalkan kinerja dan akurasi.
Kontribusi dipersilakan! Harap ikuti alur kerja permintaan garpu & tarik standar. Pastikan Anda mematuhi gaya dan pola pengkodean yang ada dalam proyek dan menulis tes untuk fitur baru atau perbaikan bug.
RAG Arena bersifat open source dan dirilis di bawah Lisensi MIT. Lihat file LISENSI untuk informasi lebih lanjut.