RAG Arena هو مشروع Next.js مفتوح المصدر جعل my mendable.ai يتفاعل مع LangChain لتوفير تجربة chatbot لـ RAG حيث تتلقى الاستعلامات استجابات متعددة. يصوت المستخدمون على هذه الردود، والتي يتم بعد ذلك إزالة التشويش عنها للكشف عن المسترد المستخدم، مما يؤدي إلى التمييز بين روبوتات الدردشة من خلال أساليب 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):
pnpm dev
cd python_service
poetry install
*(إذا لم يكن لديك شعر، فما عليك سوى إضافة المعرف باستخدام pip install hair)
بالنسبة إلى مسترد 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
. لذا، في عملية التنفيذ الأولى، قد يستغرق الأمر بعض الوقت لإنشاء ملف .pkl المخزن مؤقتًا والموجود في python_service/index/cache
.
poetry run flask run --debug
افتح http://localhost:3000 باستخدام متصفحك لترى النتيجة.
app/api/ingest/route.ts
RecursiveCharacterTextSplitter
من LangChain لتقسيم النص بشكل فعال.OpenAIEmbeddings
لإنشاء عمليات تضمين المستندات.SupabaseVectorStore
لتخزين المستندات المعالجة في 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
، link
. (https://js.langchain.com/docs/modules/data_connection/retrievers/)
يوضح هذا القسم وظائف RAG المختلفة المحددة في app/api/retrievers/dynamic-retriever/tools/functions.ts
، مع توضيح غرضها وتنفيذها ضمن بنية المشروع. تلعب هذه الوظائف دورًا حاسمًا في عملية RAG للمستندات، حيث تستفيد من الاستراتيجيات والتقنيات المختلفة لتحسين الأداء والدقة.
المساهمات هي موضع ترحيب! يرجى اتباع سير عمل طلب الشوكة والسحب القياسي. تأكد من الالتزام بأنماط وأنماط الترميز الموجودة في المشروع واكتب اختبارات للميزات الجديدة أو إصلاحات الأخطاء.
RAG Arena مفتوح المصدر وتم إصداره بموجب ترخيص MIT. راجع ملف الترخيص لمزيد من المعلومات.