Alle Projekte

Tender Radar

KI, die jede EU-IT-Ausschreibung liest und sagt, auf welche sich ein Angebot lohnt, und zu welchem Preis.

Eine KI-Pipeline auf Databricks: Ein LLM übersetzt und ordnet jede EU-IT-Ausschreibung aus 24 Sprachen ein, ein ML-Modell sagt den Zuschlagspreis vorher, und RAG beantwortet Fragen mit Quellen. Jede offene Ausschreibung bekommt jeden Morgen einen Score mit drei Gründen.

Rolle
Eigenes Projekt · KI, Data Engineering & ML
Zeitraum
11/2026

Komplett auf Databricks gebaut

Auf der Free Edition: nur Serverless, ein SQL Warehouse, ein AI-Search-Endpoint und ein tägliches Compute-Kontingent. Diese Grenzen haben das Design geprägt.

  • Lakeflow Jobs
  • Unity Catalog
  • Auto Loader
  • Delta Lake
  • Databricks SQL
  • ai_query
  • MLflow
  • AI Search
  • AI/BI Dashboards
  • Declarative Automation Bundles

Die Ausgangsfrage

Auf welche EU-IT-Ausschreibungen sollte ein mittelständisches IT-Haus diese Woche bieten, und zu welchem Preis?

Die EU veröffentlicht auf TED jedes Jahr rund 80.000 Ausschreibungen für IT, Software und Beratung, in 24 Sprachen. Ein mittelständisches IT-Haus kann sich auf ein paar im Monat bewerben, und jedes Angebot kostet Tage.

Was ich mich zuerst gefragt habe

Kann man vorhersagen, wer gewinnt?

Nein. Zuschlagsbekanntmachungen nennen nur den Gewinner, nie die anderen Bieter. Und 94 % der Gewinner kommen aus dem Land des Auftraggebers: „immer inländisch“ zu raten wäre schon zu 94 % richtig, und nutzlos.

94 %Gewinner aus dem Inland

Was gibt die Datenlage her?

Den Preis. Der Zuschlagswert steht in 77 % der EU-Zuschläge. Also sagt ein Modell Zuschlag ÷ Schätzwert vorher, und ähnliche frühere Ausschreibungen zeigen, wer sie gewonnen hat.

77 %der Zuschläge mit Preis

Lohnt sich ein Angebot überhaupt?

Oft ja. 40,4 % der vergebenen IT-Ausschreibungen hatten nur einen Bieter, in Kroatien 72,8 %. Und Zuschläge liegen im Median beim 0,83-Fachen des Schätzwerts.

40,4 %mit nur einem Angebot

Was die Daten nicht verraten

  • Wer sonst geboten hat, und zu welchem Preis
  • Warum der Gewinner gewonnen hat
  • Was der Vertrag am Ende wirklich kostet

Consulting-Case

Was das einem Angebotsteam bringt

Tender Radar ist wie ein Kundenprojekt aufgebaut: eine echte Entscheidung (bieten oder nicht), das Firmenprofil als Konfiguration und Zahlen, die ein Bid Manager nachprüfen kann. Für ein mittelständisches IT-Haus in DACH ändert es vier Dinge.

Fokus

1.778 statt 7.918

Der Score filtert die offenen Ausschreibungen auf die, die zu Leistungen, Größe und Märkten passen, jede mit Begründung. Heute sind das 77,5 % weniger zu lesen.

Preis

0,83×

Zuschläge liegen im Median beim 0,83-Fachen des Schätzwerts. Das Modell liefert je Ausschreibung einen wahrscheinlichen Preis: ein Startpunkt fürs Angebot statt Bauchgefühl.

Wo bieten

66 % vs. 16 %

Ein-Bieter-Quote bei Softwarewartung gegenüber Vergabeberatung. Themen und Auftraggeber zeigen, wo wenige Firmen bieten, und lenken den Vertrieb dorthin.

Betrieb

≈ 10 Min.

Serverless-Compute pro Tag auf der Free Edition. Bei einem Kunden deployt dasselbe Bundle aus Git in dessen Workspace.

