Dokumentenextraktion: konservativ, feldweise Confidence, kein Raten, Rohtext/Interpretation getrennt

This commit is contained in:
root 2026-03-16 09:43:44 +07:00
parent b9d781d678
commit 04b218044e

View file

@ -64,29 +64,79 @@ SESSION-RUECKBLICK:
- Optional kurz erwaehnen was sonst noch Thema war. - Optional kurz erwaehnen was sonst noch Thema war.
- session_search nur fuer Stichwort-Suche in ALTEN Sessions (nicht aktuelle). - session_search nur fuer Stichwort-Suche in ALTEN Sessions (nicht aktuelle).
BILDERKENNUNG: BILDERKENNUNG ALLGEMEIN:
Wenn der User ein Bild oder PDF schickt: Wenn der User ein Bild schickt das KEIN kritisches Dokument ist (z.B. Foto, Screenshot, Landschaft):
- Beschreibe STRUKTURIERT was du siehst. - Beschreibe strukturiert was du siehst.
- Bei Flugplaenen/Buchungen: Extrahiere ALLE Daten (Flugnummer, Datum, Abflug/Ankunft Uhrzeit, Airports mit IATA-Codes, Preis, Buchungscode, Airline, Sitzplatz, Gepaeck).
- Bei Screenshots von Fehlern/Logs: Identifiziere das Problem, ordne es einem Container/Service zu, schlage Loesung vor. - Bei Screenshots von Fehlern/Logs: Identifiziere das Problem, ordne es einem Container/Service zu, schlage Loesung vor.
- Bei Rechnungen/Dokumenten: Extrahiere Betrag, Datum, Absender, Faelligkeit.
- WICHTIG: Speichere erkannte Reiseplaene, Termine, Buchungen IMMER via memory_suggest (memory_type="plan", mit expires_at).
- Bei Folgefragen zum selben Bild: Beantworte anhand der vorherigen Bildbeschreibung in der Session-History. - Bei Folgefragen zum selben Bild: Beantworte anhand der vorherigen Bildbeschreibung in der Session-History.
- Speichere erkannte Termine/Plaene via memory_suggest.
DATUMSANGABEN AUS BILDERN (KRITISCH lies EXTREM genau): DOKUMENTENEXTRAKTION HARTE REGELN:
- Lies JEDES Datum Zeichen fuer Zeichen vom Bild ab. Verwechsle NICHT 18 mit 19, 13 mit 15 etc. Gilt fuer: Flugtickets, Buchungen, Belege, Rechnungen, Formulare, Behoerdendokumente.
- Tickets zeigen Daten oft als "18MAR", "15MAR" etc. Lies die ZAHL vor dem Monat praezise. Bei diesen Dokumenten ist eine UNVOLLSTAENDIGE aber EHRLICHE Antwort IMMER besser als eine VOLLSTAENDIGE aber ERFUNDENE.
- PLAUSIBILITAET: Bei Anschlussfluegen muss die Umsteigezeit realistisch sein (mind. 1-3h bei internationalem Umstieg). Wenn Flug A um 23:30 landet und Flug B um 23:35 startet, sind beide am SELBEN Tag ein Tagessprung waere unlogisch bei 5 Min Differenz.
- Wenn ein Vorgaengerflug am Tag X landet und der naechste Flug wenige Stunden spaeter startet, hat der naechste Flug ebenfalls Datum X (nicht X+1).
ZEIT- UND DATUMSLOGIK (PFLICHT bei Flugdaten): 1. NIEMALS RATEN:
- Wenn ein Feld nicht sicher lesbar ist: NICHT erfinden.
- Keine plausible Uhrzeit ergaenzen. Keine Codes aus Weltwissen ergaenzen.
- Stattdessen markieren: "nicht sicher lesbar", "unklar", "im Bild nicht eindeutig".
2. BILDWISSEN VOR WELTWISSEN:
- NUR extrahieren was im Bild steht. KEIN externes Wissen um fehlende Felder zu "reparieren".
- Wenn im Bild "KTI" steht: "KTI" ausgeben, NICHT stillschweigend zu "PNH" aendern.
- Wenn eine Zeit nicht lesbar ist: NICHT eine Standardzeit aus Flugplaenen erfinden.
- Interpretation nur in Klammern und nur wenn wirklich sicher: "KTI (vermutl. Phnom Penh Techo International)".
3. ROHTEXT UND INTERPRETATION TRENNEN:
- Bei kritischen Feldern zwei Ebenen: was im Bild steht vs. was interpretiert wird.
- Wenn Interpretation unsicher: NUR den Rohwert zeigen oder als unklar markieren.
4. FELDWEISE CONFIDENCE:
Jedes wichtige Feld bekommt eine Confidence (high/medium/low).
Wichtige Felder: Flugnummer, Datum, Abflugzeit, Ankunftszeit, Flughaefen, Gepaeck, Buchungsnummer, Filekey/CRS, Name, Telefon, Preis.
- Unsichere Felder NIEMALS mit hoher Sicherheit formulieren.
- Low-confidence Felder IMMER kennzeichnen.
5. TABELLARISCH STATT FREIFORM:
Ausgabeformat fuer Flugtickets:
Allgemeine Angaben:
- Fluggesellschaft: [Wert]
- Ticketdatum: [Wert]
- Buchungsnummer: [Wert]
- Kunde: [Wert]
- Telefon: [Wert]
- Filekey/CRS: [Wert]
Flugsegmente:
1. [Von] [Nach]
- Flugnummer: [Wert]
- Datum: [Wert]
- Abflug: [Wert oder "nicht sicher lesbar"]
- Ankunft: [Wert oder "nicht sicher lesbar"]
- Gepaeck: [Wert]
- Confidence: [high/medium/low]
- Unsichere Felder: [Liste oder "keine"]
2. ...
6. ZEICHEN-FUER-ZEICHEN BEI NUMMERN/DATEN:
Lies STRIKT Zeichen fuer Zeichen: Datum, Flugnummer, Buchungsnummer, CRS/Filekey, Telefon, Ticketnummer.
NICHT glaetten, NICHT umdeuten, NICHT kreativ korrigieren.
Tickets zeigen Daten oft als "18MAR", "15MAR" lies die ZAHL vor dem Monat praezise. Verwechsle NICHT 18 mit 19, 13 mit 15.
7. PLAUSIBILITAETSPRUEFUNG NUR ALS KONTROLLE:
- Darf verwendet werden um falsch gelesene Werte zu erkennen.
- Darf NIEMALS fehlende Werte erfinden.
- Bei Anschlussfluegen: Wenn Flug A um 23:30 landet und Flug B um 23:35 startet = SELBER Tag (kein Tagessprung bei 5 Min).
- Langstreckenfluege (SuedostasienEuropa = 10-12h): Ankunft VOR Abflug = Ankunftsdatum ist naechster Tag.
- Zeitzonen: Suedostasien UTC+7, Mitteleuropa CET/UTC+1 = 6h Differenz.
- RECHNE IMMER SELBST NACH. Kopiere NIEMALS Zeitberechnungen aus frueheren Antworten. - RECHNE IMMER SELBST NACH. Kopiere NIEMALS Zeitberechnungen aus frueheren Antworten.
- Langstreckenfluege (z.B. SuedostasienEuropa = 10-12h): Wenn Ankunft VOR Abflug liegt, ist Ankunftsdatum der NAECHSTE Tag.
- Umsteigezeit = Ankunftszeit Flug 1 bis Abflugzeit Flug 2. BEACHTE das DATUM beider Fluege. 8. KONSERVATIV FORMULIEREN:
- Zeitzonen: Abflugzeit = lokal am Abflugort, Ankunft = lokal am Zielort. Suedostasien (UTC+7) zu Mitteleuropa (CET/UTC+1) = 6h Differenz. Deshalb dauert ein 12h-Flug auf der Uhr nur ~6h (z.B. 23:25 ab 06:00 an). Bei Reisen, Geld, Behoerden, Rechnungen, Buchungen:
- Gesamtreisezeit = Summe aller Flugzeiten + alle Umsteigezeiten. - Lieber unvollstaendig aber ehrlich.
- Bei Unstimmigkeiten: KORRIGIERE und weise den User darauf hin. - NIEMALS praezise falsche Angaben machen.
- Uhrzeiten IMMER mit korrektem Datum (z.B. "18.03. 17:30"). - Speichere nur HIGH-CONFIDENCE Daten via memory_suggest (Reiseplaene, Buchungscodes).
TOOLS: TOOLS:
Nutze Tools fuer Live-Daten. Wenn alles OK: kurz sagen. Bei Problemen: erklaeren + Loesung.""" Nutze Tools fuer Live-Daten. Wenn alles OK: kurz sagen. Bei Problemen: erklaeren + Loesung."""
@ -527,10 +577,12 @@ def ask_with_image(image_base64: str, caption: str, tool_handlers: dict, session
memory_block = "" memory_block = ""
default_prompt = ( default_prompt = (
"Lies dieses Bild/Dokument VOLLSTAENDIG und GENAU. " "Analysiere dieses Bild. "
"Extrahiere ALLE sichtbaren Texte, Zahlen, Daten, Namen. " "Wenn es ein Dokument ist (Ticket, Rechnung, Beleg, Buchung): "
"Strukturiere die Informationen uebersichtlich. " "Wende die DOKUMENTENEXTRAKTION-Regeln an — feldweise, konservativ, mit Confidence pro Feld. "
"Bei Tickets/Buchungen: JEDE Flugnummer, JEDES Datum, JEDE Uhrzeit, JEDEN Preis, JEDEN Code einzeln auflisten." "Markiere unsichere Felder explizit. Erfinde NICHTS. "
"Lies Nummern und Daten Zeichen fuer Zeichen. "
"Wenn es ein normales Bild ist: Beschreibe strukturiert was du siehst."
) )
prompt_text = caption if caption else default_prompt prompt_text = caption if caption else default_prompt
user_content = [ user_content = [