Icking Phase 2 — Schichtweise Bake-Off
Zweck
Recall-Lift von Cohere v4 hybrid messen wenn man drei Hebel sequentiell aktiviert: Multi-Field → Cohere-Rerank → Query-Rewrite mit Haiku 4.5.
Ehrliche Baseline gegen Eval-Set N=51 (Florian) — bewusst auch any-Match und Warengruppe-Match gemessen, nicht nur das alte strict-Single-Truth-Mapping.
Setup
- Repo:
~/source/a-icking/inference-service/, Branchfeat/search-quality-phase2 - Image:
inference-service-prod:phase2(ECR, av-production) - Task-Def:
inference-service-prod:2(isoliert vom Live-Service auf Rev 1) - RDS:
inference-service-prod.cfwqykik8qyi.eu-central-1.rds.amazonaws.com - Migrations: 001 + 002 (gestern) + 003 (heute, 10 Embedding-Spalten + 6 HNSW)
- Live-Service: unverändert, läuft weiter auf Rev 1 unter https://inference.agenticventures.de
Recall-Tabelle (in-progress)
| Schicht | Stack | R@1 strict | R@1 any | R@10 strict | R@10 any | R@10 wgr | MRR any | p50 | p95 |
|---|---|---|---|---|---|---|---|---|---|
| 0 | hybrid baseline | 3.92 % | 19.61 % | 31.37 % | 43.14 % | 45.10 % | 0.284 | 656 ms | 5825 ms |
| 1 | + multi-field | 5.88 % | 15.69 % | 33.33 % | 52.94 % | 54.90 % | 0.294 | 783 ms | 5479 ms |
| 2 | + cohere-rerank | 13.73 % | 17.65 % | 39.22 % | 47.06 % | 52.94 % | 0.278 | 22.5 s* | 22.7 s* |
| 3 | + query-rewrite | 7.84 % | 11.76 % | 33.33 % | 50.98 % | 58.82 % | 0.220 | 4.4 s | 11.2 s |
* p50 in Schicht 2 = künstlicher 22s-Sleep (Cohere-Rerank-Quota 3/min). Echte Latenz ~1.3s mit Quota-Increase.
Phase-2-Ziel (R@1_any ≥ 50 % UND R@10_any ≥ 80 %) nicht erreicht.
Sieger-Pipeline: Schicht 1 (Multi-Field, kein Rerank, kein Rewrite). R@10_any 52.94 %, p50 783 ms.
Beobachtungen
Schicht 0 — Baseline:
- Strict R@10 31 % reproduziert die gestrigen 33 %. Eval-Logik konsistent über die Code-Refaktorierung hinweg.
- Subtyp-Bias-Hypothese teilweise bestätigt: +12pp R@10 von strict auf any — aber kleiner als nach Stichprobe gehofft (5/5 Subtyp-Bias-OK hätte +25pp bedeutet).
- Latenz p95 5825 ms ist hoch. Cohere v4 EU-CRIS routet ggf. nach eu-south, plus DB-Cold-Start beim ersten HNSW-Hit.
Schicht 1 — Multi-Field (kurztext fusion):
- +10pp R@10_any vs Baseline — klarer Lift, der erwartete Hauptgewinn.
- R@1_any fällt um 4pp — kurztext-Fusion verschiebt Top-1-Ranking, manchmal weg von der erwarteten ID hin zu einer thematisch näheren.
- Latenz fast unverändert (783 vs 656 ms).
- Suchwort-Feld wurde geskippt (Reembed bei 86 % im Cohere-v4-Quota-Throttle
steckengeblieben). suchwort steckt eh schon in
tsv_combined(FTS) mit Weight A — Embedding-Beitrag wäre Bonus.
Schicht 2 — Cohere-Rerank (überraschend negativ):
- R@1_strict steigt deutlich (+8pp gegen Schicht 1) — Rerank findet die als
highest_score_idmarkierte ID öfter im Top-1. - ABER R@10_any sinkt um 6pp gegen Schicht 1. Rerank verliert die plausiblen Alternativen die Multi-Field hochgespült hat. Reranker kennt nur Text-Relevanz (kurztext+rtftext) und ignoriert Multi-Field-Score + Maß-Boost.
- Cohere-Rerank-Quota in eu-central-1 ist Default 3 req/min — musste manuell auf 22s/Call gethrottelt werden. Für Production wäre Quota-Increase nötig.
Schicht 3 — Query-Rewrite (Multi-Field, KEIN Rerank):
- R@10_any sinkt leicht (−2pp gegen Schicht 1), R@1_any fällt um 4pp.
- ABER R@10_wgr steigt um 4pp (gegen Schicht 1) / 14pp (gegen Baseline) — Rewrite verschiebt das Embedding thematisch und findet öfter eine andere ID in derselben Warengruppe/Tätigkeit. Für ID-Match neutral bis negativ, für Kategorie-Match positiv.
- Latenz steigt auf 4.4s p50 (Haiku-Rewrite-Call 500-800ms + Embed + Hybrid).
Phase-2-Ziel (R@10_any ≥ 80 %) verfehlt. Bester Wert 52.94 % aus Schicht 1.
Empfehlung
Production-Pipeline: Cohere v4 + Multi-Field (langtext + kurztext), kein Rerank, kein Rewrite. Erreicht R@10_any 52.94 % bei p50 783 ms.
Nächster Schritt: Florian die Pipeline live zeigen, mit ihm gemeinsam durch
10-15 Queries klicken und beurteilen ob die Top-10 inhaltlich gut sind. Wenn ja
→ in Production schalten, Phase 3 verschieben. Wenn nein → erst Eval-Set-Gespräch
(Single-Truth-Mapping realistisch? expected[] erweitern?), dann technische
Maßnahmen (Reranker-Input-Anreicherung, BGE-M3 fine-tuned, wgr/tgk-Filter).
Reembed-Status
| Provider | Feld | Records | Wann |
|---|---|---|---|
| cohere_v4 | langtext | 32.670 / 32.718 (99,9 %) | 2026-05-15 |
| cohere_v4 | kurztext | 32.697 / 32.718 (99,9 %) | 2026-05-17 17:02 |
| cohere_v4 | suchwort | 86 % (abgebrochen wegen Throttle-Stuck) | 2026-05-17 19:37 |
Geparkt:
- titan v2 langtext bei 20 % (gestern abgebrochen)
- cohere v3 kurztext + suchwort leer (Spalten existieren seit Migration 002, Reembed-Run nie aufgesetzt — Cohere v4 ist Front-Runner, v3 als Backup nicht prioritär)
Cost-Stand
| Posten | EUR |
|---|---|
| Reembed v4 kurztext (32k Records) | ~1.00 |
| Reembed v4 suchwort (86 %) | ~0.70 |
| Bake-Off Schicht 0 | 0.01 |
| Bake-Off Schicht 1 | 0.01 |
| Bake-Off Schicht 2 (Cohere-Rerank) | ~0.05 USD |
| Bake-Off Schicht 3 (Haiku-Rewrite) | ~0.10 USD |
| ECS Fargate Compute | ~0.05 |
| Total | ~3 EUR |
Cross-References
- Plan:
~/source/a-icking/docs/plans/2026-05-15-004-feat-search-quality-phase2-plan.md - Decision:
~/source/a-icking/docs/decisions/2026-05-17-search-pipeline-phase-2.md - Vorgänger-Run: report
- Projekt: _index
- Pattern (Multi-Embedding-Bake-Off): multi-embedding-bake-off