RAG Arena เป็นโปรเจ็กต์โอเพ่นซอร์ส Next.js ที่สร้าง mendable.ai ของฉันซึ่งเชื่อมต่อกับ LangChain เพื่อมอบประสบการณ์แชทบอท RAG ที่การสืบค้นได้รับการตอบกลับหลายครั้ง ผู้ใช้โหวตให้กับคำตอบเหล่านี้ ซึ่งจะไม่เบลอเพื่อเปิดเผยรีทรีฟเวอร์ที่ใช้ โดยแยกแยะแชทบอทด้วยวิธี data 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
*(หากคุณไม่มีบทกวีเพียงเพิ่ม id โดยใช้ pip install บทกวี)
สำหรับ Graph Rag Retreat คุณจะต้องสร้าง Graph Store หรือปล่อยให้เซิร์ฟเวอร์เรียกใช้ฟังก์ชัน '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
เพื่อจัดเก็บเอกสารที่ประมวลผลใน Supabaseapp/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 ของเอกสาร โดยใช้ประโยชน์จากกลยุทธ์และเทคโนโลยีที่แตกต่างกันเพื่อเพิ่มประสิทธิภาพและความแม่นยำ
ยินดีบริจาค! โปรดปฏิบัติตามขั้นตอนการทำงานคำขอ fork & pull มาตรฐาน ตรวจสอบให้แน่ใจว่าคุณปฏิบัติตามรูปแบบและรูปแบบการเขียนโค้ดที่มีอยู่ในโปรเจ็กต์ และเขียนการทดสอบสำหรับคุณสมบัติใหม่หรือการแก้ไขข้อบกพร่อง
RAG Arena เป็นโอเพ่นซอร์สและเผยแพร่ภายใต้ใบอนุญาต MIT ดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม