Демо-стенд під ваше ТЗ: aiogram 3 · LangChain · ChromaDB · SQLite · Gemini / GPT-4o-mini. Діалог і цифри нижче — приклад на згенерованих даних, щоб показати формат результату.
Під кожною відповіддю бот (у режимі налагодження) показує, з якого фрагмента FAQ взято відповідь і його схожість. Ескалація спрацьовує за двома сигналами: модель сама каже «не знаю» (структурована відповідь) або найкраща схожість нижче порогу. Обидва сигнали пишуться в лог, тож у дипломі видно, що саме спрацювало.
chatbot/ ├─ config.py # pydantic-settings, усе з .env ├─ bot/ │ ├─ main.py # запуск aiogram 3, Dispatcher │ ├─ handlers.py # /start, повідомлення, «оператор» │ └─ escalation.py # пересилання історії в ADMIN_CHAT_ID ├─ database/ │ ├─ models.py # SQLite: users, messages │ └─ repo.py # історія, останні N повідомлень ├─ llm_chain/ │ ├─ chain.py # LangChain: system + RAG + 3-5 повідомлень │ ├─ memory.py # обрізка / стиснення старих реплік │ └─ metrics.py # tokens, latency → app.log ├─ rag_pipeline/ │ ├─ ingest.py # .txt/.pdf → чанки → ембединги → Chroma │ └─ retriever.py # top-k + поріг схожості ├─ analysis/ │ ├─ eval_set.jsonl # 30-50 питань з еталонними відповідями │ ├─ run_eval.py # точність, частка ескалацій, порівняння │ └─ plots.py # графіки з app.log для тексту диплому ├─ data/faq.txt # тестова база знань ├─ .env.example · requirements.txt · README.md
Каталог analysis/ не входить у ваше ТЗ — це те, що перетворює лог на розділ «Експериментальні результати».
Рядок логу (один JSON на запит, через стандартний logging, легко читається pandas):
Конфігурація перемикається в .env, скрипт проганяє один і той самий набір питань і будує таблицю. Значення нижче — ілюстрація формату, реальні цифри отримаєте на своїй базі знань.
| Конфігурація | Точність | Ескалації | Latency p50 | Токенів / запит |
|---|
Демо підготовлено під проєкт на Freelancehunt. Текст диплому ми не пишемо: робимо інженерну частину і пояснюємо її так, щоб ви захищали її самостійно.