DMN/Software

ProjekteQuellen-Chat

Quellen-Chat nach dem Vorbild von NotebookLM

Eigene Quellen hochladen, sie im Chat befragen und jede Aussage der Antwort bis zu der Textstelle zurückverfolgen, aus der sie stammt.

notebook.dmn-software.com Quellcode auf GitHub

Demo-Zugang: demo@notebook.local

Passwort demo-citations-2026

Antwort im Chat auf die Frage, was die Garantie abdeckt und was ausgeschlossen ist, als zwei Listen mit nummerierten Zitaten hinter jedem Punkt, rechts daneben die Quelle Framework Agreement Zephyr 7 mit der markierten Passage von Seite 3
Nach dem Klick auf ein Zitat: Die Quelle öffnet sich neben dem Chat, die Passage, auf die sich das Zitat bezieht, ist markiert. Die Antwort bleibt dabei stehen, beides lässt sich direkt vergleichen.

Eckdaten

Stand

Tests
102 in 15 Spec-Dateien, davon 11 gegen eine echte Datenbank
Demo
ohne Registrierung, schreibgeschütztes Konto
Verfügbarkeit der letzten 30 Tage
100,00 %

Jede Aussage hat eine Quelle

Die Antworten stützen sich nur auf die Quellen, die im Notebook liegen. Jede Aussage bekommt ein nummeriertes Zitat, und ein Klick darauf führt zu der Passage, aus der sie stammt.

So lässt sich eine Antwort nachprüfen, statt ihr einfach glauben zu müssen.

Von der Quelle zur Antwort

  1. Quelle als PDF, DOCX, Website oder Text hinzufügen
  2. Index macht die Quelle durchsuchbar
  3. Frage im Chat stellen
  4. Antwort kommt mit nummerierten Zitaten
  5. Klick auf eine Nummer öffnet die Passage
Antwort im Chat zu einem Rahmenvertrag, gegliedert nach Themen wie Zahlung, Gewährleistung und Wartung, hinter jeder Aussage kleine nummerierte Zitate
Antwort mit nummerierten Zitaten hinter jeder Aussage.

Suche in Postgres

Beim Hochladen wird der Text einer Quelle in Abschnitte von höchstens 3000 Zeichen zerlegt, die sich um bis zu 450 Zeichen überlappen. Jeder Abschnitt liegt mit seinem Vektor aus 768 Dimensionen und einem Volltextindex in derselben Tabelle.

Eine Frage sucht auf beiden Wegen: nach den Wörtern im Volltext, deutsch und englisch, und nach ähnlicher Bedeutung über den Vektor. Beide Ranglisten werden per Reciprocal Rank Fusion mit k = 60 zusammengeführt. Es zählt nur der Platz in jeder Liste, keine von Hand gewählte Gewichtung, und wer in beiden Listen auftaucht, rückt nach oben.

Das Modell bekommt die acht besten Abschnitte nummeriert und belegt jede Aussage mit einer Nummer. Nummern ohne passenden Abschnitt fallen weg, die übrigen werden neu durchgezählt und führen im Chat zur Textstelle.

Auszüge aus dem echten Code, gekürzt.

Echter Code aus dem Quellen-Chat

apps/api/src/sources/chunker.ts

const MAX_CHARS = 3000;const OVERLAP_CHARS = 450;const MIN_CHARS = 120;export function chunk(text: string): Chunk[] {  const blocks = paragraphs(text);  if (blocks.length === 0) return [];  …

supabase/migrations/20260804090000_init.sql

create table chunks (  …  lang regconfig not null default 'german',  fts tsvector generated always as    (to_tsvector(lang, content)) stored,  embedding vector(768));create index on chunks  using hnsw (embedding vector_cosine_ops);

supabase/migrations/20260804090100_match_chunks.sql

k constant int := 60;…select …  (coalesce(1.0 / (k + v.rank), 0)  + coalesce(1.0 / (k + w.rank), 0))::float  as score…left join vec v on v.id = candidates.idleft join kw w on w.id = candidates.id

apps/api/src/chat/citations.ts

const citations: Citation[] =  [...renumbered.entries()]  .map(([original, n]) => {    const block = blocks[original - 1];    return {      n,      chunkId: block.chunkId,      …      charStart: block.charStart,

Studio

Aus denselben Quellen erzeugt das Studio weitere Formate. Es steht rechts neben dem Chat.

Ein Notebook mit zwei Quellen: links die Liste der Quellen mit den Knöpfen für Datei, Website und Text, in der Mitte der leere Chat mit Vorschlägen für Fragen, rechts das Studio mit Briefing, FAQ, Study guide, Mind map, Audioüberblick und Notizen
Ein Notebook mit zwei Quellen. Links die Quellen, in der Mitte der Chat, rechts das Studio.

Technik

Frontend
Next.js
Backend
NestJS
Daten
Supabase mit PostgreSQL und pgvector
Suche
Vektor und Volltext, zusammengeführt per Reciprocal Rank Fusion
Zugriff
Row Level Security, Anfragen laufen mit dem Token des Nutzers
Betrieb
eigener Server, Supabase selbst gehostet, Caddy davor

Ausprobieren

Das Konto ist schreibgeschützt. Chat und Studio sind auf wenige Anfragen pro Stunde begrenzt.