RAG Arena é um projeto Next.js de código aberto feito my mendable.ai que faz interface com LangChain para fornecer uma experiência de chatbot RAG onde as consultas recebem múltiplas respostas. Os usuários votam nessas respostas, que são então desfocadas para revelar o Retriever utilizado, diferenciando os chatbots por seus métodos RAG de dados. O projeto utiliza Supabase para operações de banco de dados e apresenta um placar em tempo real exibindo dados do banco de dados.
Certifique-se de ter pnpm
instalado em seu sistema. Caso contrário, instale-o via:
npm install -g pnpm
Clone o repositório do projeto:
git clone https://github.com/mendableai/rag-arena
Navegue até o diretório do projeto e instale as dependências:
cd RAG-arena
pnpm i
Configure suas variáveis de ambiente:
# 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=
Inicie o servidor web de desenvolvimento (nextjs):
pnpm dev
cd python_service
poetry install
*(se você não tem poesia basta adicionar id usando pip install poet)
Para o Graph Rag retriever, você precisará construir o armazenamento do gráfico ou deixar o servidor executar automaticamente a função 'create_neo4j_graph_store' (localizada em /python_service/retrievers/neo4j_retriever.py
) descomentando as linhas:
# if not os.path.exists(storage_dir) or not os.listdir(storage_dir):
# create_neo4j_graph_store()
Isso demorará um pouco dependendo dos dados usados em data/chunks
. No final, você terá seu diretório neo/storage
preenchido com dados persistentes para o armazenamento gráfico local.
Você precisará do índice carregado e armazenado em cache para que o Graph RAG possa ser usado. A função load_index()
faz isso para você dentro de python_service/app.py
. Portanto, em sua primeira execução, pode demorar um pouco para criar o arquivo .pkl em cache colocado em python_service/index/cache
.
poetry run flask run --debug
Abra http://localhost:3000 com seu navegador para ver o resultado.
app/api/ingest/route.ts
RecursiveCharacterTextSplitter
do LangChain para divisão de texto eficaz.OpenAIEmbeddings
para gerar embeddings de documentos.SupabaseVectorStore
para armazenar os documentos processados no 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
e link
. (https://js.langchain.com/docs/modules/data_connection/retrievers/)
Esta seção descreve as diversas funções RAG definidas em app/api/retrievers/dynamic-retriever/tools/functions.ts
, detalhando sua finalidade e implementação dentro da arquitetura do projeto. Estas funções desempenham um papel crucial no processo RAG de documentos, aproveitando diferentes estratégias e tecnologias para otimizar o desempenho e a precisão.
Contribuições são bem-vindas! Siga o fluxo de trabalho padrão de solicitação de fork e pull. Certifique-se de seguir os estilos e padrões de codificação presentes no projeto e escrever testes para novos recursos ou correções de bugs.
RAG Arena é de código aberto e lançado sob a licença MIT. Consulte o arquivo LICENSE para obter mais informações.