Aufgabe
Unternehmen wollen einen Berater, der Kunden auf der Website und in Telegram aus der eigenen Preisliste und den FAQ antwortet. Er darf keine Preise oder Bedingungen erfinden, muss die Quelle einer Antwort zeigen und bei Fragen außerhalb der Basis ehrlich einen Manager rufen. Kundendaten bleiben beim Unternehmen, die Demo öffnet ohne Registrierung und kostet nichts.
Lösung
Ein Embedding-Modell, multilingual-e5-small in int8, läuft auf dem Server über onnxruntime und im Browser über transformers.js, deshalb finden beide Modi dieselben Fragmente. Die Antwort ist das Fragment selbst oder ein Modelltext, der nur daraus geschrieben wird. Besteht das beste Fragment die Schwelle nach Sinn oder nach Wörtern nicht, lehnt der Berater ab und bietet einen Manager an. Eine Anfrage wird zuerst in der Datenbank gespeichert und dann an Telegram gesendet, ein Ausfall von Telegram verliert sie nicht.
Umgesetzte Aufgaben
- Hybride Suche gebaut: ein lokales e5-Modell in PostgreSQL mit pgvector plus Wortüberdeckung nach Seltenheit
- Die „weiß nicht“-Schwellen an 21 Fragen abgestimmt: aus den FAQ, themenfremd und grenzwertig
- GigaChat und OpenAI-kompatible Modelle hinter einer Schnittstelle angebunden, Antworten nur aus Fragmenten
- Übergabe an einen Manager gebaut: Name, Telefon, Frage und der ganze Dialog kommen in Telegram an
- Besucher können eigenen Text oder ein PDF hochladen und dazu fragen, die Datei lebt nur in der Sitzung
- Die Demo begrenzt: 10 Fragen am Tag pro Besucher, ein Tagesbudget an Tokens und eine Warteschlange
- Ein Widget gebaut, das mit einer Zeile auf eine Website kommt, und einen Telegram-Bot mit derselben Engine
- Einen Browsermodus mit transformers.js und demselben Modell gebaut: die Suche kann auf dem Gerät des Besuchers laufen
- Einen Demomodus gebaut: das Formular läuft bis zum Ende, die Anfrage wird aber nur gezeigt, Namen und Telefonnummern bleiben nicht gespeichert
Ergebnis
Der Abnahmetest mit dem echten Modell: 10 von 10 FAQ-Fragen finden ihr Fragment, 3 von 3 themenfremden Fragen bekommen „weiß nicht“. Das Projekt startet mit docker compose up, und die Demo auf dieser Website ist derselbe Container im Demomodus: er antwortet sofort und zeigt die Anfrage, statt sie zu senden.
Anmerkung des Entwicklers
Was schwierig war
Am schwierigsten war es, ihm das Ablehnen beizubringen. Die e5-Ähnlichkeit allein trennte fremde Fragen nicht: „Was kostet die Honigtorte?“ kam auf 0,802, „Was kostet eine iPhone-15-Reparatur?“ auf 0,812. Eine zweite Bewertung nach Wörtern, gewichtet nach Seltenheit, löste es.
Was leicht fiel
Die Übergabe an einen Manager ging leicht: ein kurzes Formular mit Telefonprüfung und eine Telegram-Nachricht mit dem ganzen Dialog.
Technologien
PythonFastAPIPostgreSQLpgvectorONNX Runtimemultilingual-e5transformers.jsaiogramGigaChatDocker