Otwarta platforma RAG dla firm
Twoje dokumenty stają się asystentem, który odpowiada i podaje źródło. Wszystko zostaje na twojej infrastrukturze: dokumenty, baza, indeks wektorowy i klucze szyfrujące. Modele wybierasz sam, zmiana dostawcy to plik konfiguracyjny.
Nasze demo odpowiada, wyszukuje i przechowuje pliki na Scaleway, we francuskiej chmurze. Tam są też klucze szyfrujące. Zobacz, co gdzie działa
01 · Jak działa wczytywanie dokumentu
Wgrywasz plik. Resztę Ragen robi w tle.
Siedem kroków zamienia każdy dokument, nawet 400-stronicowy PDF, we fragmenty, które wiedzą, skąd pochodzą. Całość idzie asynchronicznie, więc nikt nie czeka na indeksowanie.
-
Wgranie
Plik trafia do storage. Dowolny rozmiar, dowolny zespół.
-
Parsowanie
Zadanie w kolejce odczytuje tekst, nagłówki i tabele.
-
Chunking
Podział na fragmenty, splitterem dobranym do typu pliku.
-
Streszczenie
Streszczenie całego pliku, zapisane jako osobny fragment.
-
Kontekst
Tytuł, sekcja i streszczenie idą przed każdym fragmentem.
-
Embedding hybrydowy
Dwa embeddingi: gęsty dla sensu, rzadki dla dokładnych słów.
-
Indeks
Zapis do Qdranta, gotowe na pierwsze pytanie.
- Asynchronicznie. Każdy plik to zadanie BullMQ lub Temporal.io, aplikacja nie czeka.
- Parsowanie przez Docling. Nagłówki i tabele przechodzą w całości.
- Zostaje na twoich serwerach. Pliki, baza i indeks są twoje.
Szczegóły techniczne
Plik trafia do storage i przejmuje go zadanie w kolejce BullMQ na Redisie albo workflow Temporal.io: parsowanie, chunking splitterem dobranym do typu pliku, streszczenie całego dokumentu doklejone jako osobny fragment, potem embedding gęsty i rzadki i zapis do kolekcji Qdranta należącej do organizacji. Przed embeddingiem gęstym każdy fragment dostaje krótki prefiks: tytuł dokumentu, sekcję, w której leży, i pierwsze zdanie streszczenia. Fragment, w którym stoi tylko „okres wypowiedzenia wynosi 30 dni”, znajdzie się wtedy także na pytanie, które wymienia umowę. Prefiks nie kosztuje żadnego wywołania modelu i jest zapisywany obok fragmentu, nigdy w nim, więc model i cytowanie widzą tekst w oryginalnym brzmieniu. Całość idzie asynchronicznie, więc 400-stronicowy PDF niczego nie blokuje.
02 · Jak działa odpowiadanie
Jedno pytanie, dwa wyszukiwania, odpowiedź ze źródłami.
Ragen przepisuje pytanie, szuka dwoma sformułowaniami naraz, zachowuje najlepsze fragmenty razem z sąsiadami i dopiero wtedy prosi model o odpowiedź z cytatami.
- 01
Zrozumienie
Ile dni urlopu mogę przenieść na kolejny rok?A osoby na niepełnym etacie?↓ SAMODZIELNE
Ile dni urlopu mogą przenieść na kolejny rok osoby na niepełnym etacie?+1 WARIANT
Zasady przenoszenia urlopu wypoczynkowego osób na niepełnym etacieHistoria rozmowy zamienia dopytanie w pełne pytanie. Obok powstaje drugie sformułowanie.
- 02
Wyszukiwanie
2× WYSZUKIWANIE HYBRYDOWE
Q1 gęste rzadkieQ2 gęste rzadkieFUZJA RRF
DEDUPLIKACJA
chunk #42chunk #42chunk #17Sens i dokładne słowa, oba sformułowania, równolegle. Qdrant łączy listy po swojej stronie.
- 03
Wybór
RERANKING
opcjonalnychunk #173 → 1chunk #421 → 2chunk #082 → 3±1 SĄSIAD
#16 · przed#17 · trafienie#18 · poJeśli reranking jest włączony, reranker ponownie ocenia krótką listę. Sąsiednie fragmenty z tego samego pliku są sklejane bez zdublowanej zakładki.
- 04
Odpowiedź
PRZYKŁAD
Osoby na niepełnym etacie przenoszą niewykorzystany urlop proporcjonalnie do wymiaru czasu pracy 1. Przeniesione dni mają własny termin wykorzystania 2.
- 1Podręcznik pracownika › 4.2 Niepełny etat
- 2Polityka urlopowa › Przenoszenie urlopu
Model dostaje tylko wybrane fragmenty i ma polecenie, by je cytować. Każde twierdzenie prowadzi do pliku.
Szczegóły techniczne
Pytanie jest najpierw przepisywane na samodzielne na podstawie dotychczasowej rozmowy, a potem powstaje drugie sformułowanie. Oba idą równolegle jako wyszukiwania hybrydowe. Qdrant łączy wyniki gęste i rzadkie po swojej stronie fuzją RRF, a suma jest deduplikowana. Gdy reranking jest włączony, kandydaci są ponownie oceniani przez rerankera: domyślnie od Scaleway, albo przez cross-encoder Cohere. Każdy fragment, który przeszedł selekcję, jest potem czytany razem z sąsiednimi fragmentami z tego samego pliku, sklejonymi w jeden ustęp bez zdublowanej zakładki, więc odpowiedź zaczynająca się pod koniec jednego fragmentu nie traci swojej pierwszej połowy. Model dostaje wynik z promptem wymuszającym cytowanie.
Wyszukiwanie hybrydowe nie jest przełącznikiem. To część schematu, z którym powstają kolekcje, więc jest zawsze włączone. Reranking trzeba włączyć samemu: wymaga flagi i danych dostawcy, więc domyślna instalacja go nie robi. Czytanie sąsiednich fragmentów jest domyślnie włączone, ograniczone do trzykrotności zwykłego kontekstu i można je wyłączyć dla wybranej organizacji. Wybór sekcji przez model to opcjonalna alternatywa dla rerankera: model dostaje pytanie i kandydatów i wskazuje fragmenty warte przeczytania, jednym wywołaniem na turę. Każdy etap degraduje się zamiast wywalać – błąd rerankera albo wyboru sekcji cofa do surowej kolejności wektorowej, błąd rozszerzenia cofa do pojedynczego zapytania.
03 · Uprawnienia przy wyszukiwaniu
Ludzie dostają odpowiedzi tylko z plików, które mogą otworzyć.
Każdy fragment nosi filtr accessible_by, stosowany w momencie zapytania, na podstawie uprawnień zapisanych przy indeksowaniu dokumentu. Dokument, którego użytkownik nie może otworzyć, nie wejdzie do odpowiedzi, do cytowania ani do kontekstu wysłanego do modelu.
Per plik i folder, egzekwowane przy wyszukiwaniu, nie przy wyświetlaniu
KTO PYTA
role: finance
FILTR W ZAPYTANIU
DOKĄD DOCIERA FRAGMENT
KTO PYTA
role: sales
FILTR W ZAPYTANIU
DOKĄD DOCIERA FRAGMENT
Filtr działa wewnątrz samego wyszukiwania. Fragment, którego użytkownik nie może zobaczyć, nigdy nie zostaje pobrany, więc nie wycieknie ani w streszczeniu, ani w cytacie. Uprawnienia są czytane przy indeksowaniu dokumentu, więc cofnięte później udostępnienie zadziała po kolejnej reindeksacji.
04 · Wielodostępność
Wiele firm, jedna instalacja, zero wspólnych danych.
Każda organizacja ma własną kolekcję wektorową i własne role. Guard w warstwie danych zgłasza zapytanie do tabeli przypisanej do organizacji, któremu zabrakło filtra organizacji.
JEDNA INSTALACJA RAGENA · TWÓJ SERWER
Firma A
collection_a
Firma B
collection_b
Firma C
collection_c
- 1 kolekcja wektorowa na organizację
- 2 osobne hierarchie ról
- 1 instalacja obsługuje wielu klientów
- 0 opłat za stanowisko
Jak to wypada w porównaniu
| Kryterium | Hostowane „czatuj z dokumentami” | Własny stack na LangChain | Ragen |
|---|---|---|---|
| Gdzie leżą twoje dokumenty | Hostowane „czatuj z dokumentami” w chmurze dostawcy | Własny stack na LangChain u ciebie | Ragen u ciebie |
| Wybór modelu | Hostowane „czatuj z dokumentami” krótka lista dostawcy | Własny stack na LangChain dowolny | Ragen każdy dostawca albo endpoint zgodny z OpenAI |
| Kontrola dostępu | Hostowane „czatuj z dokumentami” zwykle na poziomie workspace | Własny stack na LangChain tyle, ile zbudujesz | Ragen per plik i folder, przy wyszukiwaniu |
| Wielu klientów na jednej instancji | Hostowane „czatuj z dokumentami” per stanowisko, per workspace | Własny stack na LangChain tyle, ile zbudujesz | Ragen w architekturze, dane i indeks per organizacja |
| Jakość wyszukiwania | Hostowane „czatuj z dokumentami” nieprzejrzysta | Własny stack na LangChain twoja do tuningu i do debugowania | Ragen hybryda, reranking, rozszerzanie zapytań, decyzja zapisana przy każdej zmianie |
| Czas do pierwszej odpowiedzi | Hostowane „czatuj z dokumentami” minuty | Własny stack na LangChain tygodnie | Ragen minuty, jedno polecenie plus twoje klucze do modeli |
| Kształt kosztu | Hostowane „czatuj z dokumentami” za stanowisko, na zawsze | Własny stack na LangChain czas twoich inżynierów | Ragen twoja infrastruktura plus koszt modeli |
| Kiedy się zepsuje | Hostowane „czatuj z dokumentami” zgłoszenie do supportu | Własny stack na LangChain ty | Ragen ty, z kodem i z zapisanymi decyzjami |
Jeśli twoje wymagania są naprawdę niestandardowe, zbudowanie tego samemu jest sensowną odpowiedzią. Ragen wypada lepiej wtedy, kiedy chcesz mieć te decyzje już podjęte i opisane, a nie podejmować je samemu.
05 · Wymagania
Działa na skromnym serwerze. Bez GPU, chyba że sam je chcesz.
Chat, embeddingi i reranking to wywołania do dostawców, których wskazujesz w konfiguracji, więc maszyna z Ragenem nie liczy u siebie żadnego LLM-a ani embeddingów. Parsowanie dokumentów to małe modele na CPU, uruchamiane lokalnie.
Gdzie realnie idzie pamięć
w spoczynku, na usługę
- Docling 1.4–1.7 GiB
- Presidio analyzer (opcjonalne, maskowanie danych osobowych) 959 MB
- Postgres 93 MB
- Presidio anonymizer (opcjonalne, maskowanie danych osobowych) 55 MB
- Qdrant 43 MB
- Redis 11 MB
| Sprzęt i oprogramowanie | DO TESTÓW | PRODUKCJA |
|---|---|---|
| CPU | 4 rdzenie | 8 rdzeni |
| RAM | 8 GB | 16 GB |
| Dysk | 25 GB | 100 GB SSD |
| Docker | Compose v2 | Compose v2 |
| Node.js | ^24.15.0 || ≥26 | ^24.15.0 || ≥26 |
To wskazówki, nie wymuszane limity. Potrzebny jest klucz API dostawcy LLM.
~1,6–1,9 GB
docker compose up
~2,6–2,9 GB
wszystko włączone
Szczegóły techniczne
Wskaż hostowanego dostawcę i wystarczy laptop. GPU wchodzi w grę dopiero wtedy, gdy zdecydujesz się serwować modele samodzielnie, na przykład przez vLLM albo Ollamę podpięte jako trasa. To jest wspierane i jest osobnym tematem.
RAM to pamięć dostępna dla Dockera. Dysk rośnie razem z dokumentami. To zalecenia: nic w stacku ich nie wymusza. Aplikacje Ragena działają na hoście i wymagają Node.js ^24.15.0 lub ≥26.0.0, co sprawdza instalator.
Zmierzone na bezczynnym stacku, same usługi wspierające. Domyślne docker compose up zajmuje w spoczynku około 1,6–1,9 GB. Presidio w tym nie ma: oba kontenery są w profilu pii i dokładają około 1 GB dopiero wtedy, gdy włączysz maskowanie danych osobowych. DOCUMENT_PARSER=legacy pomija Docling i oddaje jego pamięć, ale wtedy PDF-y parsuje zewnętrzny model, więc dokumenty wychodzą poza twoją sieć. Qdrant to linia, która rośnie w miarę dodawania dokumentów, bo liczba powyżej to prawie pusty indeks. Tę jedną wymiaruj pod swój korpus, a nie pod ten wykres. Pięć aplikacji Ragena działa na wierzchu tego wszystkiego i nie jest uwzględnionych. W trybie deweloperskim to one zajmują większą część pamięci.
Postaw to u siebie
Jedno polecenie, npx create-ragen-app, przygotowuje całość: klonuje repozytorium, generuje sekrety, uruchamia Postgresa, Qdranta, Redisa i Docling oraz przygotowuje bazę danych. Potem uruchamiasz aplikację webową, API i workera, wgrywasz dokument i o coś pytasz.