RAG Arena — это проект Next.js с открытым исходным кодом, созданный мной mendable.ai, который взаимодействует с LangChain, обеспечивая работу чат-бота RAG, где запросы получают несколько ответов. Пользователи голосуют за эти ответы, которые затем размыты, чтобы показать используемый Retriever, различая чат-ботов по их методам 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 поэзию)
Для средства извлечения 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/retievers/)
В этом разделе описываются различные функции RAG, определенные в app/api/retrievers/dynamic-retriever/tools/functions.ts
, с подробным описанием их назначения и реализации в архитектуре проекта. Эти функции играют решающую роль в процессе RAG документов, используя различные стратегии и технологии для оптимизации производительности и точности.
Вклады приветствуются! Пожалуйста, следуйте стандартному рабочему процессу запроса на вилку и включение. Убедитесь, что вы придерживаетесь стилей и шаблонов кодирования, присутствующих в проекте, и пишите тесты для новых функций или исправлений ошибок.
RAG Arena имеет открытый исходный код и распространяется под лицензией MIT. Дополнительную информацию смотрите в файле LICENSE.