Zestaw narzędzi do eksperymentów z Retrieval-Augmented Generation (RAG) oparty na skrypcie rag.py. Repozytorium zawiera gotowy skrypt instalacyjny install.sh oraz dopasowany Makefile, które w kilka sekund przygotowują środowisko uruchomieniowe i dostarczają wygodne cele (install, run, clean).
python3 i venvNadaj plikowi uprawnienia wykonywalne:
chmod +x install.sh
Uruchom skrypt:
./install.sh
Skrypt:
.venv),pip,transformers==4.46.2, tokenizers==0.20.3, sentence-transformers==2.6.1, faiss-cpu==1.13.2, torch==2.10.0, PyPDF2==3.0.1, python-docx==1.2.0, html2text==2025.4.15, python-dotenv==1.0.1).Po zakończeniu aktywuj środowisko komendą source .venv/bin/activate.
Uwaga: jeśli pracujesz na starszej dystrybucji, upewnij się, że masz zainstalowane
build-essential,rustcorazcargo; nowe paczki powinny jednak instalować się z gotowych kółek (wheels) i nie wymagać kompilacji.
docs/Repozytorium zawiera katalog docs/ z wieloma formatami, które możesz wykorzystać do szybkiego testu pipeline’u:
readme.txt – tekstowe wprowadzenie do korpusu.faq.md – markdown z najczęstszymi pytaniami.support.html – prosty dokument HTML do sprawdzenia ekstrakcji z treści webowych.schedule.csv – tabela z harmonogramem zadań.config.json – przykładowa konfiguracja indeksowania.meeting_notes.docx – notatki ze spotkania w formacie Word.overview.pdf – krótki PDF opisujący demo Bolmo RAG.Aby uruchomić demo na tych danych:
make run FOLDER=./docs QUERY="Co zawiera pakiet demo?"
Wyniki, z cytowaniem źródeł:
$ make run
CUDA_HOME=/usr/local/cuda .venv/bin/python rag.py --folder ./docs --query "Co to jest Bolmo?" --k 5
[rag] Ładowanie dokumentów z ./docs...
[rag] Załadowano 7 plików.
[rag] Chunkowanie dokumentów...
[rag] Chunkowanie zakończone – 7 fragmentów.
[rag] Ładowanie embeddera all-MiniLM-L6-v2...
[rag] Ładowanie istniejącego indexu FAISS...
[rag] Retrieval – wyszukiwanie 5 fragmentów...
[rag] Pobrano 5 fragmentów kontekstu.
[rag] Ładowanie modelu allenai/Bolmo-1B na urządzeniu cuda...
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<00:00, 90.62it/s]
[rag] Generowanie odpowiedzi...
[1] support.html
# Kontakt zespołem Bolmo
Napisz do nas na [help@bolmo.ai](mailto:help@bolmo.ai), aby uzyskać wsparcie.
* Aktualizacje produktu w każdy wtorek
* Wsparcie 24/7 dla klientów enterprise
[2] faq.md
# Najczęstze pytania
## Czym jest Bolmo?
Bolmo to przykład systemu wspomagającego analizę dokumentów w modelu RAG.
## Jak korzystać z próbek?
Ustaw `FOLDER=./docs` podczas wywołania `make run`, aby przetestować pipeline na zróżnich plikach.
[3] overview.pdf
Bolmo RAG DemoTen PDF ilustruje obsÅ ugÄ plików binarnych w pipeline.Możesz zastÄ piÄ go wÅ asnymi materiaÅ ami referencyjnymi.
[4] readme.txt
Bolmo RAG Sample Corpus
===============================
To demo the pipeline, point the --folder flag to this directory.
It contains multiple document formats that mirror real-world inputs.
[5] meeting_notes.docx
Spotkanie: Harmonogram wdrożeń
Ustalenia: Przygotować demo dla zespołu sprzedaży.
.envSklonuj plik wzorcowy i ustaw zmienną:
cp .env.example .env
Otwórz .env i ustaw:
BOLMO_MODEL – model generatywny (domyślnie allenai/Bolmo-1B). Jeśli masz zasoby GPU, możesz przełączyć na allenai/Bolmo-7B.BOLMO_EMBEDDER – sentence-transformer do częśći retrieval (domyślnie all-MiniLM-L6-v2). Możesz wskazać np. sentence-transformers/all-mpnet-base-v2.Skrypt rag.py ładuje .env automatycznie dzięki python-dotenv, więc każda zmiana wartości jest widoczna przy kolejnym uruchomieniu make run.
Makefile udostępnia zestaw celów:
make install # tworzy .venv poprzez install.sh
make run FOLDER=./docs QUERY="?" # uruchamia rag.py z parametrami
make test # uruchamia pytest
make clean # usuwa katalog .venv
make docker-build # buduje obraz Dockera bolmo-rag
make docker-run FOLDER=... QUERY=... # buduje i uruchamia obraz z zamontowanymi docs/.env
make docker-shell # wchodzi do python:3.11 z repo pod /app
make docker-up / docker-logs / docker-stop # zarządza kontenerem w tle
.venv/bin/activate; jeżeli środowisko nie istnieje, uruchamia install.sh i tworzy plik znacznika w katalogu .venv.make install), a następnie uruchamia rag.py z przekazanymi argumentami --folder oraz --query.pytest, aby sprawdzić podstawowe wczytywanie dokumentów..venv, pozwalając rozpocząć instalację od zera.requirements.txt.docs/ i plikiem .env, dzięki czemu można zmieniać korpusy bez przebudowy obrazu.python:3.11 z repozytorium zamontowanym pod /app; idealne do ręcznego testowania pip install -r requirements.txt && make run ... w kontrolowanym środowisku.bolmo-rag-run),docker-up.Zbuduj obraz i odpal pipeline w tle:
make docker-up FOLDER=./docs QUERY="Co to jest Bolmo?"
Podejrzyj logi na żywo (działa jak docker logs -f):
make docker-logs
Po zakończeniu zatrzymaj kontener:
make docker-stop
Jeżeli chcesz jedynie wejść w interaktywnego basha w obrazie referencyjnym, uruchom make docker-shell, a następnie w kontenerze wykonaj python -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt && make run ....
runmake run FOLDER=./docs QUERY="Co to jest Bolmo?"
Zmodyfikuj wartości FOLDER i QUERY, aby wskazać własny zbiór dokumentów oraz pytanie kierowane do modułu RAG.
Jeśli chcesz upewnić się, że pracujesz na świeżej konfiguracji, wykonaj kolejno:
make clean # usuwa poprzednią virtualenv
make install # ponownie tworzy środowisko i instaluje zależności
make run FOLDER=./docs QUERY="Co to jest Bolmo?" # uruchamia RAG na próbkach z docs/
Pierwsze dwa kroki gwarantują czyste środowisko, a trzeci demonstruje pełne wywołanie pipeline’u na przykładowej kolekcji.
rag.py (lub alternatywny skrypt, np. bolmo_rag.py) o własne logiki indeksowania czy interfejs CLI. Makefile i struktura środowiska są gotowe na kolejne rozszerzenia.Powodzenia w pracy z Bolmo RAG!
A simple Retrieval-Augmented Generation (RAG) system for processing documents and answering queries based on their content.
Bolmo RAG allows you to index documents in a specified folder and query them using natural language. It supports three retrieval backends:
faiss (default): FAISS with persistent cache in FOLDER/.rag_cache (fast repeated runs)faiss_nocache: baseline, rebuilds chunks/embeddings/index on every runqdrant: Qdrant vector database (ingest + query)To set up the environment and install dependencies:
make install
Expected Outcome: This will create a virtual environment and install all necessary packages. You should see the installation process complete with a message indicating the environment is ready.
Build cache once, then query:
make index BACKEND=faiss FOLDER=./docs
make run BACKEND=faiss FOLDER=./docs QUERY="Czym jest Bolmo?" K=5
Indexing requirements depend on the backend:
faiss: indexing is persisted in FOLDER/.rag_cache (use make index or make reindex)faiss_nocache: no separate indexing step (everything is built on the fly)qdrant: requires ingest into a Qdrant collection (use make reindex BACKEND=qdrant or start Qdrant manually + make index BACKEND=qdrant)make index BACKEND=faiss FOLDER=./docs
Expected Outcome: The system will process all supported document types in the specified folder, create chunks, and build a FAISS index. You should see a message like Cache/index gotowy. indicating the index is ready.
To force rebuild:
make reindex BACKEND=faiss FOLDER=./docs
No separate indexing step. Just run:
make run BACKEND=faiss_nocache FOLDER=./docs QUERY="Czym jest Bolmo?" K=5
make reindex BACKEND=qdrant FOLDER=./docs
Expected Outcome: Similar to FAISS, but the system will (via make reindex) attempt to start a local Qdrant container named qdrant-server and then ingest the document chunks into a Qdrant collection. You should see Ingest do Qdrant zakończony. upon completion.
Note: Ensure Docker is installed and running for Qdrant backend.
After indexing (if required), you can query the documents:
.venv/bin/python rag.py --backend faiss --folder ./docs --query "Czym jest Bolmo?"
Expected Outcome: The system will retrieve relevant document chunks and generate an answer based on the context using the Bolmo model. The response will be in Markdown format with citations to the source documents.
.venv/bin/python rag.py --backend qdrant --folder ./docs --query "Czym jest Bolmo?" --k 5
Expected Outcome: Same as above, but uses Qdrant for retrieval if the collection exists.
If documents change or you want to force a rebuild of the index:
make reindex BACKEND=faiss FOLDER=./docs
or for Qdrant:
make reindex BACKEND=qdrant FOLDER=./docs
Expected Outcome: The cache and index will be rebuilt from scratch, reflecting any changes in the documents.
The default interface is via make:
make install
make run BACKEND=faiss FOLDER=./docs QUERY="..." K=5
make index BACKEND=faiss FOLDER=./docs
make query BACKEND=faiss FOLDER=./docs QUERY="..." K=5
make reindex BACKEND=faiss FOLDER=./docs
You can customize settings via environment variables (see .env.example for defaults):
BOLMO_BACKEND: Default backend (faiss, faiss_nocache, or qdrant)BOLMO_EMBEDDER: Embedding model (default: all-MiniLM-L6-v2)BOLMO_MODEL: Language model for generation (default: allenai/Bolmo-1B)QDRANT_URL: URL for Qdrant server (default: http://localhost:6333)QDRANT_COLLECTION: Collection name in Qdrant (default: bolmo_docs)BOLMO_CHUNK_SIZE: Size of text chunks (default: 800)BOLMO_CHUNK_OVERLAP: Overlap between chunks (default: 200)BOLMO_FORCE_CPU: Force CPU usage even if CUDA is available (1 or true)There is a benchmark script that measures retrieval speed and a simple quality proxy (hit@k) for all three backends:
python benchmarks/benchmark_rag.py --folder ./docs --k 5 --reindex
More examples are in BENCHMARKS.md.
make test
Optional Qdrant smoke tests (requires running Qdrant):
RUN_QDRANT_TESTS=1 QDRANT_URL=http://localhost:6333 make test
docker ps to check). Restart with docker restart qdrant-server if needed.BOLMO_FORCE_CPU=1 to fallback to CPU.