So würde ich es bei einem Kunden einführen

  1. 1Profil setzenLeistungen, Heimatmärkte und Größenbereich der Firma als dbt-Variablen. Der Score rechnet sofort neu.
  2. 2Pilot mit dem Bid TeamVier Wochen die Shortlist neben die tatsächlichen Entscheidungen legen und die Gewichte daran justieren.
  3. 3ÜbergebenJob, Tests und Dashboard laufen aus Git im Databricks-Workspace des Kunden. Das Team besitzt es, nicht ich.

Die Pipeline

Von 24 Sprachen zu einer Empfehlung

Jeden Morgen um 06:00 läuft ein Lakeflow Job auf der Databricks Free Edition, aus Git deployt. Klick auf einen Schritt.

  1. Die letzten 3 Tage aus der TED Search API und die EZB-Kurse landen als Dateien in einem Unity-Catalog-Volume. So holt ein verpasster Tag sich selbst nach.

    • Python
    • TED API
    • Unity Catalog

    3 JahreVerlauf seit eForms (10/2023)

Ein Lauf braucht etwa 10 Minuten Serverless-Compute. Jeder Schritt ist wiederholbar: Bei einem Fehler wird einfach neu gestartet.

Live-Dashboard

Das Databricks-Dashboard, live

Das ist das AI/BI-Dashboard, das ich in Databricks gebaut habe, 1:1 übernommen: dieselben Inhalte, dieselben 7 SQL-Abfragen auf denselben Gold-Tabellen. Eine GitHub Action führt sie jeden Morgen nach der Pipeline aus, die Seite wird daraus neu gebaut. Die Zahlen sind also dieselben wie im Original.

  1. Databricks Gold-Tabellen
  2. 7 SQL-Abfragen
  3. JSON-Snapshot
  4. Statische Seite
Das Original in Databricks
Das Original in Databricks

Tender Radar

Datenstand (Berliner Zeit)

Die Ausschreibungen dieser Woche

Jede offene EU-IT-Ausschreibung, bewertet mit 0–100 Punkten für ein mittelständisches IT-Haus in DACH. Die Gründe sagen, warum. Wahrscheinlicher Zuschlagspreis = Schätzwert × das vom Modell vorhergesagte Verhältnis von Zuschlag zu Schätzwert. Titel kommen auf Englisch aus der Pipeline (LLM-Übersetzung aus 24 Sprachen).

Offene Ausschreibungen bewertet
7.918
Mit 70 Punkten oder mehr
1.778
KITypischer Zuschlag ÷ Schätzwert (Modell)
0,88×

300 Treffer · die besten 300 von 7.918 offenen Ausschreibungen

1–10 von 300

KI, ML & RAG

Wo die KI arbeitet, und wie ich sie geprüft habe

Jede KI-Komponente hat einen Test gegen etwas Einfaches: eine Handprüfung, eine Baseline oder einen Testsatz mit bekannten Antworten.

LLM

Übersetzen und einordnen

20/20

Zusammenfassungen richtig, von Hand geprüft

Llama 3.3 70B macht aus jeder Bekanntmachung in 24 Sprachen einen englischen Titel, eine Zusammenfassung, Technologien und eine Leistungsart.

ai_query direkt im Warehouse, festes JSON-Schema (jede Antwort parst), jede Bekanntmachung nur einmal, offene Ausschreibungen zuerst.

Handprüfung: 20 Ausschreibungen in 8 Sprachen
  • Titel19/20
  • Zusammenfassung20/20
  • Technologien19/20
  • Leistungsart17/20
ML

Den Zuschlagspreis vorhersagen

−19 %

Fehler (MAE) ggü. der Median-Baseline

Gradient Boosting sagt Zuschlag ÷ Schätzwert vorher. Mal Schätzwert ergibt das den wahrscheinlichen Preis im Dashboard.

Zeitlicher Split: trainiert auf 10/2023–09/2026, getestet auf Oktober 2026. In MLflow geloggt, in Unity Catalog nur registriert, wenn es die Baseline schlägt.

Mittlerer Fehler auf ungesehenen Monaten (kleiner ist besser)
  • Baseline (Median)0,299
  • Modell0,242
RAG

Fragen mit Quellen beantworten

80 %

Recall@6: richtige Quelle unter den 6 Treffern

Eine Frage wie „Cloud-Migration in Deutschland“ findet passende Ausschreibungen per Vektorsuche, und das LLM antwortet nur aus diesen Quellen, mit TED-Link je Aussage.

