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.

  1. Wgranie

    Plik trafia do storage. Dowolny rozmiar, dowolny zespół.

  2. Parsowanie

    Zadanie w kolejce odczytuje tekst, nagłówki i tabele.

  3. Chunking

    Podział na fragmenty, splitterem dobranym do typu pliku.

  4. Streszczenie

    Streszczenie całego pliku, zapisane jako osobny fragment.

  5. Kontekst

    Tytuł, sekcja i streszczenie idą przed każdym fragmentem.

  6. Embedding hybrydowy

    Dwa embeddingi: gęsty dla sensu, rzadki dla dokładnych słów.

  7. 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.

  1. 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 etacie

    Historia rozmowy zamienia dopytanie w pełne pytanie. Obok powstaje drugie sformułowanie.

  2. 02

    Wyszukiwanie

    2× WYSZUKIWANIE HYBRYDOWE

    Q1 gęste rzadkie
    Q2 gęste rzadkie

    FUZJA RRF

    DEDUPLIKACJA

    chunk #42
    chunk #42
    chunk #17

    Sens i dokładne słowa, oba sformułowania, równolegle. Qdrant łączy listy po swojej stronie.

  3. 03

    Wybór

    RERANKING

    opcjonalny
    chunk #173 → 1
    chunk #421 → 2
    chunk #082 → 3

    ±1 SĄSIAD

    #16 · przed
    #17 · trafienie
    #18 · po

    Jeśli reranking jest włączony, reranker ponownie ocenia krótką listę. Sąsiednie fragmenty z tego samego pliku są sklejane bez zdublowanej zakładki.

  4. 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

Analityk finansowy
role: finance

FILTR W ZAPYTANIU

finance pasuje

DOKĄD DOCIERA FRAGMENT

Odpowiedź
Cytowanie
Kontekst modelu

KTO PYTA

Handlowiec
role: sales

FILTR W ZAPYTANIU

odfiltrowane

DOKĄD DOCIERA FRAGMENT

Odpowiedź
Cytowanie
Kontekst modelu

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

własni użytkownicy i role

Firma B

collection_b

własni użytkownicy i role

Firma C

collection_c

własni użytkownicy i role
Guard w warstwie danych. Zapytania do danych organizacji muszą nieść jej filtr.
zapytanie · brak filtra organizacji ZGŁOSZONE
  • 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. To wskazówki, nie wymuszane limity.
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.

GPU niepotrzebne. Dodasz je tylko do własnych modeli.

~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.