RAG Arena는 쿼리가 여러 응답을 받는 RAG 챗봇 경험을 제공하기 위해 LangChain과 인터페이스하는 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) 웹 서버를 시작합니다:
pnpm dev
cd python_service
poetry install
*(시가 없으면 pip install poem을 사용하여 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 파일을 참조하세요.