Eine KI, die nicht halluzinieren kann, hat 135 LV-Positionen gelesen. Wir geben ihr 7,5 von 10.
Wir haben eine neue Modellklasse getestet, die statt Text typisierte Entscheidungen mit kalibrierten Wahrscheinlichkeiten zurückgibt, an der Frage, die jeder Kalkulator zuerst beantwortet: Ist diese Position meine? 135 synthetische deutsche und englische Positionen, sieben Dokumentformate, jede Zahl und jeder Fehlgriff.
Ein Leistungsverzeichnis für eine Schule hat 1.500 Positionen. Ein Fensterbauer kalkuliert 60 davon. Bevor irgendjemand eine einzige Position deuten, zuordnen oder bepreisen kann, muss jemand 1.500-mal die langweilige Frage beantworten: Ist die unsere?
In DatumOS ist diese Antwort ein Feld an jeder Position, scope_status: eigenes Gewerk, fremdes Gewerk oder unklar. Bis letzte Woche hat nichts dieses Feld gesetzt. Jede Position stand standardmäßig auf „eigenes Gewerk“, und der Kalkulator hat es nach Augenmaß sortiert. Dieser Beitrag handelt von dem Modell, das wir getestet haben, um dieses Feld zu füllen: was es richtig gemacht hat, wo es gezögert hat, und warum wir es trotzdem einsetzen werden.
Alles unten ist synthetisch. Die Positionen haben wir selbst so geschrieben, wie Auftraggeber sie schicken, und kein Pilotunternehmen taucht hier mit seiner Ausschreibung auf.
Ein Modell, das mit einer Zahl antwortet, nicht mit einem Satz
Der übliche Weg, Text mit KI zu klassifizieren, ist, ein großes Sprachmodell zu fragen und zu parsen, was es zurückschreibt. Das funktioniert, wir tun es an anderer Stelle im Produkt, aber es hat zwei Kosten, die bei 1.500 Positionen je Ausschreibung ins Gewicht fallen: Es ist langsam und teuer pro Aufruf, und die Antwort ist eine Zeichenkette. Eine Zeichenkette kann alles sein, auch eine selbstbewusst falsche.
TypeSafe AI hat im September eine andere Art von Modell veröffentlicht, die sie System One nennen. Das erste öffentliche heißt Jev. Es erzeugt überhaupt keinen Text. Man schickt ihm einen strukturierten Zustand, ein JSON-Objekt, plus eine oder mehrere typisierte Fragen: Wähle eine dieser Optionen, bewerte das auf einer Skala, oder ja/nein. Es gibt je Frage eine typisierte Antwort zurück, mit einer Wahrscheinlichkeit, die darauf trainiert ist, ehrlich zu sein. Wenn es 0,95 sagt, sollte es in etwa 95 von 100 Fällen recht haben. Wenn es 0,5 sagt, sagt es Ihnen, dass es das nicht weiß.
Diese letzte Eigenschaft ist die interessante für einen Gewerkefilter. Ein Kalkulator will keinen Klassifikator, der rät. Er will einen, der sagt: Diese 40 sind deine, diese 1.400 nicht, und diese 60 solltest du dir ansehen.
Der Aufruf sieht je Position so aus:
{
"state": {
"account_trades": "Fensterbau und Türen (Kunststoff, Holz, Aluminium): Fenster, Haustüren, Innentüren, Zargen, Fensterbänke, Rollläden ...",
"document": { "trade_package": "Fenster, Außentüren und Verglasungen" },
"position": {
"oz": "06.02.0040",
"short_text": "Fensterlaibungen innen verputzen",
"long_text": "Fensterlaibungen innen mit Gipsputz verputzen, ... Putzabschlussprofil am Blendrahmen ...",
"unit": "m", "quantity": "118",
"toc_path": "06 Putzarbeiten"
}
},
"questions": {
"in_scope": { "type": "noul", "instructions": "Würde der in account_trades beschriebene Betrieb diese Position als eigene Leistung kalkulieren?" },
"trade": { "type": "choice", "criteria": { "fenster": "...", "tueren": "...", "mauerwerk": "...", "daemmung": "...", "beton": "...", "sonstiges": "..." } }
}
}
Zwei Fragen in einem Aufruf. Ist sie unsere? hängt davon ab, wer fragt, deshalb ist die Selbstbeschreibung des Betriebs Teil der Eingabe; ein reiner Türenbetrieb und ein Fenster-und-Türen-Betrieb bekommen für dieselbe Position verschiedene Antworten. Welches Gewerk ist es? hängt nicht davon ab, wer fragt. Das Beispiel oben, Fensterlaibungen verputzen, enthält dreimal das Wort „Fenster“ und gehört dem Putzer. Das Modell hat 0,11 und sonstiges zurückgegeben. Ein Stichwortfilter hätte es auf den Stapel des Fensterbauers gelegt.
Jeder Aufruf hat etwa 850 Millisekunden gedauert und rund 1.000 Eingabe-Token gekostet, was zum veröffentlichten Preis vier Tausendstel Cent je Position sind. Ein LV mit 1.500 Positionen zu klassifizieren kostet sechs Cent.
Runde eins: 52 Positionen, die wir selbst geschrieben haben
Wir haben mit Positionen in unserer eigenen Kurzschrift angefangen, so wie ein Kalkulator sie notieren würde: offensichtliche, Stichwortfallen, abkürzungslastige, und acht, die für einen Fensterbauer wirklich mehrdeutig sind, etwa eine T30-Stahltür oder eine Pfosten-Riegel-Fassade.
| Ergebnis | |
|---|---|
| Richtige Seite von ja/nein (44 eindeutige Fälle) | 43 von 44 |
| Gewerkezuordnung (52 Fälle) | 52 von 52 |
| Brier-Score, ein Kalibrierungsmaß, bei dem 0 perfekt und 0,25 ein Münzwurf ist | 0,027 |
| Die 8 mehrdeutigen Positionen landen im mittleren Band | 7 von 8 |
Jede Falle bestanden. Fenstersturz Stahlbeton-Fertigteil ging mit 0,06 zum Beton. Fensteröffnung zumauern mit 0,10 zum Mauerwerk. Bauendreinigung einschl. Fensterputz mit 0,07 raus. Die Kalkulatoren-Kurzschrift KS-Fe. 1-flg. DK ws 1.010 x 1.210 RC2 kam mit 0,97 als Fenster zurück, ebenso dieselbe Position mit Zeichen, die so verstümmelt waren, wie ein schlechter Scan sie verstümmelt.
Der eine Fehlgriff war eine Stahl-Umfassungszarge für die eigenen Innentüren des Betriebs, mit 0,26. Das Modell wusste, was es ist, die Gewerkeantwort war Türen mit 1,00, und wollte trotzdem nicht sagen, dass der Fenster-und-Türen-Betrieb sie kalkuliert. Merken Sie sich die.
Runde zwei: 83 Positionen, so wie Auftraggeber sie wirklich schreiben
Runde eins hat gezeigt, dass das Modell deutschen Bautext liest. Sie hat nicht gezeigt, dass es Ausschreibungen liest, die in Hausstilen geschrieben sind, die mit Klarheit nichts zu tun haben. Also haben wir die fünf Beispieldokumente aus unserem Pilot-Rundgang und die GAEB-Beispiele aus unserem Repository genommen und 83 Positionen in deren Tonfall geschrieben:
- Vererbte Positionen. Eine Grundposition mit der vollen Spezifikation, dann acht Varianten, die nur „Gemäß Position 2.510.“ sagen und die Abweichungen auflisten: ein anderer Griff, ein Rollladen, ein höherer Rahmen. Manche Varianten enthalten das Wort „Fenster“ gar nicht.
- GAEB-Kurztexte. Acht Wörter und kein Langtext: Türzarge Stahl 875 x 2125, BA 03.
- Englische Leistungsverzeichnisse, dichte Einabsatz-Positionen, die mit einem Raumnamen enden.
- Erzählende Spezifikationen, Prosa plus Aufzählung plus
QUANTITY: 204 No., einschließlich ganzer Systeme wie einer automatischen Eingangstür. - Unternehmer-Leistungsverzeichnisse mit Produktcodes und einem Abschnitt für Zubehör.
- Ein Rohbau-Los aus einer gewerkeübergreifenden Ausschreibung, in VOB-Langtext mit Fabrikat: ... oder gleichwertig und Angebotenes Fabrikat: ........ (Bieterangabe), voller fensterförmiger Positionen, die alle dem Maurer gehören.
- Ein formales Fenster-Los mit wie vor, jedoch, Mehr- und Minderpreisen, einer Eventualposition, einem Nur-Einheitspreis, und Hinweisen auf Leistungen, die bauseits erbracht werden.
| Runde eins | Runde zwei | |
|---|---|---|
| Richtige Seite von ja/nein | 97,7 % | 94,0 % |
| Gewerkezuordnung | 100 % | 96,4 % |
| Brier-Score | 0,027 | 0,038 |
| Drei-Zustands-Genauigkeit, Schwellen bei 0,20 und 0,85 | 90,4 % | 80,7 % |
Schwierigere Eingabe, ein moderater Rückgang, Kalibrierung intakt. Jede Position aus beiden Runden ist auf einem Diagramm:
Die Form ist das Ergebnis. Die eindeutigen Positionen sitzen in ihren Bändern, die mehrdeutigen verteilen sich über die Mitte, und keine Position wurde auf der falschen Seite über eine Schwelle geschoben. Drei Ergebnisse aus dieser Runde haben geändert, wie wir die Funktion bauen werden.
Vererbte Positionen müssen nicht aufgelöst werden. Wir hatten angenommen, die Verarbeitung müsse die Grundposition nachschlagen und ihren Text einfügen, bevor der Klassifikator arbeiten kann. Wir haben dieselbe Variante zweimal getestet, einmal nackt und einmal mit angehängtem Grundtext. Nackt: 0,95. Aufgelöst: 0,96. Der Abschnittspfad und die Gewerkeüberschrift tragen es. Alle elf vererbten Fälle waren richtig.
„Bauseits“ wird wörtlich gelesen. Ein Hinweis innerhalb des Fensterabschnitts zum Elektroanschluss der Rollladenmotoren, markiert bauseits durch das Elektrogewerk, kein Preis, kam mit 0,05 zurück. Ein Gerüsthinweis, wird bauseits gestellt, keine gesonderte Vergütung, mit 0,13. Im englischen Unternehmer-LV das Gerüst „provided by main contractor, NOT in this package“ mit 0,09. Im Rohbau-Los ging jede fensterförmige Position zum Maurer, wo sie hingehört: der Anschlag in der Wand, der Sturz, das Putzabschlussprofil am Rahmen, das XPS in der Laibung.
Wo es zögert, ist ein einziges, benennbares Muster. Jeder Richtungsfehler in Runde zwei, und die meisten Positionen, die von „eigenes Gewerk“ nach „unklar“ gefallen sind, haben dieselbe Form: eine Leistung, die dem Fensterbauer gehört, beschrieben mit dem Verb eines anderen Gewerks.
| Position | Was es ist | Wert |
|---|---|---|
| Elektrischer Türöffner im Haustürrahmen | E-Öffner, eingebaut in unseren Türrahmen; der Elektriker schließt nur an | 0,41 |
| Aussparung für Türsprechstelle im Seitenteil | ein Ausschnitt in unserem Seitenteil für eine Sprechstelle, die der Elektriker liefert | 0,48 |
| Gerüst bis 8 m Arbeitshöhe | Gerüst, das der Fensterbauer laut LV selbst stellen muss | 0,50 |
| Türzarge Stahl 875 x 2125 | die Stahlzarge noch einmal, diesmal als GAEB-Kurztext | 0,52 |
| Schlagregenprüfung vor Ort | eine Prüfung an unseren eingebauten Fenstern, auf unsere Kosten | 0,65 |
| Nachverglasung beschädigter Einheiten | Austausch unserer Glaseinheiten, die andere Gewerke beschädigt haben | 0,76 |
Das Modell hängt sich an das fremde Substantiv, Elektro, Gerüst, Prüfung, und gewichtet „im Rahmen der Position 04.02.0010“ oder „der AN hat selbst zu stellen“ zu schwach. Es kippt diese Positionen nicht nach „fremdes Gewerk“. Es parkt sie bei 0,4 bis 0,8, was unter unseren Schwellen die Prüfliste ist. Das ist der richtige Fehler für einen Filter. Es ist auch mehr Prüfarbeit, als ein Kalkulator haben möchte.
Der Hebel, den wir hatten, und wie weit er trägt
Die Gewerkebeschreibung des Betriebs ist Teil jedes Aufrufs, also haben wir das Naheliegende versucht: sie erweitert. Wir haben Zargen, Insektenschutz, „elektrische Beschläge im eigenen Element“ und „Nebenleistungen an eigenen Elementen: Aufmaß, Werkplanung, Bemusterung, Prüfungen, Nachverglasung, Gerüste, wenn das LV sie vom Fensterbauer verlangt“ ergänzt. Dann haben wir die sieben zögerlichen Positionen erneut laufen lassen und, wichtiger, vier Kontrollen: den bauseitigen Elektrohinweis, den Elektroanschluss „durch Elektrogewerk“ und beide Gerüsthinweise „bauseits“, die die neue Formulierung nach oben hätte ziehen können.
Sechs von sieben stiegen, im Schnitt um 0,19, alle in die richtige Richtung. Insektenschutz ging von 0,62 auf 0,95. Die Aussparung für die Sprechstelle von 0,48 auf 0,81. Die vier Kontrollen blieben, wo sie waren, zwischen 0,06 und 0,20. Die Beschreibung ist also ein echter Hebel, und er leckt nicht.
Aber nur eine der sieben hat die Linie bei 0,85 überschritten. Die Stahlzarge erreichte 0,68, obwohl das Wort Zargen jetzt wörtlich in der Beschreibung des Betriebs steht. Es gibt eine Decke dafür, wie weit Kontext eine Position schieben kann, deren Verb jemand anderem gehört, und keine Menge an Adjektiven in der Beschreibung hebt sie an. Das ist eine Eigenschaft des Modells, und dort haben wir aufgehört zu justieren.
Die Bewertung
| von 10 | warum | |
|---|---|---|
| Deutschen und englischen Bautext lesen | 9 | 106 von 111 eindeutigen Fällen auf der richtigen Seite; jede Stichwortfalle; Scan-Schäden; vererbte Positionen ohne Auflösung |
| Gewerkezuordnung | 9,5 | 132 von 135; die Fehlgriffe waren eine Gardinenschiene, eine Abdichtung an der Fensterbank und ein Blindstock im Rohbau-Los, alle diskutabel |
| Kalibrierung | 9 | Brier 0,027 und 0,038; die mehrdeutigen Positionen liegen im Schnitt bei 0,5 bis 0,66, wo sie hingehören |
| Kontext lesen: bauseits, Fremdleistung, Abschnitt, Gewerkeüberschrift | 8,5 | alles hat gehalten, und noch einmal gehalten, als wir die Beschreibung geändert haben |
| Entschiedenheit bei eigenen Leistungen in den Worten eines anderen Gewerks | 5 | hängt bei 0,4 bis 0,8, auch wenn ausdrücklich benannt |
| Konsistenz | 6 | dieselbe Brandschutztür bekam 0,20 in einem englischen LV und 0,75 in einem deutschen Los |
| Geschwindigkeit und Kosten | 7 | 850 ms und sechs Cent je Ausschreibung; etwa die doppelte Latenz, die der Anbieter bewirbt, bei unserer Eingabegröße |
| Betriebsreife | 6 | nur Text, ein öffentliches Modell, noch keine veröffentlichte Option zum Ort der Datenverarbeitung |
7,5 von 10 für die Aufgabe, die wir ihm geben würden. Was es von einer 8 fernhält: Etwa 30 % der Positionen würden auf der Prüfliste landen, und ein Drittel davon sind welche, die ein Kalkulator ohne zweiten Blick bepreisen würde. Was es davon abhält, unter 7 zu fallen: In 135 Positionen hat es nicht ein einziges Mal eine falsche Antwort über die Vertrauenslinie geschoben. Für einen Filter, der vor der Kalkulation sitzt, ist das die Eigenschaft, die zählt.
Zum Vergleich: Das heutige Verhalten des Produkts, alles ist eigenes Gewerk, bekommt eine Null. Ein Stichwortfilter bekäme auf diesem Satz vielleicht eine 3, weil die Fallen der Satz sind. Ein großes Sprachmodell, je Position dieselbe Frage gestellt, käme in der Genauigkeit wahrscheinlich gleichauf, ohne die kalibrierte Wahrscheinlichkeit, zu etwa dem Zehnfachen an Kosten und Latenz.
Was wir bauen werden
Der Gewerkefilter kommt mit diesem Modell dahinter, und mit drei Entwurfsentscheidungen, die direkt aus den Zahlen folgen.
Schwellen bei 0,20 und 0,85, und eine Prüfliste dazwischen. Wir haben versucht, sie zu verschieben. Die obere Linie auf 0,75 zu senken rettet die Nachverglasung und die Fensterbretter, und zieht die Brandschutztür und die automatische Eingangstür mit nach „eigenes Gewerk“, was schlimmer ist. Die Prüfliste ist das Produkt, nicht ein Fehler darin.
Die Gewerkebeschreibung ist eine Einstellung, die dem Kalkulator gehört. Zwei Türenbetriebe unterscheiden sich: Einer baut T30-Brandschutztüren ein, einer nicht. Die Beschreibung ist der Ort, wo das lebt, sie ist Klartext, und das Experiment zeigt, dass das Modell sie respektiert, ohne sie zu überlesen. Wir liefern einen Standard je Gewerk aus, mit der Klausel „Nebenleistungen an eigenen Elementen“, und die Prüfliste zeigt, welche Formulierung eine Position bewegt hätte.
Das Modell klassifiziert. Es extrahiert nicht, schreibt nicht, kalkuliert nicht. Positionen werden weiterhin von einem Sprachmodell gelesen, das Dossier weiterhin von einem mit Quellenangaben geschrieben, Preise kommen weiterhin aus den eigenen Regeln des Betriebs. Ein Modell, das mit einer Zahl antwortet, ist das richtige Werkzeug für die eine Frage mit kurzer Antwort, und das falsche für alles andere auf der Seite.
Zwei Tore, bevor es eine echte Ausschreibung berührt. Erstens ein Stapel Positionen aus einer tatsächlichen Pilotausschreibung mit den eigenen Gewerkeentscheidungen des Kalkulators als Wahrheit; 135 synthetische Positionen, geschrieben von den Leuten, die die Fallen gestellt haben, sind ein Anfang, keine Validierung. Zweitens eine Antwort des Anbieters darauf, wo der Text verarbeitet wird. Bis wir die schriftlich haben, bleibt Ausschreibungstext in der EU, und das hier bleibt ein Experiment.
Mit wem Sie es zu tun haben
Vier Leute, die alle den Code schreiben und die Experimente wie dieses fahren, bevor etwas ins Produkt geht. Der Fallsatz und der Auswerter sind ein paar hundert Zeilen Python; wenn Sie sie gegen Ihre eigene Gewerkebeschreibung laufen lassen möchten, fragen Sie.
Wenn Sie GAEB-Ausschreibungen kalkulieren und sehen möchten, welche Ihrer Positionen ein Modell Ihnen für einen zweiten Blick zurückgeben würde: Pilot anfragen. Wir antworten innerhalb von zwei Werktagen.
War dieser Beitrag hilfreich?
Keine Cookies, kein Tracking – eine Stimme pro Leser und Tag.
Kommentare
Kommentare werden vor der Veröffentlichung geprüft.
Kommentare werden geladen…