Embeddings (gte-large-en) in dbt, AI-Search-Index, hybride Suche (Top 6), Antwort mit [n]-Zitaten und einer Prüfung, dass jede Quelle existiert.

20 Testfragen mit bekannter Antwort
  • Recall@680 %
  • Zitiert die richtige Quelle80 %
  • Belegte Antworten100 %
Clustering

Themen finden

66 %

Ein-Bieter-Quote bei Softwarewartung

k-Means auf denselben Embeddings gruppiert die Ausschreibungen in 15 Themen, die das LLM benennt. So zeigt sich, wo wenig Wettbewerb herrscht.

k = 10 bis 30 getestet, 15 hatte den besten Silhouette-Score. Einmal trainiert, täglich nur zugeordnet: stabile Themen, billiger Tageslauf.

Nur ein Angebot: am wenigsten vs. am meisten umkämpft
  • Softwarewartung66,3 %
  • Vergabeberatung16,4 %

Und warum der Bid Score kein Modell ist

Es gibt keine Daten darüber, auf welche Ausschreibungen eine Firma hätte bieten sollen. Ein Modell würde nur so tun, als wüsste es das. Deshalb ist der Score eine offene Formel aus fünf Signalen, und jede Ausschreibung zeigt ihre drei wichtigsten Gründe.

  • Passt zu den Leistungen30 Punkte
  • Wenig Wettbewerb25 Punkte
  • Passende Größe20 Punkte
  • Heimatmarkt DACH15 Punkte
  • Bekannter Auftraggeber10 Punkte

Was ich gebaut habe

  • LLM-Anreicherung mit Llama 3.3 70B über ai_query: englischer Titel, Zusammenfassung, Technologien und Leistungsart aus 24 Sprachen, als JSON nach Schema, von Hand an 20 Ausschreibungen geprüft.
  • Preismodell (Gradient Boosting, zeitlicher Split) in MLflow, das Zuschlag ÷ Schätzwert vorhersagt und die Median-Baseline um 19 % MAE schlägt.
  • RAG-Chat mit Quellen: Embeddings, Vektorindex mit 29.373 Dokumenten, hybride Suche, Zitat-Prüfung, Recall@6 von 80 %. Dazu 15 Themen per k-Means auf den Embeddings.
  • Tägliche Lakehouse-Pipeline als Lakeflow Job: TED-API, Auto Loader nach Bronze, PySpark-Silver in EUR, dbt-Gold mit 6 Modellen und 18 Tests inklusive Leak-Test.
  • Transparenter Bid Score aus fünf Signalen mit den drei wichtigsten Gründen in Worten, als AI/BI-Dashboard aus Git deployt und hier aus einem täglichen Snapshot nachgebaut.

Ergebnis

  • Jede offene Ausschreibung bewertet, mit drei Gründen in Worten und einem vom Modell vorhergesagten Preis.
  • Fragen zu Ausschreibungen in jeder Sprache, beantwortet mit TED-Quellen statt erfundener Antworten.
  • Fakten für die Angebotsplanung: 40,4 % der IT-Zuschläge hatten nur ein Angebot.
  • Läuft jeden Morgen ohne mich, aus Git deployt, auf der Databricks Free Edition.

Tech-Stack

KI & ML

Übersetzung per LLM, Preismodell, Themen und RAG-Suche mit Quellen.

  • ai_query
  • Llama 3.3 70B
  • scikit-learn
  • MLflow
  • AI Search
  • gte-large-en

Ingest & Lakehouse

Neue Bekanntmachungen jeden Morgen von Bronze bis Silver, mit EUR-Umrechnung.

  • Python
  • Auto Loader
  • Delta Lake
  • PySpark
  • Unity Catalog

Gold & Qualität

Getestete Gold-Tabellen für Modell, Suche, Score und Dashboard.

  • dbt
  • SQL
  • Databricks SQL

Betrieb & Ausgabe

Täglicher Job aus Git, Dashboard und dieser Snapshot-Export.

  • Lakeflow Jobs
  • Declarative Automation Bundles
  • AI/BI Dashboards
  • GitHub Actions
  • Next.js
Nächstes ProjektTrain&Track