{"id":51518005,"url":"https://github.com/ark2016/alfa-mfti-rag","last_synced_at":"2026-07-08T13:01:24.710Z","repository":{"id":365741227,"uuid":"1273532431","full_name":"ark2016/alfa-mfti-rag","owner":"ark2016","description":"Альфа-Банк × МФТИ — RAG по базе знаний (Recall-L). Пайплайн retrieval→rerank→HyDE→LoRA Qwen3.6-27B + разбор вырожденной метрики.","archived":false,"fork":false,"pushed_at":"2026-06-18T16:26:55.000Z","size":26,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-18T18:15:37.358Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ark2016.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-18T16:03:50.000Z","updated_at":"2026-06-18T16:26:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ark2016/alfa-mfti-rag","commit_stats":null,"previous_names":["ark2016/alfa-mfti-rag"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ark2016/alfa-mfti-rag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ark2016%2Falfa-mfti-rag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ark2016%2Falfa-mfti-rag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ark2016%2Falfa-mfti-rag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ark2016%2Falfa-mfti-rag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ark2016","download_url":"https://codeload.github.com/ark2016/alfa-mfti-rag/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ark2016%2Falfa-mfti-rag/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35265380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-08T02:00:06.796Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-08T13:01:23.783Z","updated_at":"2026-07-08T13:01:24.701Z","avatar_url":"https://github.com/ark2016.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RAG-ответы по базе знаний\n\nВопросно-ответная система над базой знаний alfabank.ru: по 6977 вопросам нужно сгенерировать ответы, опираясь на 1937 страниц сайта (`websites.csv`). Метрика — **Recall-L = BERTScore-Recall × штраф за длину**.\n\n## Идея решения\n\nПолный open-source RAG-пайплайн, целиком работающий на одной H100:\n\n1. **Чанкинг** страниц (~700 символов с перекрытием) → ~25 тыс. фрагментов.\n2. **Гибридный retrieval**: BM25 + плотные эмбеддинги `bge-m3` (FAISS), объединение кандидатов → top-100.\n3. **Реранкинг** кросс-энкодером `bge-reranker-v2-m3` → top-10.\n4. **HyDE**: LLM генерит гипотетический ответ и переформулировки запроса, затем повторный retrieval по расширенному набору поисковых строк и финальный реранк.\n5. **Генерация** — `Qwen3.6-27B` zero-shot через vLLM (ngram speculative decoding для скорости), reasoning-режим выключен, чтобы длинные `\u003cthink\u003e`-блоки не раздували длину. В коде предусмотрена опциональная ветка дообучения лёгкой 9B-модели (LoRA-SFT для формы ответа и детекции «нет ответа») с каскадным объединением её с 27B (скрипты `06`–`07` и `orchestrate` в постобработке); финальные ответы получены на 27B без дообучения.\n6. **Постобработка**: answerability-гейт по score реранкера, нормализация формулировок отказа, срез по длине, чистка разметки.\n\nВсе модели open-source (Qwen — Apache 2.0; bge). Бюджет первого прогона на H100 — около $7.\n\n## Что важно для качества\n\nМетрика поощряет полноту ответа и штрафует избыточную длину — отсюда инженерные приоритеты пайплайна:\n\n- высокая полнота за счёт гибридного retrieval (BM25 + dense) и реранкинга, плюс HyDE для «кривых» формулировок;\n- контроль длины ответа в постобработке (срез по длине, smart-truncate);\n- отказ «Нет ответа» только тогда, когда retrieval действительно не дал релевантных фрагментов.\n\n## Запуск\n\nНа H100 (Ubuntu 22.04, CUDA 12.4+):\n\n```bash\nbash setup_env.sh\nsource .venv/bin/activate\n\npython src/01_chunk.py\npython src/02_build_indexes.py\npython src/03_retrieve.py\npython src/04_rerank.py\npython src/05_query_rewrite_hyde.py\npython src/05b_retrieve_hyde.py\npython src/04_rerank.py             # повторный реранк по hyde-расширенным кандидатам\npython src/06_prepare_lora_data.py\npython src/07_train_lora.py\npython src/08_inference.py\npython src/09_postprocess.py        # → artifacts/submission.csv\n```\n\nПути и модели переопределяются через ENV (см. `src/config.py`): `GENERATOR_MODEL`, `ENSEMBLE_BIG_MODEL`, `EMBEDDER_MODEL`, `TAU_RERANK`, `ENABLE_THINKING`. `run_chain.sh` запускает хвост пайплайна (с повторного реранка 04) одной командой.\n\n## Соответствие ТЗ\n\n- Только open-source модели и библиотеки (Qwen, bge, FlagEmbedding, vLLM, PEFT/TRL).\n- В качестве знаний — предоставленная база (`websites.csv`), внешних источников нет.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fark2016%2Falfa-mfti-rag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fark2016%2Falfa-mfti-rag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fark2016%2Falfa-mfti-rag/lists"}