ΠΠ΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΡΠΎΠΈΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π³ΡΠ°Ρ Π·Π½Π°Π½ΠΈΠΉ ΠΈΠ· PDF-ΡΡΠ΅Π±Π½ΠΈΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ LLM, Π° Π·Π°ΡΠ΅ΠΌ Π΄Π°ΡΡ Π°Π΄Π°ΠΏΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ GraphRAG-ΠΎΡΠ²Π΅ΡΡ ΠΏΠΎ Π³ΡΠ°ΡΡ.
- Π‘ΡΡΠ΄Π΅Π½Ρ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΏΡΠΎΡΠΈΠ»Ρ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Ρ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ PDF-ΡΡΠ΅Π±Π½ΠΈΠΊ.
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΎΠ½ΡΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π΄ΡΠ±Π»ΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΌΠ±Π΅Π΄Π΄ΠΈΠ½Π³ΠΈ (ΡΡΡΠΎΠ³ΠΎ Π²Π½ΡΡΡΠΈ ΡΠΈΠΏΠ°).
- ΠΡΠ°Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ: ΡΠ²Π΅Ρ ΡΠ·Π»Π° β ΡΠΈΠΏ ΡΡΡΠ½ΠΎΡΡΠΈ (ΠΈΠ· ΠΎΠ½ΡΠΎΠ»ΠΎΠ³ΠΈΠΈ), ΠΊΠΎΠ»ΡΡΠΎ β
ΡΡΠ°ΡΡΡ ΡΡΠ²ΠΎΠ΅Π½ΠΈΡ (ΠΊΠ°ΡΠΊΠ°Π΄Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΠΎ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΠΎΠΌΡ
REQUIRES). - Π’Π΅ΡΡΡ ΠΏΠΎ ΡΠ·Π»Π°ΠΌ ΠΈ GraphRAG-ΡΠ΅ΠΆΠΈΠΌ Ρ ΠΎΡΠ²Π΅ΡΠ°ΠΌΠΈ ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ Π³ΡΠ°ΡΠ° ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ ΠΎΠ±Ρ ΠΎΠ΄Π°.
ΠΠ½ΡΠΎΠ»ΠΎΠ³ΠΈΡ β ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅, Π° Π½Π΅ ΠΊΠΎΠ΄: ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½Ρ Π²
backend/app/ontology/ontology.yaml.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° = ΡΡΡΠΎΠΊΠ° Π² YAML + python scripts/sync_ontology.py.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ° β Π² knowledge_graph_analytics.md, ΡΡΡΡΠΊΡΡΡΠ° backend β Π² backend/CONTEXT.md.
- Backend: Python 3.12, FastAPI, async SQLAlchemy, PostgreSQL 16 + pgvector
- LLM: httpx β OpenAI-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ endpoint (Π±Π΅Π· SDK; ΡΠ΅ΠΉΡΠ°Ρ Π·Π° Π½ΠΈΠΌ Gemini)
- ΠΠ½ΡΠΎΠ»ΠΎΠ³ΠΈΡ: YAML β Pydantic; ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π² ΠΠ ΡΠΊΡΠΈΠΏΡΠΎΠΌ
- ΠΠΌΠ±Π΅Π΄Π΄ΠΈΠ½Π³ΠΈ: sentence-transformers (multilingual)
- PDF: pymupdf4llm (ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ LaTeX-ΡΠΎΡΠΌΡΠ»Ρ)
- Frontend: React 19 + TypeScript + Vite, react-force-graph-2d, KaTeX, Zustand
-
Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅
.env.exampleΠ².envΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅GEMINI_API_KEY,LLM_MODEL,POSTGRES_PASSWORD.cp .env.example .env
-
ΠΠΎΠ΄Π½ΠΈΠΌΠΈΡΠ΅ Π²Π΅ΡΡ ΡΡΠ΅ΠΊ:
docker-compose up -d
ΠΠΎΠ³ΠΈ (backend):
docker-compose logs -f backendΠΠ΅ΡΠ΅ΡΠΎΠ±ΡΠ°ΡΡ:
docker-compose up -d --build backend 2>&1 | tail -4-
ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΠ΅ backend (ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·):
docker-compose exec backend alembic upgrade head docker-compose restart backendΠΠ½ΡΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π² ΠΠ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ backend (ΡΠ°Π±Π»ΠΈΡΠ°
entitiesΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π°entity_typesΠΏΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌΡ ΠΊΠ»ΡΡΡ). ΠΠΎΠΊΠ°Π»ΡΠ½ΠΎ (Π±Π΅Π· Docker) ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡpython scripts/sync_ontology.py.
- Backend: http://localhost:8000 (Swagger:
/docs) - Frontend: http://localhost:3000
# Backend
cd backend
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
# Frontend
cd frontend
npm install
npm run dev# Π‘ΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ½ΡΠΎΠ»ΠΎΠ³ΠΈΡ ΠΈΠ· YAML Π² ΠΠ (ΠΏΠΎΡΠ»Π΅ ΠΏΡΠ°Π²ΠΎΠΊ ontology.yaml)
python scripts/sync_ontology.py
# ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΡΡΠ΅Π±Π½ΠΈΠΊ Π² ΠΠ (ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΉ ΠΏΡΠΎΠ³ΠΎΠ½ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°; profile ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π΅Π½)
python scripts/seed_test_book.py path/to/book.pdf "ΠΠ°Π·Π²Π°Π½ΠΈΠ΅" math
# ΠΡΠ΅Π½ΠΈΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ Π³ΡΠ°ΡΠ° ΠΏΡΠΎΡΠΈΠ² ΡΡΠ°Π»ΠΎΠ½Π° (precision/recall/F1 ΠΏΠΎ ΡΠΈΠΏΠ°ΠΌ)
python scripts/eval_graph_quality.py <book_id> path/to/gold.json